it-swarm.com.de

So erstellen Sie eine Ansicht mit Filtern und Paginierung

Ich möchte eine Ansicht mit Filtern und Paginierung für Joomla 3.x erstellen, bin mir jedoch nicht sicher, was und wo ich einschließen soll.

Im Moment erweitert mein Modell JModelList und ich habe begonnen, die Methode getListQuery() zu verwenden, um die Daten abzurufen:

<?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 so 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?

8
mattosmat

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 models/forms/filter_products.xml Definiert sind.

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

4) Holen Sie sich und setzen Sie Filter in Ihrem view.html.php

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

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

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

Seitennummerierung:

1) Paginieren Sie das 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 Komponente Joomla Articles (com_content) für jede Joomla MVC-Komponentenentwicklung zu verwenden. Es ist die beste Ressource/Dokumentation, die derzeit verfügbar ist.

  2. Die obigen Codes sind für die Admin-Komponente bestimmt. Bei Front-End-Komponenten sind die meisten Schritte mehr oder weniger identisch, Sie müssen sie jedoch entsprechend Ihren Anforderungen anpassen.

8
Nagarjun