Frage zum Preprocess

am 17.01.2010 - 21:45 Uhr in
Hi zusammen,
ich hänge da gerade an einer Stelle fest und komme nicht weiter:
<?php
function mymodule_theme() {
$theme['mymodule_output'] = array(
'arguments' => array('account' => NULL, 'active' => NULL),
'template' => 'mymodule_output',
);
return $theme;
}
?>
<?php
function mymodule_preprocess_output(&$variables) {
$user = $variables['account'];
}
?>
<?php
// Aufruf
theme('mymodule_output', $account);
?>
Soweit funktioniert alles. Beim Aufruf der theme()-Funktion übergebe ich ein Userobjekt ($account), welches dann in der preprocess-Funktion in $variables vorhanden ist. Wie man im hook_theme sieht, will ich aber ein weiteres Argument an die preprocess-Funktion übergeben.
<?php
// Aufruf
theme('mymodule_output', $account, $active);
?>
Das funktioniert allerdings nicht, bzw. ich verstehe nicht ganz, wie ich an die Variable $active in der preprocess-Funktion rankomme. Hab ich da einen Denkfehler oder kann man nur ein einziges Argument übergeben?
- Anmelden oder Registrieren um Kommentare zu schreiben
hook_theme
am 17.01.2010 - 22:52 Uhr
Hallo.
Also auf den ersten und zweiten Blick sieht der von Dir gepostete Code eigentlich korrekt aus.
Nach Deiner Implementierung von
hook_theme()
müsste das Array$variables
in der preprocess Funktion auch den Schlüssel "active" enthalten und im Template somit auch die Variable$active
verfügbar sein.Schau mal in
book.module
. Dort ist ein Beispiel mit 3 Argumenten.Ich hab gerade nochmal in die Implementierung von theme() geschaut. Dort werden (so ca. in der Mitte) die Variablen aus der Definition in
hook_theme()
durchlaufen und geschaut, ob ein entsprechendes Argument der theme-Funktion übergeben wurde.Wenn ja, wird es dem Array
$variables
hinzugefügt und dann an die preprocess-Funktion weitergereicht.Vielleicht kannst Du an der Stelle mal eine Debug-Ausgabe machen um zu sehen, was da so ankommt und ob Deine Variablen korrekt behandelt werden.
Die entsprechende Stelle im Code ist diese hier:
<?php
foreach ($info['arguments'] as $name => $default) {
$variables[$name] = isset($args[$count]) ? $args[$count] : $default;
$count++;
}
?>
Hattest Du eventuell erst nur ein Argument in
hook_theme()
angegeben und das dann später erweitert?Leere doch nochmal den Theme-Cache, vielleicht hilft das ja.
hth,
Stefan
--
Sei nett zu Deinem Themer!
iterator schrieb Hi
am 19.01.2010 - 19:44 Uhr
Hi zusammen,
ich hänge da gerade an einer Stelle fest und komme nicht weiter:
<?php
function mymodule_theme() {
$theme['mymodule_output'] = array(
'arguments' => array('account' => NULL, 'active' => NULL),
'template' => 'mymodule_output',
);
return $theme;
}
?>
<?php
function mymodule_preprocess_output(&$variables) {
$user = $variables['account'];
}
?>
Ich vermute, deine Preprocess-Funktion ist einfach nur falsch benannt. Da deine Theme-Funktion
mymodule_output
heisst, sollte die Preprocess-Funktionmymodule_preprocess_mymodule_output()
heissen. Mag aber auch sein, dass ich da völlig falsch liege ;)Nebenbei bemerkt: Das
am 19.01.2010 - 19:46 Uhr
Nebenbei bemerkt: Das Devel-Modul und das darin enthaltene Theme Developer Module zeigt dir sehr schön an, welche Preprocess-Funktionen für ein Seitenelement verfügbar sind.
Sehe Dir mal das Forummodul
am 19.01.2010 - 21:14 Uhr
Sehe Dir mal das Forummodul an. Da kan man exemplarisch die Sache mit den Themes studieren.
------------------------
Quiptime Group