วันศุกร์ที่ 17 ธันวาคม พ.ศ. 2553

สร้าง module ใน drupal

Share it Please
ถึง drupal จะยืดหยุ่นมากจนเราทำอะไรก็ได้ใน content จะเขียน php ลงใน content โดยใช้ php filter หรือจะทำ cck field สำหรับ download ไฟล์ แต่มันก็ยังไม่เพียงพอสำหรับการทำงานบางอย่างของ site ของเรา

เช่นผมอยากจะ validate ข้อมูลบน form ซึ่ง webfrom validation ไม่สามารถทำได้ เราจำเป็นต้องสร้าง custom module ขึ้นมาเพื่อจะทำงานนั้นๆ

การสร้าง custom module นั้นมี tutorial อยู่ที่ http://drupal.org/developing/modules หรือที่ ThaiTux ซึ่งได้แปลไว้เรียบร้อยแล้ว(อ่านแล้วงงนิดหน่อย) ซึ่งผมจะขออธิบายการสร้าง module ง่ายๆ คือ

การสร้าง module จำเป็นต้องมีไฟล์สำคัญอยู่ 2 ไฟล์คือ
  1. module_name.info
  2. module_name.module
ซึ่ง file info จะประกอบด้วยส่วนสำคัญคือ

; $Id$
name = leknarm
description = leknarm hook module
package = "Other"
core = 6.x

โดยความหมายก็ตรงตัวเลยครับ
  • name คือชื่อ
  • description คือรายละเอียด
  • package คือให้มันอยู่ package ไหน ในที่นี้คือ Other
  • และ core คือใช้ได้กับ version อะไร
เมื่อสร้างไฟล์ info เสร็จแล้วเราก็มาสร้างไฟล์ module กัน

<?php
// $Id$

/**
 * Implementation of hook_form().
 */
function leknarm_form_alter(&$form, $form_state, $form_id) {
  if($form_id == 'webform_client_form_1') {
    $form['#submit'][] = 'leknarm_form1_submit';
  }
  if($form_id == 'webform_client_form_2') {
    $form['#submit'][] = 'leknarm_form2_submit';
  }
}
function leknarm_form1_submit($form, &$form_state) {
  // do anything 
}
function leknarm_form2_submit($form, &$form_state) {
  // do anything 
}
?> 
จากด้านบน มีฟังก์ชัน leknarm_form_alter ซึ่งฟังก์ชันดังกล่าวเป็น hook ของ form โดยที่เมื่อมีการ request page ที่มี form ใดๆ มันจะไปเรียกฟังก์ชันดังกล่าวทันที ซึ่งในฟังก์ชันดังกล่าวเราเขียนไว้ว่า ถ้าเป็น form ที่มี id เป็น webform_client_form_1 มีการ submit ข้อมูลแล้วให้ไปเรียกฟังก์ชัน leknarm_form1_submit

นอกจากนี้เรายังสามารถทำ validation ได้โดยใช้คำสั่ง $form['#validate'][] แทนที่คำสั่ง $form['#submit'][]

Blogroll

About