Bin ich zu blöd für die Hooks?
am 31.01.2011 - 16:26 Uhr in
In ferner Zukunft habe ich einmal vor, einen speziellen Parser vor die Ausgabe eines Artikels zu setzen.
Ich habe jetzt erst mal ein Test-Modul erstellt und gefühlte 1000 Hooks ausprobiert. Nie ist etwas passiert. Hier sind meine ersten Gehversuche und meine anna.module sieht so aus:
echo "Hallo";
function anna_view($a, $b, $c, $d, $e, $f) {
echo "JETZT PASSIERT WAS=============================================";
}
echo "Tschüs";
"Hallo" und "Tschüs" erscheint, also ist das Modul wohl schon mal korrekt eingebunden. Wie man sieht, fange ich auch erst mal bescheiden an, was die Komplexität meiner Funktion betrifft :-)
Welchen Hook auch immer ich bisher ausprobiert habe, nie wurde diese Funktion ausgeführt. Hab ich irgendwas falsch verstanden?
Falls jemand fragt: Dies ist die anna.info, aber daran kanns ja eigentlich nicht liegen:
; $Id: views.info,v 1.7.6.60 2011/01/05 21:34:52 dereine Exp $
name = Anna
description = Viel blabla
package = AnnaPackage
core = 7.x
php = 5.2
files[] = anna.module
; Information added by drupal.org packaging script on 2011-01-06
version = "0.1alpha"
core = "7.x"
project = "AnnaProject"
datestamp = "1294276880"
Bin ratlos.
- Anmelden oder Registrieren um Kommentare zu schreiben
Du solltest Dir dazu auf
am 31.01.2011 - 17:05 Uhr
Du solltest Dir dazu auf jeden Fall die entsprechende Dokumentation auf Drupal.org ansehen. Die Hooks haben schließlich ganz spezielle Bdeutung und werden nur in ihrem Context aufgerufen. Hook_view wird z.B. nur von Node-Modulen (also Modulen, die selbst Node-Typen definieren) genutzt und von Drupal aufgerufen, wenn dieser Node-Typ dargestellt werden soll.
Fang mal mit dem hook_menu an. Da kannst Du einen URL definieren, bei dem dann eine von Dir angegebene Funktion aufgerufen wird. Das ist doch schon mal ein Einstieg. Die Dokumentation dazu findest Du hier.
Beste Grüße
Werner
.
Werner
drupal-training.de
Moderator und Drupal Trainer
* - - - - - - - - - - - - - - - - - - - - - - - - - - - *
Was hast du denn genau vor -
am 31.01.2011 - 17:08 Uhr
Was hast du denn genau vor - dies kann man deinem Quellcode so leider nicht entnehmen..
Um auf die Ausgabe eines Nodes in Drupal 6 Einfluss zu nehmen, kannst du den hook_nodeapi nutzen. Diesen würdest du dann über
<?php
function hook_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) {
switch ($op) {
case 'view':
echo "Node wird angezeigt";
break;
}
)
?>
Weitere Infos zur Funktionsweise der Hooks findest du auf den entsprechenden Seiten der drupal.org API Dokumentation.
In Drupal 7 würdest du zum Beeinflussen der Ausgabe eines Nodes den hook_node_view_alter verwenden.
SteffenR
http://www.twitter.com/_steffenr
Drupal-Initiative e.V.
Vielen Dank für eure
am 31.01.2011 - 18:06 Uhr
Vielen Dank für eure Antworten.
Die Dokus auf Drupal.org studiere ich seit Tagen. Ist nicht ganz einfach, denn einige versickern schon irgendwo zwischen Drupal 4+5, andere zwischen 5+6. Ich fange ja nun mit 7 an.
Meine Intension mit dem obenstehenden Skript ist sehr einfach. Ich will einfach nur, dass etwas passiert. Mein Ziel ist es noch gar nicht, etwas umzusetzen. Ich möchte überhaupt erst mal ein Modul zum Laufen bringen und mit ein wenig rumprobieren den Hook finden, den ich brauche. Das ist schon alles.
Heute mittag hatte ich so ziemlich alle Hooks, die vermuten ließen, mit dem Seitenaufbau zusammenzuhängen, ausprobiert. Leider erschien überhaupt nichts, was mich echt etwas frustriert hat.
Für eins der ersten Projekte, die ich nach Drupal überführen möchte, ist es nötig, ein preg_replace() vor die Ausgabe eines Artikels zu setzen. Das klang für mich erst mal relativ einfach und darum wollte ich damit erst experimentieren und mich mit dem Handling der Drupal-Module auseinanderzusetzen. Nachdem das nicht funktioniert hat, habe ich erst mal nur einen echo-Befehl verwendet, um zu sehen, ob überhaupt etwas passiert.
Ich steht halt einfach vor einem Berg von Strukturen, mit denen ich noch nie zu tun hatte. Im Umgang mit PHP bin ich eigentlich sonst sehr fit.
Zitat: und mit ein wenig
am 31.01.2011 - 18:21 Uhr
und mit ein wenig rumprobieren den Hook finden, den ich brauche.
Hui, ganz falsch, damit kannst du dir auch ganz schnell ganz viel kaputt machen, wenn du nicht weißt, was du tust. Schau dir die Drupal-API an, dort sind alle Hooks gelistet und erklärt. Dort findest du auch, was sie machen und wann sie ausgelöst werden.
Wie Steffen schon gesagt hat, du benötigst wohl den hook_node_view_alter, zumindest für einen Test. Schau dir außerdem mal diese Seite an: http://api.drupal.org/api/drupal/modules--node--node.api.php/group/node_...
Und die echos nimmst du bitte mal raus, die haben dort gar nichts verloren und bringen auch nichts.
Schau dir die API und die entsprechenden Hooks an (siehe Links) und dann wirst du auch merken, welche Hooks du benötigst.
Danke
am 01.02.2011 - 12:53 Uhr
Und die echos nimmst du bitte mal raus, die haben dort gar nichts verloren und bringen auch nichts.
So, vielen Dank. Mein Test war sehr einfach gehalten, weil alle kompexeren Tests mit so ziemlich allen in Frage kommenden Hooks ins Leere liefen. Wahrscheinlich hing das an unterschiedlicher Groß- und Kleinschreibung in .info und .module-Dateien. Das mal als Tipp, wenn jemand verzweifelt, weil nichts passieren will.
Ansonsten vielen Dank für die Hilfe. Ich müsste jetzt klarkommen.