การพัฒนาโมดูล(Modules Development)

การพัฒนาโมดูล เป็นเรื่องง่าย ถ้าคุณมีความรู้เกี่ยวกับภาษา PHP อยู่บ้าง การพัฒนาโมดูลอาจจะง่าย หรือยากขึ้นอยู่กับสิ่งที่คุณต้องการพัฒนา

เริ่มต้น:

ทุกโมดูลจะต้องถูกเก็บไว้ในไดเรคทอรี modules (ใน /modules/module_name ) และไฟล์หลักของแต่ละโมดูลจะต้องเป็น index.php

หลังจากที่คุณสร้างไฟล์ index.php ซึ่งเหมือนกับไฟล์ PHP ทั่วไป ที่จะต้องเริ่มต้นด้วย:

<?php

/**********************/
/* Your credits go here     */
/**********************/

if(!eregi("modules.php", $_SERVER['PHP_SELF'])){
     die("You can't access this file directly...");
}

$module_name = basename(dirname(__FILE__));
$module_dir = "modules/$module_name/";

3 บรรทัดของโค้ดประกอบด้วย

if(!eregi("modules.php", $_SERVER['PHP_SELF'])){
     die("You can't access this file directly...");
}


เป็นการตรวจสอบเบื้องต้นว่า การเข้าถึงไฟล์ถูกต้องตามระบบหรือไม่(เป็นการป้องกันการเข้าถึงไฟล์ต่างๆโดยตรง) ถ้าไม่ถูกต้อง จะมีข้อความเตือนว่า "You cannot access this file directly" แต่ถ้าการเข้าถึงไฟล์เป็นไปอย่างถูกต้อง ก็จะเป็นการทำงานตามปกติของโมดูลนั้นๆ

เนื่องจากบางฟังก์ชันและตัวแปรที่ใช้ในโมดูลจำเป็นต้องอ้างถึงไฟล์ mainfile.php, theme.php และไฟล์ของฐานข้อมูล ฟังก์ชันที่ใช้ส่วนใหญ่ได้แก่ OpenTable(); CloseTable(); OpenTable2(); and CloseTable2(); (ดูรายละเอียดที่ "; ?> themes development สำหรับรายละเอียด)

2 บรรทัดของโค้ด:

$module_name = basename(dirname(__FILE__));
$module_dir = "modules/$module_name/";


เป็นการกำหนดชื่อของโมดูล และไดเรคทอรีสำหรับโมดูลนั้น เพราะเมื่อคุณสร้างลิงก์ไปยังหน้าและไฟล์ในโมดูลของคุณ จะไม่ถูกกระทบเมื่อมีการเปลี่ยนชื่อไดเรคทอรีของโมดูลนั้น นอกจากนั้น คุณยังสามารถเพิ่มบรรทัด:

$index = 1;


ถ้าคุณต้องการให้แสดงเมนูทางขวา ในโมดูลของคุณ

การสร้างเว็บเพจ

มี 2 วิธีในการสร้างเว็บเพจ คุณสามารถ สร้างแต่ละเว็บเพจในแต่ละไฟล์ หรือ สร้างเป็นฟังก์ชันสำหรับในแต่ละเว็บเพจ (ใช้เพียงไฟล์เดียว) และใช้ switch ในการเรียกเว็บเพจผ่านฟังก์ชัน (ผมจะอธิบายต่อไป)

สร้างแต่ละเว็บเพจในแต่ละไฟล์
เมื่อมีการสร้างไฟล์เป็นแต่ละเว็บเพจ ไฟล์ต่างๆที่สร้างจะต้องอยู่ภายในไดเรคทอรี modules (ตย. /modules/module_name ) แต่ละไฟล์จะต้องอยู่ที่เดียวกันกับไฟล์ index.php ของโมดูลนั้น

การลิงก์ไปยังแต่ละหน้าของเว็บเพจ จะมีลักษณะดังนี้:

<a href="modules.php?name=$module_name&file=filename">


filename จะใช้เฉพาะชื่อไฟล์เท่านั้น ไม่มีชนิดของไฟล์ มีลักษณะดังนี้
modules.php?name=Idiots_Guide&file=example

ซึ่งถ้าลิงก์นี้ อยู่ในไฟล์ php จะต้องมีเครื่องหมาย \ อยู่ก่อนหน้าเครื่องหมาย " ทุกครั้ง ซึ่งจะมีลักษณะดังนี้:

echo "<a href=\"modules.php?name=$module_name&file=filename\">Link Text</a>";


สร้างเป็นฟังก์ชันสำหรับในแต่ละเว็บเพจ
วิธีนี้เป็นวิธีที่ส่วนใหญ่ใช้ในการสร้างเว็บเพจ โดยวิธีนี้จะใช้คำสั่ง switch ในการกำหนดฟังก์ชันสำหรับแต่ละเว็บเพจเพื่อใช้ในการลิงก์ไปในแต่ละหน้าของเว็บเพจ

switch เป็นฟังก์ชันของ PHP ที่มีการใช้เป็น switch($var){ function.

โดยทั่วไป $var จะเป็น $op ซึ่งคุณสามารถนำมาใช้ในโมดูล

แต่ละเว็บเพจที่อยู่ในไฟล์ index.php ของโมดูลภายในฟังก์ชัน โดยเริ่มจากหน้าแรกของเว็บเพจจะมีลักษณะดังนี้:

function pagename(){


และฟังก์ชันจะต้องปิดด้วยเครื่องหมาย } ที่ส่วนท้ายสุดของเว็บเพจ คุณควรเริ่มต้นลักษณะนี้เมื่อคุณสร้างฟังก์ชัน และใส่เนื้อหาระหว่าง { และ } เป็นวิธีที่ดีที่สุดเพื่อจะได้ไม่ลืมที่จะปิดฟังก์ชัน

ฟังก์ชันที่จะเป็นเว็บเพจ จะต้องถูกกำหนดไว้ในฟังก์ชัน switch ด้วย ดังนั้นลักษณะมาตรฐานของ switch ควรจะเป็นดังนี้:

switch($op){

default:
pagename();
break;

case "pagename":
pagename();
break;

}


ในกรณีนี้ เว็บเพจแรก(default) ที่กำหนดไว้ คือ ฟังก์ชัน pagename();

ถ้าคุณต้องการเพิ่มเว็บเพจ คุณก็ต้องเพิ่มในฟังก์ชัน switch ลักษณะนี้:

case "newpage":
newpage();
break;


โดย newpage() เป็นชื่อของฟังก์ชันที่คุณได้สร้างเว็บเพจใหม่ไว้ภายใน

และสำหรับลิงก์ที่จะเรียกไปยังเว็บเพจ จะมีลักษณะดังนี้:

echo "<a href=\"modules.php?name=$module_name&op=pagename\">Link Text</a>";


เมื่อมีการคลิ๊กที่ลิงก์ โมดูลก็จะทำงาน ไฟล์ index.php ก็จะมองไปที่ฟังก์ชัน switch สำหรับ case ที่ตรงกับ pagename ตามที่กำหนดโดย "op=pagename" PHP ก็จะทำงานตามฟังก์ชันที่กำหนดไว้ใน case จนกว่าจะเจอ break; ซึ่งก็คือ ฟังก์ชัน "pagename();" ตามตัวอย่าง

คุณสามารถใส่โค้ดใน switch ถ้าคุณต้องการใช้งานคำสั่ง SQL หรือหน้าจอยืนยันการทำงาน หลังจากสั่งงานผ่านฟอร์มก็ได้ (ผมจะพูดรายละเอียดในส่วนของ "ฟอร์ม(Forms) และฟังก์ชัน"

ใส่ชื่อสำหรับเว็บเพจของคุณ

มีฟังก์ชันใน PHP-Nuke ที่ช่วยคุณในการใส่ชื่อของเว็บเพจเมื่อถูกนำขึ้นมาแสดง ในแต่ละเว็บเพจที่คุณต้องการ โดยใช้โค้ดนี้:

title("Your Title Goes Here");

โค้ดนี้จะแสดงชื่อของเว็บเพจ "Your Title Goes Here" (ไม่มีเครื่องหมาย " ") บนเว็บไซต์ของคุณ

ในส่วนของชื่อเว็บเพจ คุณสามารถกำหนดในส่วนของภาษาต่างๆ (ดูรายละเอียดได้ในส่วนของ ภาษา-Languages ข้างล่าง) ซึ่งคุณสามารถใช้ในกรณีที่มีการแสดงเว็บไซต์ของคุณในภาษาต่างๆที่รองรับ

เพิ่มเนื้อหาลงในเว็บเพจ

ก่อนที่จะใส่เนื้อหาลงในเว็บเพจ คุณจะต้องเริ่มต้นด้วยบรรทัดนี้:

include("header.php");


และจบด้วยบรรทัดนี้

include("footer.php");


2 บรรทัดนี้ ต้อง อยู่ในทุกหน้าของเว็บเพจ นอกเหนือจากบรรทัดของตัวแปร globals ที่จำเป็นต้องอ้างถึง (ดู "; ?> รายละเอียดที่นี่ ว่าตัวแปร globals ประกอบด้วยอะไรบ้าง)

สำหรับเนื้อหา สามารถที่จะสร้างโดยใช้ภาษา php และภาษา html โดยภาษา html ที่คุณใช้ หรืออะไรที่คุณต้องการแสดงบนเว็บเพจ (นอกเหนือจากชื่อของเว็บเพจ) จะต้องอยู่ภายในคำสั่ง echo :

echo "anything in here will show on screen, but the line must end like this: ";


ภายในคำสั่ง echo ส่วนของภาษา html tags ที่คุณใช้จะต้องใส่เครื่องหมาย \ ก่อนหน้าเครื่องหมาย " ที่มีทุกครั้ง

ฟอร์ม(Forms) และฟังก์ชัน

ในโมดูล ถ้าคุณต้องการใช้ฟอร์ม(form) สำหรับการส่งข้อมูลไปยังฐานข้อมูล หรือโมดูลที่จำเป็นต้องมีการตอบกลับ ฟอร์ม(form) จะต้องเริ่มต้นด้วย:

<form action=\"modules.php?name=$module_name\" method=\"post\">


เมื่อคุณสร้างเนื้อหาของฟอร์ม อย่าลืมใส่ input แบบ hidden ด้วยชื่อของ op และค่าของชื่อของฟังก์ชันที่ฟอร์มนั้นต้องการส่งค่าไป

ถ้าคุณต้องการที่จะสั่งงานที่เกี่ยวกับฐานข้อมูล เมื่อคุณส่งค่ามาจากฟอร์ม ซึ่งไม่ต้องการการแสดงบนหน้าจอใดๆ แทนที่จะสร้างฟังก์ชันและส่งค่าจากฟอร์มไปยังฟังก์ชันนั้น คุณสามารถใส่โค้ดเข้าไปใน case "bla_bla": ได้เลยและจบด้วย break;. ตัวอย่าง:

case "formactioncode":

$db->sql_query(INSERT INTO ".$prefix."_random_table VALUES (NULL, $data1, '$data2');
header("Location: modules.php?name=$module_name&op=wherenext");

break;


โค้ดนี้ใช้ในการเพิ่มค่าที่ถูกส่งมาจากฟอร์มไปยังตาราง หลังจากนั้นก็ให้ไปยังเว็บเพจที่คุณต้องการ

ภาษา(Languages)

เป็นส่วนหนึ่งของโปรแกรมที่ชาญฉลาดใน PHP-Nuke ระบบที่สร้างใหม่ขึ้นมา อนุญาตให้นักพัฒนาเขียนโปรแกรมในแบบหลายภาษา(multiple languages) สำหรับโมดูลได้โดยไม่ต้องมีการเขียนโค้ดซ้ำ โดยทั่วไปการทำงานจะมีลักษณะดังนี้ คุณสร้างไดเรคทอรี "language" (ไม่มีเครื่องหมาย " ") ภายในไดเรคทอรี modules/newmodule หลังจากนั้นคุณสร้างไฟล์ชื่อ lang-[language].php โดย [language] เปลี่ยนไปตามชื่อของภาษาที่ใช้

ภายในไฟล์นี้ จะมีลักษณะดังนี้:

define("_LANGUAGE_CALL", "Language Definition");


ในโมดูลใช้ตัวแปร _LANGUAGE_CALL ซึ่งจะแสดงเป็นข้อความ Language Definition เมื่อโมดูลนั้นทำงาน

โดยคุณจะต้องเพิ่มบรรทัดดังกล่าวลงในไฟล์ภาษาก่อน การแปลภาษาจึงจะทำงาน

ที่ส่วนบนสุดของไฟล์ index.php ที่เดียวกับ $module_name และ $module_dir ถูกกำหนด ถัดจากนั้นให้คุณเพิ่มบรรทัดนี้:

get_lang($module_name);


ซึ่งจะมีไว้ใช้เรียกภาษาที่ต้องการสำหรับโมดูลนั้น