PHP-Export - Sortierungen

Aus OpenEstate-Wiki

Wechseln zu: Navigation, Suche
Website-Export via ImmoTool
PHP-Export - Sortierungen

Inhaltsverzeichnis

Wie funktioniert das Sortieren?

Da die PHP-Skripte zwecks minimaler Anforderungen ohne Datenbank auskommen sollen, wurde folgender Sortier-Mechanismus implementiert.

  • Eine Sortieroperation wird vorab auf jeder Immobilie im Bestand ausgeführt. Das Ergebnis der Sortierung wird im Ordner cache zwischengespeichert.
  • Wenn aus der Immobilienübersicht (index.php) heraus eine Sortierung ausgewählt wurde, wird nach einem zwischengespeicherten Eintrag im cache-Ordner gesucht.
    • Wird eine zwischengespeicherte Sortierung gefunden, wird diese geladen und in der Immobilienübersicht angewendet.
    • Wird keine zwischengespeicherte Sortierung gefunden, sortiert das Programm den Objektbestand und erzeugt den fehlenden Eintrag im cache-Ordner. Das zur Laufzeit ermittelte Sortier-Ergebnis wird dann in der Immobilienübersicht angewendet.

Eigene Sortierung programmieren

Es können beliebig viele Sortierungen programmiert werden.

  • Für jede Sortierung muss eine PHP-Datei im Ordner includes vorliegen.
  • Die Benennung der PHP-Datei ist allgemein: class.order_[name].php
    • An Stelle von [name] muss ein eindeutiger interner Name gewählt werden.
    • z.B. class.order_myorder.php

Beispiel für eine Sortierung

Mit der Datei includes/class.order_postal.php wird der Immobilienbestand nach Postleitzahl sortiert.

  1. <?php
  2. /**
  3.  * Website-Export, Sortierung nach Postleitzahl
  4.  *
  5.  * @author Andreas Rudolph & Walter Wagner
  6.  * @copyright 2009, OpenEstate.org
  7.  * @license http://www.gnu.org/licenses/gpl-3.0.txt
  8.  */
  9.  
  10. if (!defined('IN_WEBSITE')) exit;
  11. require_once( 'include/class.order.php' );
  12.  
  13. class ImmoToolOrder_postal extends ImmoToolOrder 
  14. {
  15.   /**
  16.    * Name der Sortierung.
  17.    */
  18.   function getName()
  19.   {
  20.     return 'postal';
  21.   }
  22.  
  23.   /**
  24.    * Titel der Sortierung, abhängig von der Sprache.
  25.    */
  26.   function getTitle( &$translations, $lang )
  27.   {
  28.     $title = $translations['labels']['order.by.postal'];
  29.     return is_string($title)? $title: $this->getName();
  30.   }
  31.  
  32.   /**
  33.    * Liefert das Sortierungsfeld eines Objektes. 
  34.    */
  35.   function sort_field( &$object, $lang )
  36.   {
  37.     return $object['adress']['postal'];
  38.   }
  39.  
  40.   /**
  41.    * Liefert das Sortierungs-Flag
  42.    * siehe http://www.php.net/manual/en/function.sort.php
  43.    */
  44.   function sort_flag()
  45.   {
  46.     return SORT_STRING;
  47.   }
  48. }
  49. ?>

Am obigen Quelltext werden die Anforderungen an eine Sortierung deutlich:

  • Jede Sortierung ist als Klasse implementiert und erbt die Eigenschaften von ImmoToolOrder. (siehe Zeile 11 & 13)
  • Die Benennung der Sortierungs-Klasse ist fest vorgegeben mit: ImmoToolOrder_[NAME]
    • An Stelle von [NAME] muss der interne Name der Sortierung angegeben sein, in diesem Falle postal.
  • Die Sortierungs-Klasse muss eine Funktion getName() implementieren. (siehe Zeile 18)
    • Diese Funktion liefert den internen Namen der Sortierung, in diesem Falle postal.
  • Die Sortierungs-Klasse muss eine Funktion getTitle( &$translations, $lang ) implementieren. (siehe Zeile 26)
    • Diese Funktion liefert die Übersetzung der Sortierung in einer bestimmten Sprache zurück.
    • Im Parameter $translations wird ein Array mit allen hinterlegten Übersetzungen zur aktuellen Sprache übermittelt. Wenn für die Sortierung eine Übersetzung in data/i18n_de.php vorliegt, kann darauf zurückgegriffen werden.
    • Im Parameter $lang wird der zweistellige ISO-Sprachcode der gewählten Sprache übermittelt.
  • Die Sortierungs-Klasse muss eine Funktion sort_field( &$object, $lang ) implementieren. (siehe Zeile 35)
    • Diese Funktion liefert einen Wert zurück, der zur Sortierung berücksichtigt werden soll.
    • Im Parameter $object wird das Array der zu sortierenden Immobilie übermittelt. Das Array wurde ermittelt aus data/[NR]/object.php.
    • Im Parameter $lang wird der zweistellige ISO-Sprachcode der gewählten Sprache übermittelt.
    • Wenn die Immobilie nicht sortiert werden kann, kann null zurückgeliefert werden, und die Immobilie erscheint unsortiert am Ende der Übersicht.
  • Die Sortierungs-Klasse muss eine Funktion sort_flag() implementieren. (siehe Zeile 44)
    • Diese Funktion liefert ein von PHP-definiertes SORT_FLAG zurück. Damit kann zwischen Sortierung von Zahlen & Texten unterschieden werden.
    • Übliche Rückgabewerte sind SORT_NUMERIC und SORT_STRING.

Beispiel für eine internationale Sortierung

Es kann Fälle geben, in denen die Sortierung von der gewählten Sprache abhängt. Folgendes Beispiel stellt eine solche internationale Sortierung nach dem Immobilien-Titel dar (includes/class.order_title.php).

  1. <?php
  2. /**
  3.  * Website-Export, Sortierung nach Titel
  4.  *
  5.  * @author Andreas Rudolph & Walter Wagner
  6.  * @copyright 2009, OpenEstate.org
  7.  * @license http://www.gnu.org/licenses/gpl-3.0.txt
  8.  */
  9.  
  10. if (!defined('IN_WEBSITE')) exit;
  11. require_once( 'include/class.order.php' );
  12.  
  13. class ImmoToolOrder_title extends ImmoToolOrder 
  14. {
  15.   /**
  16.    * Name der Sortierung.
  17.    */
  18.   function getName()
  19.   {
  20.     return 'title';
  21.   }
  22.  
  23.   /**
  24.    * Titel der Sortierung, abhängig von der Sprache.
  25.    */
  26.   function getTitle( &$translations, $lang )
  27.   {
  28.     $title = $translations['labels']['order.by.title'];
  29.     return is_string($title)? $title: $this->getName();
  30.   }
  31.  
  32.   /**
  33.    * Liefert true, wenn für jede Sprache eine separate Sortierung erfolgen soll.
  34.    */
  35.   function isLanguageSpecific()
  36.   {
  37.     return true;
  38.   }
  39.  
  40.   /**
  41.    * Liefert das Sortierungsfeld eines Objektes. 
  42.    */
  43.   function sort_field( &$object, $lang )
  44.   {
  45.     $val = $object['title'][$lang];
  46.     return is_string($val)? $val: '';
  47.   }
  48.  
  49.   /**
  50.    * Liefert das Sortierungs-Flag
  51.    * siehe http://www.php.net/manual/en/function.sort.php
  52.    */
  53.   function sort_flag()
  54.   {
  55.     return SORT_STRING;
  56.   }
  57. }
  58. ?>

Damit eine internationale Sortierung funktioniert, sind verschiedene Ergänzungen zum ersten Beispiel nötig.

  • Die Sortierungs-Klasse muss eine Funktion isLanguageSpecific() implementieren. (siehe Zeile 35)
    • Diese Funktion muss den Wert true zurückliefern.
  • In der Funktion sort_field( &$object, $lang ) wird der Parameter $lang bei der Ermittlung des zu sortierenden Wertes berücksichtigt. (siehe Zeile 45)

Codebeispiele zu getTitle()

Die Übersetzung einer Sortierung ist prinzipiell auf zweierlei Art möglich.

Sortierung aus einer Übersetzungsdatei übersetzen

  1.   function getTitle( &$translations, $lang )
  2.   {
  3.     $title = $translations['labels']['order.by.postal'];
  4.     return is_string($title)? $title: $this->getName();
  5.   }

Der obige Ausschnitt stammt aus class.order_postal.php

  • Für die PLZ-Sortierung liegt eine Übersetzung in der globalen Übersetzungsdatei (z.B. data/i18n_de.php) vor.
  • Der Wert wird entsprechend aus dem Übersetzungs-Array ermittelt. (Zeile 28 & 29)

Sortierung explizit übersetzen

  1.   function getTitle( &$translations, $lang )
  2.   {
  3.     if ($lang=='de') return 'Meine Sortierung';
  4.     if ($lang=='en') return 'My Ordering';
  5.     // eventuell um weitere Sprachen erweitern...
  6.     return $this->getName();
  7.   }

Der obige Ausschnitt kann verwendet werden, wenn kein Eintrag in der globalen Übersetzungsdatei für die Sortierung vorliegt. Für alle vom ImmoTool ausgelieferten Sortierungs-Klassen wird es globale Übersetzungen geben. Bei Eigenentwicklungen oder Tests kann dieser 'Workaround' aber durchaus hilfreich sein.

Sortierung in die Website integrieren

Die Sortierung in der Immobilienübersicht ansteuern

Alle hinterlegten Sortierungs-Klassen können in der Immobilienübersicht (index.php) über den Parameter order angesteuert werden.

Eine Sortierung in der Website registrieren

Die Auswahl der Sortierung wird in der Immobilienübersicht (index.php) automatisch erzeugt. Hier ist kein weiterer Programmieraufwand nötig.

  • Alle zu verwendenden Sortier-Mechanismen können in der Variablen $OrderOptions hinterlegt werden.
Persönliche Werkzeuge