Funktionen in Modul oder in template.php
am 20.09.2010 - 22:48 Uhr in
Hallo zusammen,
ich habe heute folgendes Verhalten festgestellt.
In meinem aktuellen Projekt habe ich nun eine recht umfangreich template.php mit zahlreichen Funktionen. Die im Ursprung entstanden sind, da ich viel in Templates arbeite.
Nun habe ich ein Modul geschrieben in dem ich einen hook_block() implementiere und habe mich der ein oder anderen Funktion aus der template.php bedient, da diese ja schon dort definiert sind und dies funktioniert nun auch anstandslos.
Nun wie es so üblich ist, zeigt der Block nur einen Teil an und we gibt einen "more" link.
Nun habe ich docht einen page callback im hook_menu() gemacht und "kawooom" nur noch der berühmte white-screen. Obwohl ich nichts anderes mache als das Limit der Ausgabe gegenüber der Ausgabe im Block zu verändern.
Wenn ich nur einen Debug-String zurückgebe, funktioniert alles einwandfrei.
Einen Blick in die apache error_log meldet mir dann dass ich undefinierte Funktionen aufrufe " Call to undefined function "!!!
Wie kann das sein, dass es im hook_block() die Funktionen aus der template.php zur Verfügung stehen und ansonsten nicht?
Darauf hin habe ich alle in der template.php definierten und von mir in dem Modul benötigen Funktionen umkopiert und es funktioniert, auch sieht es auf den ersten Blick so aus als ob die Funktionen weiterhin erreichbar sind an den Stellen, wofür sie ursprünglich geschrieben wurden.
Damit besteht eigentlich kein aktutes Problem mehr, aber ich stelle mir die Frage was ist nun der richtige Weg???
Gibt es einen grund dafür, warum es beim hook_block funktioniert, aber bei einem page callback nicht? Und wo solle ich meine Funktionen "halten". Denn so wie es jetzt ist, dass ich die Funktionen in ein Modul gepackt habe, obwohl sie mehr Arbeit an einer anderen Stelle erledigen, finde ich nicht gerade sehr sinnvoll.
Oder übersehe ich irgendwas????
- Anmelden oder Registrieren um Kommentare zu schreiben
Wie macht ihr das?
am 21.09.2010 - 08:34 Uhr
Wie macht ihr das?
gruss
drupalino
Poste doch einfach mal Deinen
am 21.09.2010 - 09:38 Uhr
Poste doch einfach mal Deinen Quellcode hier, dann schauen wir mal weiter.
sense-design | online solutions | Do not hack core!
Drupalcenter Verhaltensregeln | Threads bitte auf [gelöst] stellen.
Naja, das wäre jetzt ein
am 21.09.2010 - 10:14 Uhr
Naja, das wäre jetzt ein Riesending.
Aber auch ohne Quellcode: Wenn es für den Block funktioniert (also dort sind die Funktionen ja auch verfügbar, wenn ich sie in der template.php lasse) und warum dann nicht für den Page-Content und die Funktionen sind ja auch io, sonst würden sie nicht funktionieren, wenn ich sie ind Modul kopiere.
gruss
drupalino
Wenn Du Deine Funktionen nur
am 21.09.2010 - 10:18 Uhr
Wenn Du Deine Funktionen nur im Theming benötigst, dann ist die template.php schon der richtige Ort. Wenn Du diese Funktionen in Modulen auch benutzen möchtest, muß die template.php-Datei zu dem Zeitpunkt noch nicht geladen sein. Jetzt gibt es zwei Möglichkeiten: entweder die Funktionen in ein Modul packen oder mit include_once die template.php laden. Dazu kannst Du ja vorher mit function_exists prüfen, ob die Funktion schon bekannt ist und wenn nicht, die Datei nachladen.
Beste Grüße
Werner
.
Werner
drupal-training.de
Moderator und Drupal Trainer
* - - - - - - - - - - - - - - - - - - - - - - - - - - - *
Das könnte den Unterschied
am 21.09.2010 - 11:19 Uhr
Das könnte den Unterschied erklären, warum sie bei dem hook_block schon bekannt sind und sonst nicht.
Macht es Sinn solche Funktionen generell woanders hin auszulagern, dass sie immer und überall verfügbar sind? Wenn ja, wie gehe ich da am Besten vor?
gruss
drupalino
Mit immer und überall
am 21.09.2010 - 11:49 Uhr
Mit immer und überall verfügbar ist das so eine Sache. Drupal läd selectiv nach und wenn Dein Modul nicht irgendwo angezogen wurde ist der entsprechende Code nicht da. Da hilft wirklich nur die Abfrage mit function_exists und, falls nötig, selbst laden.
Beste Grüße
Werner
.
Werner
drupal-training.de
Moderator und Drupal Trainer
* - - - - - - - - - - - - - - - - - - - - - - - - - - - *