Theme Block erzeugt falsche ID
Eingetragen von jan.s (44)
am 07.03.2011 - 10:54 Uhr in
am 07.03.2011 - 10:54 Uhr in
Hallo zusammen,
ich erstelle in einem eigenen Modul mit hook_blockein paar Blöcke. Wenn ich diese nun direkt in ein Template einfügen möchte, mache ich das so:
<?php
$block = (object)module_invoke('sidebar', 'block', 'view', 0);
print theme('block', $block);
?>
Jetzt ist es aber so, dass jeder Block die ID "block--" bekommt. Das liegt daran, dass $block->module und $block->delta in der Block-Variable im Template nicht vorhanden sind. Es gibt nur $block->content und $block->subject.
Weiß jemand, wieso nicht alle benötigten Eigenschaften erzeugt werden? Muss ich die manuell angeben in hook_block? Ich dachte eigentlich das macht ctools_block_content_type_render schon automatisch, denn die benötigten Informationen sind ja eigentlich schon vorhanden.
Viele Grüße
Jan
- Anmelden oder Registrieren um Kommentare zu schreiben
Modul und Delta erneut setzen
am 17.03.2011 - 12:33 Uhr
Für das Block-Objekt müssen die Werte für Modul und Delta noch einmal zusätzlich gesetzt werden:
<?php
$block = (object) module_invoke($module, 'block', 'view', $delta);
$block->module = $module;
$block->delta = $delta;
print theme('block', $block);
?>
http://api.drupal.org/api/drupal/developer--theme.php/function/theme_blo...
Wieso so kompliziert?
am 17.03.2011 - 12:47 Uhr
Ich verstehe die Gedanken der Entwickler dahinter nicht. Wieso gibt hook_block diese Attribute nicht gleich mit aus? Direkt im Modul ist der Modulname und das Delta schließlich bekannt. Hat das so irgendwelche Gründe?
kp, danke für den Link und den Hinweis. Wäre es aber nicht sinnvoller, diese Werte direkt in hook_block an das $block Objekt zu übergeben? Dann müsste man nicht alle Code-Stellen anpassen, an denen der Block eingebunden wird. Oder hätte das irgendwelche negativen Nebeneffekte?
Gute Idee
am 17.03.2011 - 14:17 Uhr
Die Werte in hook_block zu setzen funktioniert gut und ist wohl auch sinnvoller.
Ich weiß auch nicht ganz warum dies nicht standardmäßig getan wird. In Dokumentation von hook_block werden ja die Werte des zurückgegebenen Arrays beschrieben, hier sollte 'module' und 'delta' auch auftauchen. Jedes Modul müsste dies allerdings auch wirklich umsetzen.
Beim "normalen" einbinden einen Blocks funktioniert es allerdings, also werden da die Werte wohl hinzugefügt, ohne dass hook_block das machen muss. Leider finde ich die genaue Stelle an der dies passiert nicht. Wäre möglich das einem das ganze dort abgenommen wird und man module_invoke nicht selbst aufrufen muss.