フィルターとページネーションを使用してビューを作成する方法


8

Joomla 3.xのフィルターとページネーションを使用してビューを作成したいのですが、何をどこに含める必要があるのか​​わかりません。

とりあえず、モデルを拡張JModelListし、getListQuery()メソッドを使用してデータをフェッチし始めました。

<?php
defined('_JEXEC') or die;

class smartModelProducts extends JModelList{    

    protected function getListQuery(){
        // Initialize variables.
        $db    = JFactory::getDbo();
        $query = $db->getQuery(true);

        // Create the base select statement.
        $query->select('*')
        ->from($db->quoteName('#__smart_products'));

        return $query;
    }

}

私のview.html.phpはこのようになります:

<?php
defined('_JEXEC') or die;

class smartViewProducts extends JViewLegacy{

    function display($tpl=null){
        $app=JFactory::getApplication();
        $jinput = $app->input;
        $option = $jinput->get('option', null, null);
        $user=JFactory::getUser();

        // Get data from the model
        $this->state = $this->get('State');
        $this->items = $this->get('Items');
        $this->pagination = $this->get('Pagination');

        parent::display($tpl);      
    }
}

モデルとビューに何を追加する必要がありますか?フィルターとページネーションの両方が機能するようにdefault.phpに含める必要があるのは何ですか?

回答:


8

以下の手順に従ってください:

フィルター:

1)モデルコンストラクターにすべてのフィルター可能なフィールドを追加してください

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

    parent::__construct($config);
}

2)以下のように使用するために、フィルター値をモデル(products.php)に入力します

protected function populateState ($ordering = null, $direction = null)
{
    $search = $this->getUserStateFromRequest($this->context . '.filter.search', 'filter_search');
    $this->setState('filter.search', $search);

    $authorId = $app->getUserStateFromRequest($this->context . '.filter.author_id', 'filter_author_id');
    $this->setState('filter.author_id', $authorId);

    $published = $this->getUserStateFromRequest($this->context . '.filter.published', 'filter_published', '');
    $this->setState('filter.published', $published);

    $categoryId = $this->getUserStateFromRequest($this->context . '.filter.category_id', 'filter_category_id');
    $this->setState('filter.category_id', $categoryId);

    // and so on .....
}

3)で定義された必須フィルターフィールドを含むフィルターXMLファイルを追加します。 models/forms/filter_products.xml

See administrator/components/com_content/models/forms/filter_articles.xml

4)でフィルターを取得および設定します view.html.php

$this->filterForm = $this->get('FilterForm');
$this->activeFilters = $this->get('ActiveFilters');

5)リストビューでフィルターを表示する views/products/tmpl/default.php

<?php echo JLayoutHelper::render('joomla.searchtools.default', array('view' => $this));?>

ページネーション:

1)あなたのモデルからページネーションを取得する view.html.php

$this->pagination = $this->get('Pagination');

2)に表示 views/products/tmpl/default.php

<?php echo $this->pagination->getListFooter(); ?>

ノート:

  1. Joomla MVCコンポーネントの開発については、Joomla Articles(com_content)コンポーネントを参照することをお勧めします。これは、現在入手可能な最高のリソース/ドキュメントです。

  2. 上記のコードは管理コンポーネント用です。フロントエンドコンポーネントの場合、ほとんどの手順はほぼ同じですが、要件に応じて調整する必要があります。


フィルターのxmlを作成する方法がわかりません。正しい方向に向けてもらえますか?モデルに直接追加することは可能だと思いました。
mattosmat 2015年

フィルターとページネーションを表示するためのコードはフォーム内に配置する必要がありますよね?
mattosmat 2015年

私の回答を更新
ナガルジュン2015年

ページネーションの場合、xmlファイルは必要ありません。JModelListは必要な関数(getPagination)を定義するため、モデルですぐに使用できます。
ナガルジュン2015年

何のためにxmlが必要ですか?作り方を知りたいので知りたいです。
mattosmat 2015年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.