Listen über individuelle PHP Callback Funktion filtern

Nutzbar ab: Version 006.008.063.000

Nutzen Sie eigene PHP-Funktionen, um die für eine Weblication® Liste definierten Dateien vor der Ausgabe individuell manipulieren zu können.

Reichen Ihnen die Möglichkeiten der Weblication® Listenfunktionen und Filtermöglichkeiten nicht aus, können Sie die Ausgabe einer Dateiliste auch individuell beeinflussen.

Um dies realisieren zu können, ist eine CMS-Version ab 006.008.063.000 erforderlich und das aktuelle Listen-Element (Weblic® "Liste Standard"). Die erforderlichen Anpassungen werden nachfolgend beschrieben.

Setzen Sie eine eigene Funktion über die wMyProject.php Datei, die mit der BASE mitgeliefert wird und über die pre.php des globalen Projektes eingelesen wird. Diese Funktion steuern Sie über die "PHP Callback Funktion" an, die 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::myListFunction.

Ihre eigene PHP Funktion wird nach dem Ermitteln der Dateien und vor der Darstellung ausgeführt.

Beispiel 1: Die ersten drei Listeneinträge nach Zufall sortieren

Das nachfolgende Beispiel führt an, wie Sie die ersten drei Listeneinträge der Dateiliste nach Zufall sortieren.

Listenoptionen mit "PHP Callback Funktion" Filter
Listenoptionen mit "PHP Callback Funktion" Filter

Beispiel: Auszug aus /[IHR-GLOBALES-PROJEKT]/wGlobal/scripts/php/wMyProject.php zur Zufallssortierung

<?php

//*********************************************************************************/
/**
* @method String myListFunction(Array $files, Array $listOptions)
*
* @description Callback Funktion für eigene Listenfilter
*
* @param files  Über die Liste eingelesene Dateien
*
* @param listOptions  (Eigene) Listenoptionen zur Steuerung der Listenausgabe
*
* @return String
*
*/
//*********************************************************************************/

public static function myListFunction($files$listOptions){

  
//$files['file'] beinhaltet die Dateien der Liste. Sie können diese hier nachträglich manipulieren
  
  //print '<pre>'; var_dump($files); print '<hr />'; var_dump($listOptions); print '</pre>';
  
  // sortiert die ersten drei Listeneinträge nach Zufall:
  
$filesToSortRandomly array_splice($files['file'], 0, (count($files['file']) < $files['file'] : 3));
  
shuffle($filesToSortRandomly);
  
$files['file'] = array_merge($filesToSortRandomly$files['file']);
  
  return 
$files;

}

?>

Beispiel 2: Veranstaltungstermine Uhrzeit genau filtern

Ein anderes Beispiel zur PHP Callback Funktion wird nachfolgend für die Liste des Veranstaltungskalenders aufgezeigt.

Hier werden die Termine nachträglich zur "normalen" Listenausgabe gem. dem aktuellen Zeitpunkt Uhrzeit genau gefiltert.
Standardmäßig zeigt der Veranstaltungskalender Termine des aktuellen Tages noch an, auch wenn die Endzeit schon abgelaufen ist (z.B. Termin von 10:00 - 11:00 Uhr und Aufruf am gleichen Tag um 12:00 Uhr).

Beispiel: Auszug aus /[IHR-GLOBALES-PROJEKT]/wGlobal/scripts/php/wMyProject.php zu Veranstaltungsterminen

<?php

//*********************************************************************************/
/**
* @method String myEventlistFunction(Array $files, Array $listOptions)
*
* @description Callback Funktion für eigene Veranstaltungslistenfunktion
*
* @param files  Über die Liste eingelesene Dateien
*
* @param listOptions  (Eigene) Listenoptionen zur Steuerung der Listenausgabe
*
* @return String
*
*/
//*********************************************************************************/

public static function myEventlistFunction($files$listOptions){
   
   
$eventCheckTimeNowString   time();  
   
$filesMyEventlistFunction  = array();
   
   foreach(
$files as $filePath){
   
     
$toDate       wURL::getParameter($filePath,'to');
     
$toDateString strtotime($toDate);
    
     if(
$toDateString $eventCheckTimeNowString){
       
$filesMyEventlistFunction[] = $filePath;
     }    
   
   }

   return 
$filesMyEventlistFunction;



?>

Beispiel 3: Listeneinträge nach Besitzer filtern

Dieses Beispiel zur PHP Callback Funktion zeigt auf, wie eine Weblication® Liste nach dem Besitzer-Eintrag (wd:owner) gefiltert werden kann.

Die Liste wird nachträglich hinsichtlich der Einträge darauf geprüft, in welchen Dateien der aktuell eingeloggte Benutzer als Besitzer (wd:owner) eingetragen ist. In der Ausgabe erscheinen somit nur die Listeneinträge, die dem aktuellen Benutzer als Besitzer zugewiesen sind.

Beispiel: Auszug aus /[IHR-GLOBALES-PROJEKT]/wGlobal/scripts/php/wMyProject.php zu Listeneinträgen für Besitzer

<?php

//*********************************************************************************/
/**
* @method String myListFunctionOwner(Array $files, Array $listOptions)
*
* @description Callback Funktion für eigene Listenfunktion für Besitzer
*
* @param files  Über die Liste eingelesene Dateien
*
* @param listOptions  (Eigene) Listenoptionen zur Steuerung der Listenausgabe
*
* @return String
*
*/
//*********************************************************************************/

public static function myListFunctionOwner($files$listOptions){
   
  
$wUserCurent wUserCur::getName();
  
$filesFilterOwner  = array();

  foreach(
$files as $filePath){
   
     
$filePathToCheck preg_replace('/\?.*/'''$filePath); // Querystrings rausnehmen (z.B. bei Veranstaltungsterminen wichtig)
     
$eventOwner wDocumentData::getData($filePathToCheck'/wd:extension/wd:permissions/wd:owner/@name');
    
     if(
$eventOwner == $wUserCurent){
      
$filesFilterOwner[] = $filePath;
     }
  
  }

  
//var_dump($fileslistFilterIsOwner);
  
return ($filesFilterOwner); 

}

?>

Beispiel 4: Listeneinträge nur bei HTTP-Parameter

Dieses Beispiel zur PHP Callback PRE Funktion zeigt auf, wie eine Weblication® Liste die Einträge nur bei übergebenem HTTP-Parameter Wert anzeigt.

Die Liste wird vor dem Ausführen darauf geprüft, ob dem URL-Parameter "firstLetter" ein Wert übergeben wurde. Ist dem nicht der Fall, werden keine Einträge an die Liste übergeben.

Auf diese Weise können Sie z.B. eine Liste mit Filter "Nach dem ersten Buchstaben des Titels filtern" umsetzen, welche beim Aufruf ohne URL-Parameter erstmal keine Einträge zeigt. Einträge werden erst beim Filtern über z.B. eine A-Z-Filterliste angezeigt.

Beispiel: Auszug aus /[IHR-GLOBALES-PROJEKT]/wGlobal/scripts/php/wMyProject.php zu Listeneinträgen nur bei HTTP-Parameter

<?php

//*********************************************************************************/
/**
* @method String hasFirstLetter($query)
*
* @description Callback Funktion für eigene Listenfunktion bei HTTP-Parameter
*
* @param query  Über die Liste eingelesene Dateien
*
* @return String
*
*/
//*********************************************************************************/

public static function hasFirstLetter($query){

  if(
wRequest::getParameter('firstLetter') == ''$query = array();
  return 
$query;
}

?>

Beispiel 5: Listeneinträge nach Jahren für Seitenbesucher filtern

Dieses Beispiel zur PHP Callback PRE Funktion zeigt auf, wie eine Weblication® Liste nach Jahren gefiltert werden kann. Die Auswahl wird in diesem Fall dem Seitenbesucher über eine Auswahlbox ermöglicht.

Umsetzen lässt sich dies z.B. über eine PHP Callback PRE Funktion, welche in der wMyProject.php abgelegt werden kann:

Beispiel: Auszug aus /[IHR-GLOBALES-PROJEKT]/wGlobal/scripts/php/wMyProject.php zu Listeneinträgen auf Jahre gefiltert

<?php

//*********************************************************************************/
/**
* @method String myListFunctionPreFilterYear(String $query)
*
* @description Callback Funktion für Listenfilter vorab nach Jahr
*
* @param query Parameter, welcher der URL übergeben wird
*
* @return String
*
*/
//*********************************************************************************/

public static function myListFunctionPreFilterYear($query){

  
$dirYear date('Y');

  if(
wRequest::getParameterPathSecure('year') != ''){
    
$dirYear wRequest::getParameterPathSecure('year');
  }

  
$query['dir'][0] = $query['dir'][0].'/'.$dirYear;

  
//print '<pre>';
  //var_dump($query);
  //print '</pre>';

  
return $query;
}

?>

Auf diese verweisen Sie über einen PHP Callback PRE Filter in den Listenoptionen (nachfolgend linker Screenshot) und setzen oberhalb des Listenelementes in der Seitenbearbeitung ein PHP Quelltext-Element, welches die Auswahlbox erzeugt (siehe Beispiel rechts unten).
Im Beispiel wird diese Auswahlbox aus den Unterverzeichnissen von /base/aktuelles/meldungen befüllt, welche vom Verzeichnisnamen das entsprechende Jahr gesetzt haben.
Also z.B.:
/base/aktuelles/meldungen/2016
/base/aktuelles/meldungen/2017
/base/aktuelles/meldungen/2018

Listenoptionen mit "PHP Callback PRE Funktion" Filter
Listenoptionen mit "PHP Callback PRE Funktion" Filter

Beispiel: Inhalt des PHP-Quelltext Elementes für Jahresauswahl

$dirsYear wRepository::getSubdirsDir('/base/aktuelles/meldungen');

rsort($dirsYear);

$selectedYear wRequest::getParameter('year');

print 
'<select class="wglSelect" onchange="wSetParameterAndReload(\'year\', this.options[this.options.selectedIndex].text)">';
  print 
'<option '.(wPathName::getDirName($dirYear) == '' 'selected="selected"' '').'>Aktuelle Meldungen</option>';
foreach(
$dirsYear as $dirYear){
  print 
'<option '.($currentYear == wPathName::getDirName($dirYear) ? 'selected="selected"' '').'>'.wPathName::getDirName($dirYear).'</option>';
}
print 
'</select>';

//Die Funktion wSetParameterAndReload ist in der aktuellen ui.js definiert
Liste mit Auswahlbox nach Jahren
Liste mit Auswahlbox nach Jahren

In der Seite wird dem Seitenbesucher bei dieser Umsetzung oberhalb der Liste eine Auswahlbox angezeigt, über welche die Auswahl der Jahre (Unterverzeichnisse) möglich ist. Nach Auswahl des entsprechenden Jahres wird die Seite über die in der aktuellen ui.js hinterlegten wSetParameterAndReload Funktion neu geladen und filtert nach dem gewählten Jahr.

Diese Webseite verwendet Cookies. Durch die Nutzung der Webseite stimmen Sie der Verwendung von Cookies zu. Datenschutzinformationen