11. Februar 2020
liste listenoptionen filter frei definierbar operatoren regex regulär php callback
Mit dem frei definierbarem Filter können Sie eine Weblication® Liste in der Ausgabe individuell filtern.
Die Möglichkeiten der Weblication® Listenfunktionen und
Filtermöglichkeiten sind bereits im Standard sehr vielseitig. Anhand des Filters "Frei definierbarer Filter" zeigen wir Ihnen ein Beispiele auf, welche Möglichkeiten Ihnen darüber zur Verfügung stehen.
Um dies realisieren zu können, sollte eine CMS-Version ab 10.x vorhanden und das aktuelle Listen-Element (Weblic® "Liste Standard") installiert sein.
Dieses Beispiel zeigt, wie Sie eine Dateiliste nach aktueller Gruppe des eingeloggten Benutzer filtern.
Setzen Sie eine eigene Funktion über die wMyProject.php Datei, welche mit der BASE mitgeliefert wird und über die pre.php des globalen Projektes eingelesen wird. Diese Funktion steuern Sie über den Filter "Frei definierbarer Filter" und Operator "PHP Callback-Funktion" an, welcher in den Listenoptionen über die "Filter für die aufzulistenden Dateien" ausgewählt werden kann. Im Feld tragen Sie die entsprechende Funktion ein, z.B. wMyProject::listFilterIsInGroup('kunden').
Als wPath, welcher geprüft werden soll, geben Sie den Knoten an, in welchem Sie die Information für die Gruppe in den Dateien hinterlegt haben, z.B. im Objekt:
/wd:extension/wd:object/wd:data[@id = 'viewGroup']/text()
//*********************************************************************************/
/*
* @method String listFilterIsInGroup(String $value, String $file)
*
* @description Callback Funktion für Operator bei frei definierbarem Listenfilter
*
* @param value value Wert, der über den wPath-Ausdruck des Filters für die aktuelle Datei ermittelt wurde
*
* @param file jeweilige Datei
*
* @return String
*
*/
//*********************************************************************************/
public static function listFilterIsInGroup($value, $file){
//print $value.":".$file."<br/>";
// Prüft beispielsweise, ob der aktuelle Benutzer in der Gruppe ist, die als Bedingung mitgegeben wurde
if(wUserCur::isInGroup($value)){
return true;
}
else{
return false;
}
}
Dieses Beispiel zeigt, wie Sie eine Dateiliste nach den Dateien filtern können, welcher der eingeloggten Benutzer erstellt hat.
Setzen Sie eine eigene Funktion über die wMyProject.php Datei, welche mit der BASE mitgeliefert wird und über die pre.php des globalen Projektes eingelesen wird. Diese Funktion steuern Sie über den Filter "Frei definierbarer Filter" und Operator "PHP Callback-Funktion" an, welcher in den Listenoptionen über die "Filter für die aufzulistenden Dateien" ausgewählt werden kann. Im Feld tragen Sie die entsprechende Funktion ein, z.B. wMyProject::listFilterIsCurrentUser.
Als wPath, welcher geprüft werden soll, geben Sie den Knoten an, in
welchem Sie die Information für die Gruppe in den Dateien hinterlegt
haben, z.B. im Objekt:
/wd:extension/wd:meta/wd:creation/@name
//*********************************************************************************/
/*
* @method String listFilterIsCurrentUser(String $value, String $file)
*
* @description Callback Funktion für Operator bei frei definierbarem Listenfilter
*
* @param value value Wert, der über den wPath-Ausdruck des Filters für die aktuelle Datei ermittelt wurde
*
* @param file jeweilige Datei
*
* @return String
*
*/
//*********************************************************************************/
public static function listFilterIsCurrentUser($value, $file){
//print $value.":".$file."<br/>";
//print wUserCur::getName();
// Prüft ob der übergebene Wert (wPath-Ausdruck) mit dem Usernamen des aktuell angemeldeten Users übereinstimmt.
if(wUserCur::getName() == $value){
return true;
}
else{
return false;
}
}
Diese Beispiele zeigen, wie Sie eine Dateiliste nach den Dateien filtern können, welche im definierten Zeitraum der Veröffentlichung liegen. Ein Beispiel zeigt dies mit regulären Ausdrücken auf, das andere mit globalen Variablen.
Als wPath, welcher geprüft werden soll, geben Sie den Knoten an, in
welchem der Zeitstempel für das Veröffentlichungsdatum hinterlegt ist:
/wd:extension/wd:meta/wd:publication/@time
Als Operator wählen Sie: pregiMatch - regulärer Ausdruck passt
Die Bedingung befüllen Sie durch Angabe eines regulären Ausdruckes mit dem Zeitraum, auf welchen Sie filtern wollen, z.B.:
Als wPath, welcher geprüft werden soll, geben Sie den Knoten an, in
welchem der Zeitstempel für das Veröffentlichungsdatum hinterlegt ist:
/wd:extension/wd:meta/wd:publication/@time
Als Operator wählen Sie: > - größer
Die Bedingung befüllen Sie durch Angabe der globalen Variable, welche Sie entweder direkt in der Seite über ein PHP Quelltext Element definieren oder an zentraler Stelle, wie z.B. in der wMyProject.php.
// z.B. in PHP Quelltext-Element oder in wMyProject global definieren...
$GLOBALS['oneWeekAgo'] = date('Y-m-d H:i:s', strtotime("-1 week"));
$GLOBALS['twoWeeksAgo'] = date('Y-m-d H:i:s', strtotime("-2 week"));
$GLOBALS['threeWeeksAgo'] = date('Y-m-d H:i:s', strtotime("-3 week"));
$GLOBALS['oneMonthAgo'] = date('Y-m-d H:i:s', strtotime("-1 month"));
$GLOBALS['twoMonthAgo'] = date('Y-m-d H:i:s', strtotime("-2 month"));
$GLOBALS['threeMonthAgo'] = date('Y-m-d H:i:s', strtotime("-3 month"));
$GLOBALS['fourMonthAgo'] = date('Y-m-d H:i:s', strtotime("-4 month"));
$GLOBALS['fiveMonthAgo'] = date('Y-m-d H:i:s', strtotime("-5 month"));
$GLOBALS['sixMonthAgo'] = date('Y-m-d H:i:s', strtotime("-6 month"));
$GLOBALS['nineMonthAgo'] = date('Y-m-d H:i:s', strtotime("-9 month"));
Mit aktueller Version unter CMS 12.x, der BASE und des Listen-Weblic® können Sie im Filter nach Veröffentlichungsdatum nun auch direkt vergangene Tage, Monate und Jahre als Bedingung beim Filtern verwendet werden.
Dieses Beispiel führt an, wie Sie die Dateien einer Liste nach einem bestimmten String im Titel filtern. Mit dem frei definierbaren Filter setzen Sie das über die Listenoptionen wie folgt um:
Dieses Beispiel führt an, wie Sie die Dateien einer Liste über URL-Parameter nach einem bestimmten String im Pfad filtern (z.B. eine Jahresangabe wie /de/aktuelles/meldungen/2019). Mit dem frei definierbaren Filter setzen Sie das über die Listenoptionen wie im Screen ersichtlich um.
Wird die Listen-Seite mit entsprechendem URL-Parameter aufgerufen (z.B. domain.dd/de/aktuelles/index.php?year=2019), werden die Listeneinträge darauf gefiltert.
Ähnlich der Umsetzung von Beispiel 5 (Liste mit frei definierbarem Filter nach xpath (path)) können Sie dies z.B. für die Suchergebnisliste der Volltextsuche einsetzen.
Wenn Sie als wPath-Angabe /wd:stat/@extension setzen und über die Bedingung z.B. angeben, lassen sich die Ergebnisse durch Übergabe des URL-Parameters (z.B. ?filterSearch=pdf) nach den entsprechenden Dateiendungen filtern.
Dieses Beispiel führt an, wie Sie die Dateien einer Liste auf Gruppenmitgliedschaft filtern. Mit dem frei definierbaren Filter setzen Sie das über die Listenoptionen unter Einsatz des Operators PHP Callback-Funktion um. In der Bedingung setzen Sie den Funktionsaufruf, welcher als PHP-Funktion z.B. in der wMyProject.php Datei definiert ist.
//*********************************************************************************/
/*
* @method String listFilterIsInGroup(String $value, String $file)
*
* @description Callback Funktion für Operator bei frei definierbarem Listenfilter
*
* @param value value Wert, der über den wPath-Ausdruck des Filters für die aktuelle Datei ermittelt wurde
*
* @param file jeweilige Datei
*
* @return String
*
*/
//*********************************************************************************/
public static function listFilterIsInGroup($value, $file){
//print $value.":".$file."<br/>";
// Prüft beispielsweise, ob der aktuelle Benutzer in der Gruppe ist, die als Bedingung mitgegeben wurde
if(wUserCur::isInGroup($value)){
return true;
}
else{
return false;
}
}
Dieses Beispiel führt an, wie Sie die Dateien einer Liste auf Gruppenmitgliedschaft filtern. Mit dem frei definierbaren Filter setzen Sie das über die Listenoptionen unter Einsatz des Operators PHP Callback-Funktion um. In der Bedingung setzen Sie den Funktionsaufruf, welcher als PHP-Funktion z.B. in der wMyProject.php Datei definiert ist.
//*********************************************************************************/
/*
* @method String listFilterIsCurrentUser(String $value, String $file)
*
* @description Callback Funktion für Operator bei frei definierbarem Listenfilter
*
* @param value value Wert, der über den wPath-Ausdruck des Filters für die aktuelle Datei ermittelt wurde
*
* @param file jeweilige Datei
*
* @return String
*
*/
//*********************************************************************************/
public static function listFilterIsCurrentUser($value, $file){
//print $value.":".$file."<br/>";
//print wUserCur::getName();
// Prüft ob der übergebene Wert (wPath-Ausdruck) mit dem Usernamen des aktuell angemeldeten Users übereinstimmt.
if(wUserCur::getName() == $value){
return true;
}
else{
return false;
}
}