So erstellen Sie eine Ansicht mit Filtern und Paginierung

8

Ich möchte eine Ansicht mit Filtern und Paginierung für Joomla 3.x erstellen, bin mir aber nicht sicher, was ich wo einfügen muss.

Im Moment wird mein Modell erweitert JModelListund ich habe begonnen, die getListQuery()Methode zum Abrufen der Daten zu verwenden:

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

}

Meine view.html.php sieht folgendermaßen aus:

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

Was muss ich meinem Modell und meiner Ansicht hinzufügen? Was muss ich in meine default.php aufnehmen, damit sowohl Filter als auch Paginierung funktionieren?

Mattosmat
quelle

Antworten:

8

Befolgen Sie die folgenden Schritte:

Filter:

1) Stellen Sie sicher, dass Sie alle Ihre filterbaren Felder in Ihrem Modellkonstruktor hinzufügen

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

    parent::__construct($config);
}

2) Füllen Sie Ihre Filterwerte in Ihr Modell (products.php) ein, um sie wie folgt zu verwenden

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) Fügen Sie Ihre Filter-XML-Datei mit den erforderlichen Filterfeldern hinzu, die in definiert sind models/forms/filter_products.xml

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

4) Holen Sie sich Filter in Ihre view.html.php

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

5) Filter in der Listenansicht anzeigen views/products/tmpl/default.php

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

Seitennummerierung:

1) Holen Sie sich die Paginierung vom Modell in Ihrem view.html.php

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

2) Anzeige in Ihrem views/products/tmpl/default.php

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

Anmerkungen:

  1. Ich empfehle Ihnen, die Joomla Articles (com_content) -Komponente für jede Joomla MVC-Komponentenentwicklung zu verwenden. Es ist die beste Ressource / Dokumentation, die bisher verfügbar ist.

  2. Die obigen Codes sind für die Administratorkomponente gedacht. Für die Front-End-Komponente sind die meisten Schritte mehr oder weniger gleich, aber Sie müssen sie gemäß Ihren Anforderungen anpassen.

Nagarjun
quelle
Ich weiß nicht, wie ich die XML für die Filter erstellen soll. Könnten Sie mich bitte in die richtige Richtung weisen? Ich dachte, es wäre möglich, sie direkt in das Modell aufzunehmen.
Mattosmat
Der Code zum Anzeigen der Filter und der Paginierung muss in einem Formular enthalten sein, oder?
Mattosmat
hat meine Antwort aktualisiert
Nagarjun
Für die Paginierung benötigen Sie keine XML-Datei. JModelList definiert die erforderlichen Funktionen (getPagination), sodass sie in Ihrem Modell leicht verfügbar sind.
Nagarjun
Wofür brauche ich die XML? Ich möchte wissen, damit ich herausfinden kann, wie man einen macht.
Mattosmat