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<?php
2// Start
3$modelName = 'mm_employees';
4$factory = \Contao\System::getContainer()->get('metamodels.factory');
5// alternativ
6//$factory = $this->getContainer()->get('metamodels.factory');
7$model = $factory->getMetaModel($modelName);
8$filter = $model->getEmptyFilter();
9
10// Filterung nach fester ID (Liste):
11$idList = [1,2,3];
12$filter->addFilterRule(new \MetaModels\Filter\Rules\StaticIdList($idList));
13
14// Filterung nach Wert eines Attributes:
15$value = 'marketing';
16$languages = $model->getAvailableLanguages();
17$attribute = $model->getAttribute('division');
18$filter->addFilterRule(new \MetaModels\Filter\Rules\SearchAttribute($attribute, $value, $languages));
19
20// eigenes SQL:
21$query = sprintf('SELECT * FROM %s WHERE published = 1', $modelName);
22$filter->addFilterRule(new \MetaModels\Filter\Rules\SimpleQuery($query));
23
24// Filterung mit mehreren Regeln:
25// Verknüpfung mit ConditionAnd() oder ConditionOr()
26// Vergleich mit GreaterThan, LessThan, NotEqual möglich
27$attribute = $model->getAttribute('price');
28$compareInclusive = true;
29$andRule = new \MetaModels\Filter\Rules\Condition\ConditionAnd();
30$andRule
31 ->addRule(new \MetaModels\Filter\Rules\Comparing\GreaterThan($attribute, 10, $compareInclusive)) // >= 10
32 ->addRule(new \MetaModels\Filter\Rules\Comparing\LessThan($attribute, 20)); // < 20
33$filter->addFilterRule($andRule);
34
35// Ende
36$items = $model->findByFilter($filter);
37$arrItems = $items->parseAll('text');
38//dump($arrItems);