Falls Sie Filter erstellen möchten, die zusätzlich oder ausschließlich die Extrafelder durchsuchen, können Sie jedem getPages() Aufruf (oder anderen Methoden, Smarty Funktionen, die implizit getPages() nutzen) den zweiten Parameter param mit dem Feld extra aufrufen. Hier wird ein SQL ähnlicher Wert Query erwartet, wie z.B.:
$site->getPages(array(), array('extra' => 'extra.foo = bar'));
Dieses Beispiel würde alle Seiten ermitteln, die im Extrafeld in einer beliebigen Tiefe das Feld foo mit dem Wert bar haben.
Mehrere Abfragen lassen sich mit AND und OR verknüpfen. Folgende Operatoren stehen zur Auswahl:
- = bzw. like: Feld entspricht/beinhaltet dem Wert.
- !=: Wert entspricht nicht.
- >, >=, <, <=: Wert ist größer, größergleich, kleiner oder kleinergleich.
Wenn Sie eine Ausnahme definieren möchten, also dass ein bestimmtes Extrafeld nicht gesetzt ist, verwenden Sie folgende Schreibweise mit einem ! vor dem Feld:
$site->getPages(array(), array('extra' => '!extra.foo'));
Dieses Beispiel würde alle Seiten ermitteln, die im Extrafeld das Feld foo nicht gesetzt haben.
Weitere Filter mit Lucene
Falls Sie die Lucene Suche verwenden, können Sie über das Feld filter im param Parameter den Lucene Query direkt erweitern. Bitte beachten Sie dabei die Lucene Query Syntax.
$site->getPages(array(), array('filter' => 'extra.foo:bar'));
Die Felder extra und filter können miteinander und auch zusätzlich mit dem fulltext Feld kombiniert werden.
Extrafelder in der Suche anpassen
Sie können die Extrafelder, die in den Suchindex für eine Seite geschrieben werden, bei Bedarf auch anpassen. Dazu legen Sie in der bekannten EGOCMS Hierarchie das Skript admin/search_index.php an. Hier muss die PHP Funktion search_index($page, $extra) definiert sein. Die Parameter sind:
- $page: das betroffene Page Objekt.
- $extra: das Extrafeld dieser Page, welches (bereits vom System modifiziert) in den Suchindex gespeichert werden soll.
Sie können in dieser Funktion das Array $extra weiter anpassen und zurückliefern. Das resultierende Array wird dann in den Suchindex für diese Page gespeichert. Beispiel:
function search_index($page, $extra) {
if ($page->isClone()) {
$extra['__clone'] = 1;
}
return $extra;
}