Filtry - Jet\DataListing_Filter

Každý filtr seznamu dat je tvořen svou třídou, která dědí od abstraktní třídy Jet\DataListing_Filter a reprezentuje logiku daného filtru. Rovnou si jeden reálný filtr ukažme. Zůstaneme u prohlížeče událostí a koukneme se na filtr pomocí kterého je možné filtrovat seznam dle druhu události:

namespace JetApplicationModule\EventViewer\Admin;

use 
Jet\DataListing_Filter;
use 
Jet\Form;
use 
Jet\Form_Field_Input;
use 
Jet\Http_Request;

class 
Listing_Filter_Event extends DataListing_Filter {

    public const 
KEY 'event';

    protected 
string $event '';
    
    public function 
getKey(): string
    
{
        return static::
KEY;
    }

    public function 
catchParams(): void
    
{
        
$this->event Http_Request::GET()->getString'event' );
        
$this->listing->setParam'event'$this->event );
    }

    public function 
catchFormForm $form ): void
    
{
        
$this->event $form->field'event' )->getValue();
        
$this->listing->setParam'event'$this->event );
    }

    public function 
generateFormFieldsForm $form ): void
    
{
        
$field = new Form_Field_Input'event''Event:' );
        
$field->setDefaultValue$this->event );

        
$form->addField$field );
    }

    public function 
generateWhere(): void
    
{
        if( 
$this->event ) {
            
$this->listing->addFilterWhere( [
                
'event' => $this->event,
            ] );
        }
    }

}

Co tedy musí povinně filtr umět:

  • Zachytávat své parametry - metoda catchParams
  • Generovat definice formulářových prvků pro filtrační formulář - metoda generateFormFields
  • Zachytávat hodnoty z filtračního formulář (který je v daný moment již zachycen a validován) - metoda catchForm
  • Generovat WHERE část dotazu pro ORM DataModel - metoda generateWhere
  • Každý filtr musí být identifikován svým unikátním klíčem.

View filtru

Každý filtr má své příslušné view. Pro zobrazení filtru ve view, které zobrazuje příslušný seznam se používá toto volání:

<?=$listing->filter(Listing_Filter_Event::KEY)->renderForm()?>

Ovšem toto volání ve finále zavolá view skript daného filtru, který může mít například tuto podobu:

<?php
namespace JetApplicationModule\EventViewer\Admin;

use 
Jet\MVC_View;

/**
 * @var MVC_View $this
 * @var Listing  $listing
 */
$listing $this->getRaw'listing' );
$filter_form $listing->getFilterForm();
?>
<?= $filter_form
->field'event' )->label() ?>
<?= $filter_form
->field'event' )->input()?>

Název view skriptu musí odpovídat identifikačnímu klíči filtru. Tedy v našem příkladu je to event.phtml.

Přehled metod

Metoda Význam
public setListing(
DataListing $listing
) : void
Seznam automaticky při předání filtru nastavuje filtru referenci na sebe. K tomu slouží tato metoda.
public getListing(
) : DataListing
Vrací instanci seznamu dat do kterého filtr náleží.
abstract public getKey(
) : string
Vrací unikátní klíč identifikující filtr. Doporučuje se implementovat takto: class Listing_Filter_Event extends DataListing_Filter {

    public const 
KEY 'event';
    
    public function 
getKey(): string
    
{
        return static::
KEY;
    }
}
A s filtrem následně pracovat takto: <?=$listing->filter(Listing_Filter_Event::KEY)->renderForm()?>
abstract public catchParams(
) : void
Metoda slouží k zachycení parametrů filtru, například GET parametrů z URL.
abstract public generateFormFields(
Form $form
) : void
Metoda slouží k vygenerování formulářových polí filtru.
abstract public catchForm(
Form $form
) : void
Metoda slouží k zachycení hodnot z formuláře filtru. Volá se v momentě, kdy je formulář již zachycen a zvalidován.
abstract public generateWhere(
) : void
Generuje WHERE část dotazu pro ORM DataModel pro samotnou filtraci dat.
public renderForm(
) : string
Postará se o vygenerování příslušného filtru. Výchozí implementace je tato: $view $this->listing->getFilterView();
$view->setVar('filter'$this );
$view->setVar('listing'$this->listing);
        
return 
$view->render$this->getKey() );
Z čehož plyne:
  • Instanci Jet\MVC_View si drží instance seznamu. Filtr ji pouze přebírá.
  • Název view skriptu ve výchozí implementaci odpovídá klíči filtru.
  • View skript má k dispozici instanci seznamu a instanci daného filtru.

Předpřipravené filtry

Pro usnadnění práce Jet obsahuje několik již předpřipravených filtrů, u kterých stačí dokončit implementaci. Zde je jejich seznam:

Jet\DataListing_Filter_Search Klasické políčko pro textové vyhledávání.
Jet\DataListing_Filter_DateInterval Definice rozmezí data (od - do). Dvě vstupní pole.
Jet\DataListing_Filter_DateTimeInterval Definice rozmezí data a času (od - do). Dvě vstupní pole.
Jet\DataListing_Filter_OptionSelect Výběr z definovaných možností (select box).
Předchozí kapitola
Sloupce - Jet\DataListing_Column
Další kapitola
Jet\DataListing_Filter_Search