Drupals Views-Modul mit PHP erweitern
Das Views-Modul ist ein sehr mächtiges Werkzeug und eines der unverzichtbarsten Drupal-Module. Manchmal kommt man mit den vorhandenen Funktionen aber trotzdem an eine Grenze. Um diese zu überschreiten brauch es manchmal nur ein paar Zeilen PHP-Code. In diesem Blogbeitrag hatte ich gezeigt, wie man in Drupal 6 eingebettete Views mit einem CCK-Feld und etwas PHP steuern kann. Für Drupal 7 gibt es für den gleichen Zweck das Modul Views PHP.
Wenn man dieses installiert findet man in den Views-Feldern eine neue Option: "Global: PHP".
Fügt man das Feld, kann man hier direkt PHP-Code eintragen.
Achtung: es gibt zwei PHP-Felder. Das erste nimmt den Code auf, um einen Wert für das Feld zu konstruieren. Hier darf auf keinen Fall der Delimiter <?php ?> eingetragen werden. Im zweiten Feld, das den Code für die Ausgabe enthält, muss man den Delimiter dagegen setzen! Hier ein Beispiel mit dem in der ersten Zeile der Inhalt des Feldes "adresse_karte" ausgegeben wird und in der zweiten Zeile die Node-ID:
Und so sieht die Ausgabe des Views aus
Jetzt kann man direkt auf die diversen Variablen des Views zugreifen und eigene SQL-Abfragen schreiben.
Available variables
$view: The view object.
$handler: The handler object.
$static: A variable that can be used to store reusable data per row.
$row: Contains the retrieved record from the database (e.g. $data->nid).
$row->php: Global: PHP
$row->title: Inhalt: Titel
$row->field_adresse_karte: Inhalt: Adresse (für Karte)
$row->field_ol_locator_geofield: Inhalt: Geofield
$row->distance: Proximity: Distance
$data: Contains the retrieved record from the database (e.g. $data->nid).
$value: Value of this field.
Und noch ein Hinweis für alle, die das bisher schon unter Drupal 6 verwendet haben: Der Mechanismus wie Drupal Variable ausliest hat sich in Drupal 7 geändert.
In Drupal 6 hat $row->field_mein_feld den Wert des Feldes geliefert. In Drupal 7 erhält man mit dem gleichen Code nur den Schlüsselwert (z.B. die Node-ID nid). Den eigentlichen Feldwert erhält man jetzt mit $data->field_field_mein_feld['0']['raw']['value'];