2013-07-18 50 views
0

我是Joomla的新手,我試圖構建一個顯示項目類別的單一組件,當單擊某個類別時,會導致第二個視圖列出相關項目。目前,我只能看到第一個視圖的工作。我不知道如何處理基本文件,控制器和視圖文件以獲得第二個視圖。我試圖尋找幾天的答案,但找不到任何相關的東西。Joomla 3.0具有多個視圖的單一組件

我想保留在一個控制器中,並根據請求的任務選擇正確的視圖。現在,我的請求爲

index.php?option=com_products&task=listing&cat= 

只有3個總任務,因此總共3個視圖。所以我不想打擾多個控制器。

  1. 是否有可能讓一個控制器選擇3個不同的視圖?如果是,如何?
  2. 會有多個視圖需要多個控制器,以保持一切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); 
    } 
} 

回答

0

如果您只需要視圖,則無需使用子控制器。而不是使用task = taskname,只需使用view = viewname,然後在/ components/com_name/views(複製一個現有的)中添加一個視圖文件夾。

或者乾脆跳過所有這些,並使用component creator來構建它。

+0

嗯,我需要從一個視圖到另一個爲了正常地生成第二視圖傳遞一個類別ID。我認爲URL請求中的任何信息應該由控制器處理,而不是由視圖處理。 但非常感謝!我將在下次使用靜態視圖創建組件時記住這一點。 – ehz350

0

您不需要爲不同的視圖創建新的控制器文件。只需要複製組件的某個視圖文件夾,併爲其指定新的視圖名稱即可。還爲該視圖創建模型文件。

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 

只要給你的鏈接名稱一樣的index.php?選擇= com_categories &視圖=上市