Filter Interfaces

Die Filter Interfaces erstellen einen Zugriff auf Filter bzw. Filterregeln, die im Backend in einem MetaModel definiert sind.

Zusätzlich können in der Programmierung weitere Filter erzeugt oder Filterparameter gesetzt werden.

IFilterRule Interface

Aktuelle Informationen unter: IFilterRule

Interfaces:

getMatchingIds()
gibt alle IDs nach der gegebenen Filterregel zurück

IFilter Interface

Aktuelle Informationen unter: IFilter

Interfaces:

addFilterRule(IFilterRule $objFilterRule)
fügt eine Filterregel zur Filterkette hinzu

getMatchingIds()
gibt alle IDs nach der gegebenen Filterregel zurück

createCopy()
erzeugt eine Kopie des Filters

Beispiele

Die Blocks „Filterung“ zwischen „Start“ und „Ende“ sind als Alternativen zueinander zu betrachten. Die aufgerufenen Klassen sollten als qualifizierter Import per „use“ eingebunden werden.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<?php
// Start
$modelName = 'mm_employees';
$factory   = \Contao\System::getContainer()->get('metamodels.factory');
// alternativ
//$factory = $this->getContainer()->get('metamodels.factory');
$model  = $factory->getMetaModel($modelName);
$filter = $model->getEmptyFilter();

// Filterung nach fester ID (Liste):
$idList = [1,2,3];
$filter->addFilterRule(new \MetaModels\Filter\Rules\StaticIdList($idList));

// Filterung nach Wert eines Attributes:
$value      = 'marketing';
$languages  = $model->getAvailableLanguages();
$attribute  = $model->getAttribute('division');
$filter->addFilterRule(new \MetaModels\Filter\Rules\SearchAttribute($attribute, $value, $languages));

// eigenes SQL:
$query = sprintf('SELECT * FROM %s WHERE published = 1', $modelName);
$filter->addFilterRule(new \MetaModels\Filter\Rules\SimpleQuery($query));

// Filterung mit mehreren Regeln:
// Verknüpfung mit ConditionAnd() oder ConditionOr()
// Vergleich mit GreaterThan, LessThan, NotEqual möglich
$attribute        = $model->getAttribute('price');
$compareInclusive = true;
$andRule          = new \MetaModels\Filter\Rules\Condition\ConditionAnd();
$andRule
    ->addRule(new \MetaModels\Filter\Rules\Comparing\GreaterThan($attribute, 10, $compareInclusive)) // >= 10
    ->addRule(new \MetaModels\Filter\Rules\Comparing\LessThan($attribute, 20));                      // < 20
$filter->addFilterRule($andRule);

// Ende
$items    = $model->findByFilter($filter);
$arrItems = $items->parseAll('text');
//dump($arrItems);