module

Using Drush on Windows with Cygwin

What is Drush?

หนึ่งในเครื่องมือที่ขาดไม่ได้เวลาทำงานกับ Drupal ก็คือ Drush ที่ทำให้ทำงานหลายๆ อย่างได้ด้วยการใช้ command line หลักๆ ก็เช่น ดาวน์โหลดและติดตั้งโมดูล/ธีม, เคลียร์ cache, รัน update.php, รัน cron, ดูค่าในตาราง variables ฯลฯ

Why Drush?

ความสามารถของ Drush ที่ใช้บ่อยที่สุดก็น่าจะเป็นตอนติดตั้งโมดูล/ธีม นี่แหละ รันคำสั่งบรรทัดเดียว มันจะดาวน์โหลดแพ็กเกจและแตกไฟล์ให้เสร็จเรียบร้อย สมมติเราต้องการติดตั้งโมดูลซัก 5-6 ตัว ขั้นตอนปกติที่จะต้องทำก็คือ

  • ไปที่ drupal.org
  • ค้นหาโมดูลที่ต้องการ (ถ้าจะให้เร็วกว่านั้น แนะนำให้ค้นหาโมดูลด้วย Firefox quick search)
  • ดาวน์โหลดแพ็กเกจติดตั้งของแต่ละโมดูล
  • แตกแพ็กเกจไปไว้ในไดเร็กทอรี sites/all/modules
  • ไปที่ http://example.com/admin/build/modules
  • คลิกเลือกโมดูลที่ต้องการเปิดใช้งาน
  • กดปุ่ม Save configuration

ในขณะที่ Drush สามารถทำได้โดยพิมพ์คำสั่งแค่ 3 บรรทัด

$ cd /cygdrive/d/www/my_drupal_site
$ drush dl admin admin_menu devel markdown cck views
$ drush en admin admin_menu devel markdown cck views

โฆษณาเสร็จแล้ว มาเข้าเรื่องตามหัวข้อบล็อกกันดีกว่า

Read the rest of this entry »

A Quick (and Dirty) Password Field for Drupal Webform

หนึ่งในโมดูลยอดนิยมของ Drupal เห็นจะหนีไม่พ้น Webform ที่ใช้สร้างฟอร์มเพื่อรับข้อมูลแบบทางเดียวจากผู้ใช้ไปยังผู้ดูแลระบบ หรือเก็บข้อมูลที่ไม่ต้องการใช้ความสามารถของ node เช่น ฟอร์มสำหรับติดต่อผู้ดูแลระบบ, ฟอร์มสมัครสมาชิก, ฟอร์มแจ้งการชำระเงิน, ฯลฯ

เรื่องมีอยู่ว่า ฟอร์มที่ผมต้องการสร้างนั้นจะต้องมีฟิลด์สำหรับใส่รหัสผ่านด้วย แต่ใน component ของ Webform ไม่มีฟิลด์ password มาให้ ลองค้นไปค้นมาก็พบว่ามันเป็น issue ค้างปีมาตั้งแต่ 2007!!!

จริงๆ การสร้าง component แบบ password เองนั้นก็ไม่ยาก แค่ copy ไฟล์ textfield.inc มา เปลี่ยนชื่อเป็น password.inc แล้วแก้ชื่อฟังก์ชันข้างในจาก *_textfield เป็น *_password ก็เรียบร้อย (คนอื่นเค้าก็ทำกันแบบนี้)

Read the rest of this entry »

How to Limit Privatemsg Recipients to Specific Users

คราวที่แล้วเขียนถึงการส่งข้อความจาก Webform โดยใช้โมดูล Privatemsg ไป คราวนี้ก็ยังคงวนเวียนอยู่กับโมดูล Privatemsg เหมือนเดิม

พอดีเว็บที่กำลังทำอยู่ มี requirement ว่าให้ผู้ใช้สามารถส่งข้อความส่วนตัวถึงผู้ดูแลระบบได้เท่านั้น โดยระบบส่งข้อความจะใช้โมดูล Privatemsg เป็นหลัก

วิธีทำที่คิดไว้คร่าวๆ ก็คือต้องแก้ไขฟอร์มสำหรับส่ง private message โดยกำหนดชื่อผู้รับไว้ตายตัวคือ admin จากนั้นก็ disable หรือซ่อนฟิลด์ Recipients ซะ ให้ผู้ใช้กรอกเฉพาะ Subject กับ Body พอ แน่นอนว่าพระเอกของงานนี้คือ Form API

Read the rest of this entry »

A Simple Way to Integrate Webform and PrivateMsg in Drupal

ตอนนี้กำลังปรับแต่งระบบเว็บให้เพื่อนอยู่ครับ หลักๆ คือมีหน้า register ที่สร้างจาก Webform โดยมี requirement ว่า เมื่อผู้ใช้ submit Webform แล้วให้ส่งข้อความไปเตือน admin ว่ามีคนสมัครใช้บริการใหม่ด้วย

ตอบไปว่าเซ็ตนิดเดียวก็ได้แล้ว เพราะนึกว่า Webform มันคงสนับสนุน Privatemsg ด้วย แต่ลอง google ดูก็พบกับคำตอบที่น่าเศร้า เลยต้องหาวิธีทำเอาเอง

ไปๆ มาๆ พบว่าไม่ยากอย่างที่คิด เนื่องจากตอนสร้าง Webform ใหม่ เราสามารถใส่โค้ด additional processing ลงในส่วนของ Webform advanced settings ได้ โดยโค้ดในส่วนนี้จะรันเมื่อข้อมูลที่ส่งเข้ามาผ่านการ validate และพร้อมจะเก็บลงในฐานข้อมูลแล้ว

Read the rest of this entry »

Goodbye, Filebrowser

ปกติเวลาทำเว็บแล้วต้องการให้มี directory listing สำหรับให้ผู้ใช้ดาวน์โหลดไฟล์ โมดูลตัวแรกที่มักจะนึกถึงก็คือ Filebrowser ซึ่งถ้าติดตั้ง Drupal บนเซิร์ฟเวอร์ที่เป็นลินุกซ์ มันจะสามารถทำงานได้ตามปกติ แต่ปัญหาจะเกิดขึ้นทันทีเมื่อใช้เครื่องเซิร์ฟเวอร์ที่เป็นวินโดวส์

สาเหตุของปัญหาจริงๆ น่าจะเกิดจาก encoding ของระบบไฟล์ในวินโดวส์ที่มันไม่เป็น UTF-8 ทำให้มีปัญหาประหลาดๆ เมื่อใช้ฟังก์ชันของ PHP ในการอ่านชื่อไฟล์

ตัวอย่าง issue ที่น่าปวดหัวของ Filebrowser ก็มีประมาณนี้

Read the rest of this entry »