Cara membuat tampilan dengan filter dan pagination

8

Saya ingin membuat tampilan dengan filter dan pagination untuk Joomla 3.x, tapi saya tidak yakin tentang apa yang harus saya sertakan dan di mana.

Untuk saat ini, model saya meluas JModelListdan saya mulai menggunakan getListQuery()metode untuk mengambil data:

<?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 saya terlihat seperti ini:

<?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);      
    }
}

Apa yang harus saya tambahkan ke model dan pandangan saya? Apa yang harus saya sertakan di default.php saya agar filter dan pagination berfungsi?

mattosmat
sumber

Jawaban:

8

Ikuti langkah-langkah di bawah ini:

Filter:

1) Pastikan Anda menambahkan semua bidang yang dapat difilter dalam konstruktor model Anda

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

    parent::__construct($config);
}

2) Populasikan nilai filter Anda dalam model Anda (products.php) untuk digunakan seperti di bawah ini

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) Tambahkan file xml filter Anda dengan bidang filter wajib yang ditentukan dalam models/forms/filter_products.xml

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

4) Dapatkan dan atur filter di blog Anda view.html.php

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

5) Tampilkan filter dalam tampilan daftar views/products/tmpl/default.php

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

Pagination:

1) Dapatkan pagination dari model di blog Anda view.html.php

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

2) Tampilkan di views/products/tmpl/default.php

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

Catatan:

  1. Saya menyarankan Anda untuk merujuk komponen Artikel Joomla (com_content) untuk setiap pengembangan komponen MVC Joomla. Ini adalah sumber / dokumentasi terbaik yang tersedia saat ini.

  2. Kode di atas dimaksudkan untuk komponen admin. Untuk komponen front-end, sebagian besar langkahnya kurang lebih sama tetapi Anda harus menyesuaikannya sesuai kebutuhan Anda.

Nagarjun
sumber
Saya tidak tahu cara membuat xml untuk filter. Bisakah Anda mengarahkan saya ke arah yang benar? Saya pikir mungkin untuk menambahkannya dalam model secara langsung.
mattosmat
Kode untuk menampilkan filter dan pagination harus masuk dalam formulir, bukan?
mattosmat
memperbarui jawaban saya
Nagarjun
Untuk pagination Anda tidak memerlukan file xml. JModelList mendefinisikan fungsi yang diperlukan (getPagination), sehingga sudah tersedia di model Anda.
Nagarjun
Untuk apa saya membutuhkan xml? Saya ingin tahu sehingga saya bisa mengetahui cara membuatnya.
mattosmat