我是Joomla的新手,我試圖構建一個顯示項目類別的單一組件,當單擊某個類別時,會導致第二個視圖列出相關項目。目前,我只能看到第一個視圖的工作。我不知道如何處理基本文件,控制器和視圖文件以獲得第二個視圖。我試圖尋找幾天的答案,但找不到任何相關的東西。Joomla 3.0具有多個視圖的單一組件
我想保留在一個控制器中,並根據請求的任務選擇正確的視圖。現在,我的請求爲
index.php?option=com_products&task=listing&cat=
只有3個總任務,因此總共3個視圖。所以我不想打擾多個控制器。
- 是否有可能讓一個控制器選擇3個不同的視圖?如果是,如何?
- 會有多個視圖需要多個控制器,以保持一切MVC風格?如果是的話,我該怎麼做?
結構:
com_categories
---categories.php
---controller.php
---models\categories.php
---models\listing.php
---views\categories\view.html.php
---views\categories\tmpl\default.php
---views\listing\view.html.php
---views\listing\tmpl\default.php
categories.php
$controller = JControllerLegacy::getInstance('categories');
$controller->execute(JRequest::getCmd('task'));
$controller->redirect();
Controller.php這樣
class categoriesController extends JControllerLegacy
{
/*
* Main controller: Shows categories
* This is chosen by default.
*/
function display()
{
$view = $this->getView('categories', 'html');
$view->setModel($this->getModel('categories'), true);
$view->setLayout('default');
$view->display();
}
/*
* Listing controller: Shows list of items after a category is clicked
*/
function listing()
{
// This passes the category id to the model
$cat = JRequest::getVar('cat', '1');
$model = $this->getModel('listing');
$model->setState('cat', $cat);
$view = $this->getView('listing', 'html');
$view->setModel($model, true);
$view->setLayout('default');
$view->display();
}
}
房源\ view.html.php
class categoriesViewlisting extends JViewLegacy
{
function display($tpl = null)
{
$doc =& JFactory::getDocument();
// Assign data to the view
$this->item = $this->get('Products');
$this->title = $this->get('Category');
// Display the view
parent::display($tpl);
}
}
嗯,我需要從一個視圖到另一個爲了正常地生成第二視圖傳遞一個類別ID。我認爲URL請求中的任何信息應該由控制器處理,而不是由視圖處理。 但非常感謝!我將在下次使用靜態視圖創建組件時記住這一點。 – ehz350