วิธีสร้าง Component Joomla ขั้นตอนการสร้าง Model

แชร์ ความรู้ในการ พัฒนา Joomla Component Extension Module Plugin

Moderators: mindphp, ผู้ดูแลกระดาน

adinan49
PHP Super Hero Member
PHP Super Hero Member
Posts: 551
Joined: 01/11/2021 9:57 am

วิธีสร้าง Component Joomla ขั้นตอนการสร้าง Model

Post by adinan49 »

อย่างที่เราทราบกันดีว่า คอมโพเนนต์ (Component) joomla คือโปรแกรมเสริมติดตั้งเพื่อเพิ่มความสามารถ ให้กับ Joomla ทำให้ระบบมีประสิทธิภาพในการทำงานมากยิ่งขึ้น ผู้พัฒนานั้นมีการสร้าง คอมโพเนนต์ต่างๆ ให้แก่ระบบ ซึ่งขั่นตอนในการสร้างคอมโพเนนต์ Component ใช้หลักการทำงานแบบ MVC ใน MVC ได้มี Model ที่เราจะมาพูดถึงในบทความนี้กันครับ

Model
‎โมเดลเป็นส่วนที่จัดการเกี่ยวกับข้อมูล ไม่ว่าจะเป็นฐานข้อมูลที่เก็บในเครื่อง หรือฐานข้อมูลภายนอกก็สามารถจัดการ โมเดลยังสามารถรับข้อมูลจากแหล่งอื่นได้ เช่น ผ่าน API บริการเว็บที่ทํางานบนเซิร์ฟเวอร์อื่น โมเดลยังสามารถในการอัพเดตฐานข้อมูลตามความเหมาะสม วัตถุประสงค์ของดมเดลคือการแยกตัวควบคุมและดูจากรายละเอียดของวิธีการรับหรือแก้ไขข้อมูล‎


การสร้าง Model ใน Component Joomla
สร้างโฟเดอร์ model และไฟล์นามสกุลphp
โค้ดในรูปแบบ Joomla ต้องขึ้นต้นโค้ดต่อไปนี้

Code: Select all

<?php
/*
 * @package	MD Gallery
 * @subpackage	com_mdgallery
 * @author	Mindphp Developer Teams
 * @copyright	Copyright (C) 2015 Mindphp. All rights reserved..
 * @license	GNU General Public License version 2 or later;
 */

defined('_JEXEC') or die;
โดยเราจะสร้างคลาสำหรับโมเดล เป็น TestModel ที่มาจากคลาสของ Joomla ที่ชื่อว่า JModelList

Code: Select all

class TestModel extends JModelList
{
}
ในโมเดลของเราจะทำการรับค่าตัวแปร id name แล email

Code: Select all

public function __construct($config = array ())
	{
		if (empty($config['filter_fields']))
		{
			$config['filter_fields'] = array (
				'id', 'a.id',
				'name', 'a.name',
				'email', 'a.email',
			);
		}

		parent::__construct($config);
	}
ต่อมาเราจะทำการเขียนโค้ดสำหรับการค้นหาข้อมูล name ในฐานข้อมูล

Code: Select all

protected function populateState($ordering='a.name',$direction='asc')
	{

		$this->setState('filter.search', $this->getUserStateFromRequest($this->context.'.filter.search','filter_search','', 'string'));
		parent::populateState($ordering,$direction)
	}
เมื่อรับเราค่าตัวแปรเรียบร้อยทำการคิวรีตัวแปรลงในฐานข้อมูลในตาราง #__test

Code: Select all

protected function getListQuery()
	{
		$db = $this->getDbo();
		$query = $db->getQuery(true);

		$query->select('*')->from('#__test AS a');
	
	}
ตอนนี้เราได้เขียนโค้ดสำหรับค้นหาข้อมูลแล้ว แต่ตัวโปรแกรมยังไม่รู้ต้องไปค้นหาข้อมูลตรงไหน ดังนั้นเราต้องเขียนโค้ดค้นหา หลังจากคิวรีกับตารางข้อมูลนั้นเอง แล้วทำการเขียนโค้ดต่อนไปนี้

Code: Select all

if ($this->getState('filter.search'))
		{
			$token = $db->q('%' . $db->escape($this->getState('filter.search')) . '%');

			$searches = array ();
			$searches[] = 'a.name LIKE ' . $token;
			$searches[] = 'a.email LIKE ' . $token;

			$query->where('(' . implode(' OR ', $searches) . ')');
		}

ไฟล์รวมโค้ดที่เขียนทั้งหมด

Code: Select all

  <?php
/*
 * @package	MD Gallery
 * @subpackage	com_mdgallery
 * @author	Mindphp Developer Teams
 * @copyright	Copyright (C) 2015 Mindphp. All rights reserved..
 * @license	GNU General Public License version 2 or later;
 */

defined('_JEXEC') or die;

class TestModel extends JModelList
{

	public function __construct($config = array ())
	{
		if (empty($config['filter_fields']))
		{
			$config['filter_fields'] = array (
				'id', 'a.id',
				'name', 'a.name',
				'email', 'a.email',
			);
		}

		parent::__construct($config);
	}
	protected function populateState($ordering='a.name',$direction='asc')
	{

		$this->setState('filter.search', $this->getUserStateFromRequest($this->context.'.filter.search','filter_search','', 'string'));
		parent::populateState($ordering,$direction)
	}
	protected function getListQuery()
	{
		$db = $this->getDbo();
		$query = $db->getQuery(true);

		$query->select('*')->from('#__test AS a');
		

		if ($this->getState('filter.search'))
		{
			$token = $db->q('%' . $db->escape($this->getState('filter.search')) . '%');

			$searches = array ();
			$searches[] = 'a.name LIKE ' . $token;
			$searches[] = 'a.email LIKE ' . $token;

			$query->where('(' . implode(' OR ', $searches) . ')');
		}
	
	}	
	}
เมื่อมีการบันทึกข้อมูล โมเดลก็จะทำทำหน้าการรับค่าตัวแปร หลังจากนั้นก็ทำการบันทึกลงในฐานข้อมูล ก็จะมีรายการใหม่ปรากฏขึ้นมาในฐานข้อมูล แน่นอนว่าฟอร์มหรือหน้าเว็บไซต์ ที่รับค่าข้อมูลต้องอยู่ในส่วน View และส่วนการจัดการแสดงผลและข้อมูลต้อง มีส่วน Comtoller แต่บทความนี้เราอธิบายแค่ส่วน Model เท่านั้น โมเดลจะมีความเกี่ยวข้องกับฐานข้อมูลโดยตรง
โมเดลทำการบันทึกข้อมูล
โมเดลทำการบันทึกข้อมูล
testModel.png (72.78 KiB) Viewed 582 times


‎การสร้าง Component Joomla เป็นการสร้างแบบ MVC ซึ่งโมเดลเป็นส่วนหนึ่งใน MVC นั้นเอง โมเดลเป็นส่วนที่จัดการเกี่ยวกับข้อมูล โมเดลจะทำหน้าที่รับข้อมูลภายในฐานข้อมูล และภายนอก APi บริการเว็บที่ทํางานบนเซิร์ฟเวอร์อื่น ภายในโมเดลนั้นจะมีส่วนการรับค่าจากแปรฟอร์ม มีการค้นหาค่าในฐานข้อมูล และมีการบันทึกค่าในฐานข้อมูล

อ้างอิง
https://docs.joomla.org/Model-View-Controller
https://joomla-thailand.blogspot.com/2013/11/joomla-module.html
https://www.mindphp.com/%E0%B8%9A%E0%B8%97%E0%B9%80%E0%B8%A3%E0%B8%B5%E0%B8%A2%E0%B8%99%E0%B8%AD%E0%B8%AD%E0%B8%99%E0%B9%84%E0%B8%A5%E0%B8%99%E0%B9%8C/%E0%B8%AA%E0%B8%AD%E0%B8%99-joomla-extension/1971-%E0%B8%AA%E0%B8%A3%E0%B9%89%E0%B8%B2%E0%B8%87-component-joomla-medel.html
  • Similar Topics
    Replies
    Views
    Last post

Return to “Joomla Developing Knowledge”

Who is online

Users browsing this forum: No registered users and 1 guest