Wie Block über "PHP execute Feld" ausgeben?
Eingetragen von rhodes (631)
am 17.09.2007 - 14:10 Uhr in
am 17.09.2007 - 14:10 Uhr in
Hallo zusammen,
ich habe eine statische Seite "page_1" angelegt. Input format ist Php code.
Auf dieser Seite möchte ich mittels PHP code einen Block "general-info" ausgeben. Den PHP Code möchte ich in das Feld "PHP code to execute eingeben".
Leider habe ich trotz längerer Recherche nichts passendes gefunden.
Danke und viele Grüsse
Rhodes
- Anmelden oder Registrieren um Kommentare zu schreiben
Sorry, ich versteh' Dein
am 18.09.2007 - 08:00 Uhr
Sorry, ich versteh' Dein Problem nicht. Kannst Du das noch was näher erläutern?
--
bv - drupalcenter.de
Wie Block über "PHP execute Feld" ausgeben?
am 18.09.2007 - 09:32 Uhr
Hallo,
das Problem ist Folgendes: ich habe ein Modul, das dynamisch aus Datenbankeinträgen Blöcke generiert, zum Beispiel "Mein neuer Block 1". "Mein neuer Block 1" taucht jetzt im Menü unter ADMINISTER -> BLOCKS auf. Jetzt könnte ich den Block in der linken oder rechten Spalte anzeigen lassen.
Das will ich aber nicht. Ich will den Block auf einzelnen pages per PHP script einbinden. Und die Frage ist, wie ich das mache.
Vielen Dank & Grüsse
Rhodes
Wenn Du das Modul kennst UND
am 18.09.2007 - 12:01 Uhr
Wenn Du das Modul kennst UND die id (=delta) des Blockes, den Du einbinden willst, geht das ganz einfach:
<?php
$module = 'mymodule';
$delta = '123';
$block = module_invoke($module, 'block', 'view', $delta);
echo theme('block', $block);
?>
Anderfalls kannst Du z.B. nach dem Titel suchen ... (Snippet aus reptag Modul):
<?php
function _reptag_block_by_title($subject, $module = 'block') {
$list = module_invoke($module, 'block', 'list');
foreach ($list as $key => $block) {
// Search by either admin block label or blocks display label
if ($block['info'] == $subject) {
return module_invoke($module, 'block', 'view', $key);
}
$block = module_invoke($module, 'block', 'view', $key);
if ($key == $subject) {
return $block;
}
if ($block['subject'] == $subject) {
return $block;
}
}
}
?>
Anschließend (wie oben) den Block noch durch theme('block', ...) schicken ...
Problem mit module_invoke
am 18.09.2007 - 14:18 Uhr
Hallo,
vielen Dank. Ich bin auch schon auf module_invoke() gestossen, bei mir wird aber absoult nichts angezeigt. Mein Module heisst zum beispiel best_nodes, der Block hat delta 1.
wenn ich diesen code in den Body meiner Page mit eingebe:
<?php
$module = 'best_nodes';
$delta = '1';
$block = module_invoke($module, 'block', 'view', $delta);
..
wird bei
...
print_r($block);
absolut nichts ausgegeben. Kann es sein, dass das nur innerhalb von Modulen funktioniert, nicht aber, wenn man den Code in einer Seite einbinden will.
Danke und grüsse
Rhodes
Ich habs gerade mal
am 18.09.2007 - 15:08 Uhr
Ich habs gerade mal ausprobiert. Wenn ich z.B. den "Who's online" Block einbinden will, gebe ich folgendes an:
<?php
$module = 'user';
$delta = '3';
$block = module_invoke($module, 'block', 'view', $delta);
print theme('block', (object)$block);
?>
Das funktioniert bei mir einwandfrei ... Allerdings erwartet theme_block() ein object, anstatt des von module_invoke() zurückgegebenen arrays. Dein Code mit print_r($block); sollte aber eigentlich schon was anzeigen.
Leider klappt das
am 18.09.2007 - 16:30 Uhr
Leider klappt das auch nicht. Bzw. Dein Codeschnipsel funktioniert bei mir einwandfrei. Ich kann auch andere Blöcke damit anzeigen, nur eben nicht den aus meinem Modul.
Wenn ich über Administer->Block für diesen Block definiere, dass er in der rechten Spalte angezeigt werden soll, dann passiert das auch, auf einzelne Seiten kann ich ihn aber nicht beschränken.
Kann es daran liegen, dass die Blöcke dynamisch generiert werden?
Kann ich irgendwie feststellen, ob der Bock tatsächlich gefunden wird?
Vielen Dank
Rhodes