การ Set View ใน Component สำหรับ Joomla 3.1

หมวดสำหรับแบ่งบันความ รู้ต่างๆ จะมีหมวดย่อยๆ ในหมวดนี้ เช่น php, SQL, XML, CSS

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

User avatar
tsukasaz
PHP VIP Members
PHP VIP Members
Posts: 11769
Joined: 18/04/2012 9:39 am

การ Set View ใน Component สำหรับ Joomla 3.1

Post by tsukasaz »

การ Set View ใน Component สำหรับ Joomla 3.1

สิ่งที่ต้องรู้ก่อน
- MVC ใน Joomla
- การสร้าง Component Joomla 2.5 พัฒนา Component บน Joomla Framework Extention

ปกติการแสดงผลของ Component จะใช้ function display() ใน Class ของ Controller

Code: Select all

class TestControllerTest extends JControllerLegacy 
{
    function display($cachable = false, $urlparams = array()) 
    {
        JRequest::setVar('view', 'test'); // เลือก view ชื่อ test
        parent::display($cachable, $urlparams);
    }
} 
คำสั่งที่ใช้เลือก View ใช้ได้ 2 ตัว คือ
- JRequest::setVar('view', 'test');
- $this->input->set('view', 'test');
หมายเหตุ เปลี่ยน test เป็นชื่อ View ที่ต้องการ

ในส่วน View จะประกอบด้วยไฟล์ Layout ค่าเริ่มต้นคือไฟล์ default ถ้าต้องการเลือก Layout อื่นๆ นอกจากตัว default สามารถเลือกโดยใช้ 2 คำสั่งด้านบน เปลี่ยน view เป็น layout เช่น ต้องการเลือก layout ชื่อ hello

Code: Select all

class TestControllerTest extends JControllerLegacy 
{
    function display($cachable = false, $urlparams = array()) 
    {
        JRequest::setVar('view', 'test'); // เลือก view ชื่อ test
        JRequest::setVar('layout', 'hello'); // เลือก layout ชื่อ hello 
        parent::display($cachable, $urlparams);
    }
}  

ใน Class ของส่วน View ก็จะใช้ function display() เช่นกัน

Code: Select all

class TestViewTest extends JViewLegacy 
{
    function display($tpl = null) 
    {
        parent::display($tpl);
    }
} 
จากวิธีด้านบนเมื่อ Set View จาก Class ของ Controller มาเข้า Class ของส่วน View มันจะเข้า function display() อัตโนมัติ แต่ถ้าต้องการให้เข้า function อื่นๆ สามารถ Set View ด้วยวิธีต่อไปนี้

Code: Select all

class TestControllerTest extends JControllerLegacy 
{
    function display($cachable = false, $urlparams = array()) 
    {
        $view = $this->getView('test', 'html');
        $view->hello(); // ชี้เลือก function ใน view
        parent::display($cachable, $urlparams);
    }
} 
จากด้านบนการเลือก View ใช้ $view = $this->getView('***', 'html'); (*** = ชื่อ view)
ถ้าต้องการเลือก Layout ใช้ $view->setLayout('***'); (*** = ชื่อ layout)

Class View

Code: Select all

class TestViewTest extends JViewLegacy 
{
    function display($tpl = null) 
    {
        parent::display($tpl);
    }
    
    function hello()
    {
        echo 'Hello World';
    }
} 
นอกจากนี้ $this->getView() ยังสามารถนำไปใช้งาน Multiple Models คือ การเรียกใช้งาน หลายๆ Model ใน 1 View เพราะถ้าเราเรียก view แบบไม่ใช้ getView() ในส่วน View จะเรียก Model ได้แค่อันเดียว

Code: Select all

class TestControllerTest extends JControllerLegacy 
{
    function display($cachable = false, $urlparams = array()) 
    {
        $view = $this->getView( 'test', 'html' );
        $view->setModel($this->getModel('test'), true); // เรียกใช้ Model ชื่อ test (ค่า true เป็นการ set default model)
        $view->setModel($this->getModel('testa')); // เรียกใช้ Model ชื่อ testa

        parent::display($cachable, $urlparams);
    }
} 
Class View

Code: Select all

class TestViewTest extends JViewLegacy 
{
    function display($tpl = null) 
    {
        $item1 = $this->get('data' ); // เรียกใช้ function getData() ใน Model ชื่อ test
        $item2 = $this->get('data', 'testa'); // เรียกใช้ function getData() ใน Model ชื่อ testa
        
        parent::display($tpl);
    }
} 
The last bug isn't fixed until the last user is dead. (Sidney Markowitz, 1995)

Return to “Share Knowledge”

Who is online

Users browsing this forum: No registered users and 4 guests