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?

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.


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.