ถึง 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 ไฟล์คือ
- module_name.info
- 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'][]
Continue Reading...