0

私はJoomlaを初めて使用し、アイテムのカテゴリを表示する単一のコンポーネントを構築しようとしています.カテゴリをクリックすると、関連するアイテムをリストする2番目のビューにつながります. 今のところ、最初のビューしか動作しません。2 番目のビューを機能させるために、ベース ファイル、コントローラー、およびビュー ファイルをどうすればよいかわかりません。数日間答えを探してみましたが、関連するものは見つかりませんでした。

単一のコントローラーに保持し、要求されたタスクに基づいて正しいビューを選択したいと考えています。今のところ、私はリクエストを持っています

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

合計 3 つのタスクしかないため、合計 3 つのビューになります。したがって、複数のコントローラーを気にしたくなかったのです。

  1. 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

カテゴリ.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);
    }
}
4

3 に答える 3