Hooks / Hook _link_alter - wie rufe ich das überhaupt auf?
![](http://www.drupalcenter.de/files/noavatar_mini.gif)
am 03.04.2011 - 14:25 Uhr in
Hallo,
ich möchte in meinem Blog die Zeile "Weblog von...." ausblenden. Das war schon Thema hier:
http://www.drupalcenter.de/node/17185
Am Ende der Diskussion findet sich ein Lösungsansatz via Hook _link_alter.
Schön :)
Doch: Wie rufe ich so einen Hook überhaupt auf? Google wirft mir Seiten um die Ohren, in denen erläutert wird dass Drupal die Hooks selber aufruft. Schön. Doch irgendwo muss ich den Code der im obigen Link erwähnt wird ja hinschreiben, damit er überhaupt erst aufgerufen werden kann....
Vielleicht kann das mal einer für Dummies kurz erläutern, danke...
Gruß,
Michael.
- Anmelden oder Registrieren um Kommentare zu schreiben
Um Hooks zu verwenden musst
am 03.04.2011 - 14:39 Uhr
Um Hooks zu verwenden musst du ein eigenes Modul schreiben und dort die Hooks implementieren. Dabei wird das "hook" im Funktions-Name durch den Namen deines Moduls ersetzt.
Beispiel:
Du willst ein Modul schreiben, welches
hook_link_alter
implementiert. Dieses Modul nennst dumy_link_module
. Also musst du in der Dateimy_link_module.module
die Funktionmy_link_module_link_alter()
implementieren.Drupal ruft dann an entsprechender Stelle selbstständig alle Implementationen eines bestimmten Hooks auf, wenn dieser Hook gerade ausgeführt werden soll.
Ahhhh!
am 03.04.2011 - 16:18 Uhr
Ahh, ok.
Habe (m)ein Module "mymodule_link_alter" angelegt und in der module-Datei die Funktion mymodule_link_alter (aus dem Code, der oben verlinkt ist) eingetragen, hochgeladen und aktiviert - und dann ging gar nichts mehr. Das Module konnte ich auch nicht mehr deaktivieren. Habe dann die Datei gegen eine ohne Inhalt getauscht, anschließend kam ich zumindest wieder in den Adminbereich zum deaktivieren des Moduls. Alles gar nicht so einfach...
Fazit: Fehler im oben verlinkten Code?
mymodule_link_alter.module
/**
* Implementation of hook_link_alter().
*/
function mymodule_link_alter(&$links, $node) {
if ($node->type == 'blog') {
unset($links['blog_usernames_blog']);
}
}
Weist du, wie man Module
am 03.04.2011 - 16:47 Uhr
Weist du, wie man Module schreibt?
Poste doch mal bitte den Code deiner Modul-Datei.
Der Frage entnehme ich, dass
am 03.04.2011 - 17:32 Uhr
Der Frage entnehme ich, dass es so wie unter gezeigt dann wohl nicht reicht...
Ich dachte ich muss da einfach nur den Code aus dem Forum reinguttenbergeln und das wars dann, schade.
<?php
/*
Drupal-Modul
Ausblenden von Autorangaben in Blog
2011
*/
function mymodule_link_alter_perm() {
return array('access mymodule_link_alter content');
}
function mymodule_link_alter(&$links, $node) {
if ($node->type == 'blog') {
unset($links['blog_usernames_blog']);
}
}
?>
Modul
am 03.04.2011 - 18:26 Uhr
Hallo.
Hast Du das von Dir geschriebene Modul auch auf der Seite aktiviert/installiert? Du benötigst für ein vollständiges Modul (unter D6) mindestens eine .info und eine .module.
function mymodule_link_alter_perm()
Diese Funktion benötigst Du nicht. Es sein denn, Du möchtest eigene Berechtigungen definieren und diese dann später mittels [api:user_access:6] irgendwo abfragen.
Stefan
PS: Erstellen von Modulen - ein Handbuch: Drupal 6.x
Heißt denn dein Module auch
am 03.04.2011 - 18:46 Uhr
Heißt denn dein Module auch "mymodule"? Weil wenn das Modul nicht "mymodule" heißt, kann das ganze natürlich nicht klappen, siehe mein Post weiter oben.
Ich habe ein Verzeichnis
am 03.04.2011 - 19:12 Uhr
Ich habe ein Verzeichnis mymodule_link_alter und darin je eine Datei mymodule_link_alter.info und mymodule_link_alter.module
Im Module-Bereich im Adminmenü wurde das Modul mymodule_link_alter angezeigt, ich habe es aktiviert -> und anschließend ging wie gesagt gar nichts mehr. Homepage wie auch Adminbereich waren nur noch weiße Seiten im Browser, entsprechend bin ich auch nicht mehr in den Adminbereich zum deaktivieren des Moduls gekommen. Habe dann die *.module Datei gegen eine ohne Inhalt getauscht, anschließend konnte ich das Modul wieder deaktivieren - und jetzt bin ich hier...
Perm stand in allen Vorlagen die ich fand, habe es deswegen einfach mal übernommen.
So kann das ganze auch
am 03.04.2011 - 21:14 Uhr
So kann das ganze auch unmöglich funktionieren -,-'
Lies dir bitte nochmal langsam und aufmerksam durch, was du machen sollst.
Du sollst ein Modul erstellen und diesem einen Namen geben, z. B. "mein_modul". Darin willst du nun hook_link_alter implementieren. Also musst du das "hook" darin durch deinen Modul-Namen, also "mein_modul" ersetzen. Daraus folgt, dass die Funktion dann
mein_modul_link_alter
heißen würde.Und hast du überhaupt die korrekten Daten in die Info-Datei geschrieben?
Tu' dir selbst einen Gefallen und lies dir mal das Tutorial durch, dass Stefan verlinkt hat, damit du überhaupt erstmal das erstellen von Modulen verstehst, bevor du hier versuchst, irgendwelche Code-Schnippsel zusammenzuführen und eigentlich keine Ahnung hast, was du da machst.
Und hör am besten auf, einfach wild Codes zu kopieren, wenn du sie nicht verstehst, damit kannst du dir einiges zerstören.