โมดูล Joomla 4 หมายถึงตำแหน่งต่างๆที่ถูกวาง และกำหนดได้ตามโครงสร้างพื้นฐานการออกแบบ ในแต่ละ Template จะมีจำนวน Module ที่ไม่เท่ากัน ขึ้นอยู่กับการออกแบบของ Template นั้น ๆ ลักษณะพื้นฐานของ Module จะมีความเป็น ไดนามิก (Dynamic) คือมีความยืดหยุ่นตัวสูง สามารถใส่ Object ได้อย่างไร้ขีดจำกัดสามารถเคลื่อนย้ายได้รวดเร็ว และยังสลับตำแหน่งได้อย่างอิสระ และในบทความนี้เราจะมาลองทำ Module เอามามาใช้เอง ซึ่งเราสามารถทำ Module ที่เราได้สร้างเอาไว้มาใช้งานเองได้ และสามารถนำความารู้โค้ดมาประยุกต์มาใช้ทำ Module เองได้ก็เหมือนกัน
ก็ที่จะเริ่มเรามารู้ว่าการพัฒนาตัวของ joomla ก็มีจะโฟล์เดอร์ 4 ตัว ก็คือ
- Components
- Modules
- Plugins
- Templates
โครงสร้าง Joomla จะมีหน้าบ้านและหลังบ้าน
- หลังบ้านก็จะอยู่ administrator
- หน้าบ้านจะไม่ได้อยู่ใน administrator หรือก่อน administrator
ในการสร้างไฟล์โฟลเดอร์ module จะใส่ชื่อตัวแรกคือ mod_ แล้วตามด้วยชื่อของ module นั้น ๆ เช่น mod_login เป็นต้น พอเราสร้างโฟลเดอร์เสร็จให้เราไปสร้างไฟล์ และใช้ชื่อตาม modules ที่เราต้องการ
โฟลเดอร์และไฟล์ในการพัฒนา Module จะมีดังนี้
- ไฟล์ xml ก็จะเป็นส่วนบอกรายละเอียดของ Module เช่น ทีมที่พัฒนา, เวอร์ชันของ Module, รับอรอง Joomla เวอร์ชันใดบ้าง และใส่ไฟล์ที่เราใช้ เป็นต้น
ตัวอย่างในไฟล์ xml
<?xml version="1.0" encoding="utf-8"?> <extension type="module" version="3.1" client="site" method="upgrade"> <name>mod_menu</name> <!-- ชื่อ modules --> <author>Joomla! Project</author> <!-- คนเขียน หรือ ทีมพัฒนา --> <creationDate>March 2006</creationDate> <!-- วันที่พัฒนา --> <copyright>(C) 2006 Open Source Matters, Inc.</copyright> <license>GNU General Public License version 2 or later; see LICENSE.txt</license> <authorEmail>[email protected]</authorEmail> <!-- อีเมล --> <authorUrl>www.joomla.org</authorUrl> <!-- ชื่อเว็บ --> <version>3.0.0</version> <!-- เวอร์ชันของตัวโมดูล --> <description>MOD_</description> <!-- คำอธิบายของ module เช่น MOD_ ชื่อ modules_XML_DESCRIPTION --> <files> <!-- รายละเอียดโฟล์เดอร์และไฟล์ --> <filename module="mod_">mod_.php</filename> <folder>preset</folder> <folder>tmpl</folder> <filename>helper.php</filename> <!-- connect database --> <filename>menu.php</filename> </files> </extension>
- ไฟล์ php จะเป็นส่วนเรียกใช้คลาสและฟังก์ชัน
ตัวอย่างในไฟล์ php
<?php /** * @package MOD ชื่อ module * @subpackage mod_ ชื่อ module * @author Mindphp Developer Teams * @copyright Copyright (C) 2021 Mindphp. All rights reserved. * @license GNU General Public License version 2 or later; */ defined('_JEXEC') or die; require_once __DIR__ . '/helper.php'; $helper = new ModTestHelper(); //เรียกคลาส $test = $helper->getItems(); //เรียกฟังก์ชัน require(JModuleHelper::getLayoutPath('mod_ชื่อ module', 'default'));
- ไฟล์ helper.php จะเป็นส่วนที่สร้าง class และฟังก์ชัน php เป็นต้น
ตัวอย่างไฟล์ helper.php ในตัวอย่างเป็นการดึงข้อมูล databases ซึ่งการใช้ table จะนำหน้าด้วย #__(ตามด้วยชื่อตารางที่เราต้องการนำมาใช้งาน)
<?php /** * @package mod_ ชื่อ module * @author Mindphp Developer Teams * @copyright Copyright (C) 2021 Mindphp. All rights reserved. * @license GNU General Public License version 2 or later; */ defined('_JEXEC') or die; // class ModMindphpHelper { //เชื่อมต่อฐานข้อมูล public function getItems() { $db = Jooml\CMS\Factory::getDbo(); $qurery = $db->getQurery(true); ->select('*') ->form('#__ชื่อตาราง'); $db->setQuery($query); $items = $db->loadAssocList(); //ดึงแบบ array return $items; } }
- ไฟล์ default.php จะเป็นส่วนแสดงผลของโมดูล หรือโชว์หน้าบ้าน
ตัวอย่างไฟล์ default.php
<?php /** * @package MOD ชื่อ module * @subpackage mod_ ชื่อ module * @author Mindphp Developer Teams * @copyright Copyright (C) 2021 Mindphp. All rights reserved. * @license GNU General Public License version 2 or later; */ defined('_JEXEC') or die; ?> <p> HELLO </p>//จะไปแสดงโชว์หน้าบ้าน
- โฟล์เดอร์ language จะเป็นการแสดงภาษาต่าง ๆ เช่น en-GB.mod_ ชื่อ module.sys.ini
MOD_ชื่อ module = "Module" MOD_ชื่อ module_XML_DESCRIPTION = "This is module. "
เราพอรู้จักองค์ประกอบต่าง ๆ ในการพัฒนา Module ใน Joomla เราก็มาลองสร้าง Module ก็จะมีดังนี้
ให้เราลองสร้างโมดูล โดยไป Modules แล้วสร้างชื่อโฟลเดอร์ mod_test
จากนั้นเราก็สร้างไฟล์และโฟลเดอร์ตามที่เราได้อธิบายข้างต้น
โค้ดในไฟล์ต่าง ๆ จะมีดังนี้
- ไฟล์ mod_test.xml
<?xml version="1.0" encoding="utf-8"?> <extension type="module" version="3.1" client="site" method="upgrade"> <name>mod_test</name> <author>Teams test</author> <creationDate>September 2022</creationDate> <copyright>(C) 2006 Open Source Matters, Inc.</copyright> <license>GNU General Public License version 2 or later; see LICENSE.txt</license> <authorEmail>[email protected]</authorEmail> <authorUrl>https://www.mindphp.com</authorUrl> <version>1.0.0</version> <files> <filename module="mod_test">mod_test.php</filename> <folder>lanfuage</folder> <folder>tmpl</folder> <filename>helper.php</filename> </files> </extension>
- ไฟล์ mod_test.php
<?php /** * @package Module test * @subpackage mod_test * @author Mindphp Developer Teams * @copyright Copyright (C) 2021 Mindphp. All rights reserved. * @license GNU General Public License version 2 or later; */ defined('_JEXEC') or die; require_once __DIR__ . '/helper.php'; $helper = new ModTestHelper(); $test = $helper->getItems(); require(JModuleHelper::getLayoutPath('mod_test', 'default'));
- ไฟล์ en-GB.mod_test.sys.ini
MOD_TEST = "Modules Test" MOD_TEST_XML_DESCRIPTION = "This is test module."
- ไฟล์ default.php
<?php /** * @package Module test * @subpackage mod_test * @author Teams test * @copyright Copyright (C) 2021 Mindphp. All rights reserved. * @license GNU General Public License version 2 or later; */ defined('_JEXEC') or die; ?> <p> HELLO </p> <ul> <?php foreach ($tests as $test) : ?> <li><?php echo $test['name_en-GB'] ?></li> <?php endforeach; ?> </ul>
- ไฟล์ helper.php
<?php /** * @package Module test * @subpackage mod_test * @author Teams test * @license GNU General Public License version 2 or later; */ defined('_JEXEC') or die('Restricted access'); class ModTestHelper { public function getItems() { $db = Joomla\CMS\Factory::getDbo(); $query = $db->getQuery(true) ->select('*') ->from('#__mzc_products'); $db->setQuery($query); $items = $db->loadAssocList(); return $items; } }
ผลลัพธ์ที่ได้
พอเราเขียนโค้ด module เสร็จ ให้เราไปติดตั้ง module ที่เราได้สร้างเอาไว้มาแสดงที่หน้าบ้าน ซึ่งให้เราไปที่ System ไปคลิกที่ Discover เพื่อติดตั้งโมดูล
ก็จะเจอหน้า Discover กดติดตั้งโมดูลของเราได้เลย
หลังจากติดตั้งเสร็จ ให้เราไปที่ system แล้วไปคลิกที่ site module แล้วกด New เพื่อใช้โมดูลที่เราได้พัฒนาเอาไว้
หลังจากนั้นเราตั้งค่าโมดูลให้แสดงส่วนใด
โมดูลก็แสดงหน้าบ้าน
ดังนั้น ในการพัฒนาโมดูล หรือเขียนโค้ดโมดูลเป็นอะรไที่ไม่ยาก ถ้าเราเข้าใจองค์ประกอบของโฟลเดอร์และไฟล์ที่ใช้ใน Joomla เราก็สามารถสร้างโมดูลเอามาใช้งานได้เลย ซึ่งองค์ประกอบที่ใช้พัฒนาโมดูลใน Joomla ก็มี ไฟล์ xml, ไฟล์ PHP, ไฟล์ helper, โฟลเดอร์ tmpl และโฟลเดอร์ language ในการพัฒนาตัวโมดูลตัวหนึ่ง
ศึกษาเพิ่มเติม
บทเรียน PHP - Joomla Framework พัฒนาส่วนเสริมจุมล่า
อ้างอิง :
ทำเว็บไซต์ด้วย Joomla 4 ,[ออนไลน์], เข้าถึงได้จาก https://www.mindphp.com/บทความ/joomla-4.html
วิธีการสร้าง Module ของ Joomla โดยใช้ Discover File Module ,[ออนไลน์], เข้าถึงได้จาก
https://www.mindphp.com/forums/viewtopic.php?t=58421