Drupal 7 Hooks & Theming
am 15.05.2011 - 20:39 Uhr in
Bei meiner Einarbeitung in Drupal 7 bin ich nun bei den Hooks angelangt... Teilweise funktioniert das wie gewünscht (z.B. hook_form, welcher alle Formulare anspricht), aber dann versuche ich nur die Editierseite von Nodes (z.B. Blogeintrag oder einer Seite) anzusprechen. Dabei soll nicht die oder alle Seiten angesprochen werden, sondern expliziert nur die Editieren-Seite des Nodetyps... Ich habe einige Varianten probiert, jedoch kam ich hier zu keinem Erfolg (innerhalb der template.php, "print_r($content)" als Testausgabe...).
Hat hier jemand ein Tipp?
Als zweiten Punkt habe ich noch ein Beispiel aus dem Theming:
hide($content['comments']['comment_form']['comment_body']['und']['0']['format']);
"hide" habe ich bereits zum späteren Ausgeben innerhalb der node.tpl.php verwendet, was funktioniert hat. Nun habe ich obiges Beispiel gefunden und Frage mich, wie man auf die Verkettung im Array kommt? Besonders der letztere Teil "['comment_body']['und']['0']['format']" sieht etwas "wirr" aus. Das es sich dabei um class/ id-Attribute handeln müsste, denke ich mir, aber wie komme ich anhand des HTML-Aufbaus zum passenden Array? Welche Logik ist dahinter, damit ich das nicht wir suche und finde, sondern vielleicht auch verstehe ;)
- Anmelden oder Registrieren um Kommentare zu schreiben
Wenn Du in die Internas
am 15.05.2011 - 21:57 Uhr
Wenn Du in die Internas einsteigen willst, kann ich Dir das Buch "Pro Drupal 7 Development" empfehlen. Amazon hat das gerade günstig (nur noch 25,95 €).
Beste Grüße
Werner
Hooks
am 16.05.2011 - 06:59 Uhr
Hallo.
Ergänzend zu dem Buchtipp von Werner ...
...hook_form...
Ich gehe mal davon aus, dass Du [api:hook_form_alter:7] meinst.
Dabei soll nicht die oder alle Seiten angesprochen werden, sondern expliziert nur die Editieren-Seite des Nodetyps... Ich habe einige Varianten probiert, jedoch kam ich hier zu keinem Erfolg (innerhalb der template.php, "print_r($content)" als Testausgabe...).
Hat hier jemand ein Tipp?
In [api:hook_form_alter:7] bekommst Du als Parameter auch die ID des gerade behandelten Formulars übergeben. Mit dieser Information kannst Du dann auf ein einzelnes Formular reagieren.
Alternativ stehen dafür auch [api:hook_form_FORM_ID_alter:7] und [api:hook_form_BASE_FORM_ID_alter:7] zur Verfügung.
... und Frage mich, wie man auf die Verkettung im Array kommt?
Installiere Dir mal das Modul [do:devel Devel]. Mit der dadurch bereitgestellten Funktion
dsm()
kannst Du Dir den Inhalt und die Struktur von Variablen anschauen.In diesem Fall kommt die Struktur so zustande:
* 'comments' -> alle Einstellungen und Daten bzgl. der im Inhalt enthaltenen Kommentare
* 'comment_form' -> Einstellungen und Daten des Formulars zum Erstellen eines neuen Kommentars
* 'comment_body' -> Einstellungen und Daten des Feldes für den Kommentartext
* 'und' -> die Sprache, für die der Kommentar erfasst werden soll (in diesem Fall undefined)
* '0' -> Index des Feldes (es is möglich, mehrere Instanzen eines Feldes im gleichen Formular zu haben; hier ist es die 1. Instanz)
* 'format' -> Einstellungen zur Formatierung / zum verwendeten Filter für das Feld
aber wie komme ich anhand des HTML-Aufbaus zum passenden Array?
Diese Richtung ist eigentlich nicht wirklich sinnvoll. Natürlich sind die HTML-Ausgabe und die Struktur irgendwie miteinander verknüpft, und bei einer Standardinstallation lässt sich aus Erfahrung auf die Struktur schliessen, jedoch kann durch ein einfaches Theme-Override die komplette Ausgabe geändert werden, so dass man überhaupt nicht mehr auf die Datenstruktur schliessen kann.
Besser ist der Weg über [do:devel Devel]. So siehst Du die reine Datenstruktur.
hth,
Stefan
Hallo Werner, nach Büchern
am 16.05.2011 - 07:57 Uhr
Hallo Werner,
nach Büchern habe ich schon geschaut, aber hier suche ich eher nach deutschen Werken. Da wird es aber wohl noch nicht viel in der Richtung geben...
Englische Doku steht ja im Internet bereits vieles bereit, aber manchmal ist es gut ein Thema auf deutsch zu lesen, um es besser oder schneller zu verstehen.
Ich muss ja nicht allzu tief einsteigen, sondern müsste "nur" mal grob verstehen, wie ich auf die entsprechenden Arrays komme und wie ich diese dann für mich nutze ;)
Hi Stefan, danke für deine
am 16.05.2011 - 08:22 Uhr
Hi Stefan,
danke für deine Antwort! Hatte ich nicht gesehen als ich gepostet habe... Das sind schon sehr hilfreiche Informationen dabei und ich werde mir das mal näher anschauen.
Hook_form_alter hatte ich probiert, scheint aber nicht gezogen zu haben auf meiner template.php heraus. Müsste hook_form gewesen sein, welcher zumindest bei jedem Formular (Suchfeld-Block und Editierseite) gezogen hat.
Die Ausschlüsselung des Kommentar-Beispiels war auch schonmal gut, die Frage ist, wie ich das z.B. für Nodes nachvollziehen kann. Gibt es hier eine Übersichtsseite, welche nach diesem Schema die Datenstruktur aufzeigt?
Devel
am 16.05.2011 - 08:31 Uhr
die Frage ist, wie ich das z.B. für Nodes nachvollziehen kann. Gibt es hier eine Übersichtsseite, welche nach diesem Schema die Datenstruktur aufzeigt?
Wie ich bereits schrieb: [do:devel Devel] und die darin definierte Funktion
dsm()
. Damit bekommst Du die komplette Struktur einer Variablen.Wenn Du alle verfügbaren Variablen eines Templates haben möchtest, hilft
<?php dsm(get_defined_vars()) ?>
.Devel Modul schau ich mir
am 16.05.2011 - 08:45 Uhr
Devel Modul schau ich mir natürlich an. Dachte es gibt wie deine beispielhafte Erklärung/ Auflistung vielleicht auch eine mir bisher verborgen gebliebene Hilfeseite. Ansonsten sollte mir Devel natürlich auch schon weiterhelfen ;)