Drupal Views per PHP einbinden - Subviews erstellen

Fr, 23.04.2010 - 14:18 -- Daniel Espendiller

Für Datenbankabfragen und deren Auswertungen nimmt man im alltäglichen Leben irgendwelche Reporting Tools. In Drupal gibt es eine ähnliche Funktion Namens Ansichten (Views). Hiermit kann man relativ einfach ohne Programmierkenntnisse seine Artikel / Seiten abfragen, filtern und aufbereiten. Ich brauchte allerdings diese Unterberichte auch in Drupal, dazu muss man das Views Module etwas erweitern.

Was soll passieren?

Ich habe also einen Inhaltstyp vom Typ Projekte. In diesem habe ich unter anderem ein CCK-Feld (Beitragsreferenz) mit dem ich auf dazugehörige Unterseiten verweisen will. Hieraus möchte ich wie oben im Bild eine einfache Übersichtsstruktur generieren und einige weitere Spielereien machen, deswegen kamen für mich keine fertige Module in Frage. Die Bordmittel sind eigentlich ausreichend man muss nur wissen wie.

Module: views_customfield

Neben dem Views Module brauchen wir views_customfield. Hierdurch erhalten wir ein zusätzliches globales Viewsfeld, was wir in jedem View benutzen können. Innerhalb diesem Feldes ist es möglich reinen PHP-Code einzufügen und somit eine Feldausgabe zu manipulieren und zusätzlich einzubinden.
Im Feldes steht uns eine Variable $data zur Verfügung, in der alle bisherigen Ausgaben der aktuellen "Abfragenzeile" enthalten sind (Achtung: auf die Reihenfolge achten).

Unterview (Secondary View)

Der View den wir in einen weiteren einfügen wollen, sollte entsprechend vorbereitet werden. Wir sollen nur CCK-Felder ausgeben, die in einem bestimmten Beitrag enthalten sind. Dazu setzen wir einfach einen Parameter, welchen wir dann später beim einbinden des Views übergeben. Bei den Ausgabefeldern kann ja jeder selber kreativ werden.

Hauptview (Primary View)

In unserem Hauptview filtern wir alle Beiträge heraus, die wir dann für unseren Unterview nutzen wollen. Da wir den zusätzlichen View über die Beitrags-ID nid einbinden wollen, müssen wir logischerweise dieses Feld einbinden, können es natürlich dann von der Anzeige ausschließen, wenn es nicht gebraucht wird.
Zum Einbinden des Views müssen wir ein customfield: PHP-Code hinzufügen. Über dieses Feld binden wir dann den weiteren View über die Beitrags-ID ein. Darauf achten, dass das Beitrags-ID nid vor diesem Customfield steht, sonst können wir die Variable nicht nutzen.
Innerhalb des Customfield machen wir dann Gebrauch von der Drupal PHP-Funktion views_embed_view. Die Funktion erwartet als ersten Parameter den einzubindenden Viewname gefolgt von der gewünschten Darstellung (z.B. default). Bei dem dritten Übergabewert handelt es sich dann um den Paramter, den wir im Unterview definiert haben. Dieser könnte weggelassen werden, wenn meinen keinen hat. Da wir über die Beitrags-ID filtern wollen, nutzen wir $data->nid ($data enthält alle alle Werte des aktuellen Ausgabezeile). Wir können übrigens auch ein Array nutzen z.B Array($data->nid,1).

print views_embed_view('sidebar_verweise','default',$data->nid);

Performance

Ich konnte keine großen Perfomceverluste feststellen, man sollte vielleicht darüber nachdenken die Cache Funktion in den Views zu aktivieren.