BLOG

Mehrere Panel-Varianten für einen Node

Heute hatten wir den Wunsch, dass es zu einem Node mehrere Panel-Varianten geben soll. Das könnte man so realisieren, dass man verschiedene Panels auf einem Pfad mit der Node-ID verweisen lässt. Basis wäre also immer "node/123" und dann zum Beispiel "node/123/bilder" oder "node/123/kommentare". Dies ist sehr leicht mit etwas wie "node/%/bilder" zu erreichen, aber es wäre ja schon schöner, wenn man den URL-Alias des Nodes verwenden könnte und dann so etwas wie "hunde/odin/bilder" nutzen kann. Panels und Views können zwar den Title des Nodes benutzen, aber der ist nur bedingt für die URL geeignet. Und der Alias, der vom Path Auto Modul benutzt wird, ist umgeschrieben, um URL-konform zu sein. Also kann man diese Daten mit Panels nicht so leicht auflösen.

Zu Hilfe kommt hier das Subpath Alias Modul von smk-ka. Dieses setzt auf das URL alter Modul auf und erweitert den Alias eines Nodes auf beliebige Länge. Ein Node ist also nicht mehr nur unter "hunde/odin" zu erreichen, sondern auch unter allem, was angehängt wird, also nun auch unter "hunde/odin/bilder". Intern wird dies wie immer aufgelöst in den Systempfad mit der Erweiterung "node/123/bilder". Dies kann man dann ausgezeichnet für Panels verwenden. $_GET['q'] enthält nun den gewünschten Pfad, den wir abfragen können.

Wir aktivieren also das Panel, welches die Node-Ansicht überschreibt, also "/node/%node". Hier legen wir wie gewohnt eine Variante an und filtern auf den gewünschten Node-Type z. B. Hund. Dieses Panel wird nun auch für "hunde/odin/bilder" verwendet, da wir ja Subpath Alias aktiv haben. Nun erstellen wir eine weitere Variante. Diese filtert auch nach dem Node-Type "Hund" und zusätzlich noch nach PHP. In das PHP-Feld geben wir dann Folgendes ohne(!) die PHP-Tags ein:

<?php
return drupal_match_path($_GET['q'], '
*/bilder
'
);
?>

Dies wird mit eval() evaluiert und solange es TRUE zurückgibt und der richtige Node-Type gerade aktiv ist, wird diese Panel-Variante auch benutzt. drupal_match_path() ist die gleiche Funktion, die auch zur Anzeige der Blöcke verwendet wird, und ist sehr praktisch. Man muss lediglich beachten, dass auch hier ein Ausdruck pro Zeile verarbeitet wird. Da eval() nie so eine ganz saubere Methode ist, würde ich gern einen PlugIn für Panels schreiben, der dort eine Textarea anbietet für Pfade, aber erstmal, ist das Snippet eine gute Lösung.

Zum Schluss muss man noch beachten, dass man die Panel-Varianten in die richtige Reihenfolge bringt. Die Variante mit der höchsten Komplexität sollte an erster Stelle sein. Wenn nur auf den Node-Type abgefragt wird, würde immer dieses Panel verwendet werden, wenn es an erster Stelle steht.

Auf diese Art und Weise kann man leicht mit Drupal und ein paar tollen Modulen unter SEO-tauglichen URLs verschiedenste Inhalte im Kontext eines anderen Inhalts zusammenbringen.

Mehrere Panel-Varianten für einen Node
Mehrere Panel-Varianten für einen Node
Mehrere Panel-Varianten für einen Node
Mehrere Panel-Varianten für einen Node
Mehrere Panel-Varianten für einen Node
Mehrere Panel-Varianten für einen Node
Mehrere Panel-Varianten für einen Node

Kommentar hinzufügen

Der Inhalt dieses Feldes wird nicht öffentlich zugänglich angezeigt.
Mit dem Absenden dieses Formulars, akzeptieren Sie die Datenschutzrichtlinie von Mollom.