[Gelöst] Variablen, mytheme_preprocess und der Wahnsinn im Allgemeinen
am 28.08.2009 - 15:46 Uhr in
Hoi,
ich bin mit meinem ersten Theme jetzt schon recht weit und dachte mir auch, dass mir jetzt nichts Schlimmes mehr passieren koennte. Na ja, man soll halt nicht so viel denken. Es kam natuerlich wieder alles ganz anders als gedacht, und jetzt stehe ich da und verstehe gar nichts mehr...
Ich habe unter anderem einen View als Block, der auf der Startseite gezeigt wird. Funktioniert soweit auch bestens. Dieser Block wird auch entsprechend anders formatiert dargestellt, was ich ueber das Anlegen einer entsprechenden node-views-mtb.tpl.php erreicht habe. Jetzt kommt aber der Punkt, der einfach fehlschlaegt, und wo ich gerne eure Hilfe haette.
In diesem node-view-mtb.tpl.php moechte ich auf eine Variable zugreifen, die ausserhalb generiert und verwaltet werden soll. Nun dachte ich, dass ich die Variable folgendermassen anlegen kann:
function meintheme_preprocess(&$variables, $hook){
$variables['neueVariable'] = 10;
}
Das funktioniert auch insofern, als dass ein print $neueVariable in node-view-mtb.tpl.php eine 10 ausgibt. Beim nun folgenden Step versage ich gaenzlich. Ich moechte die Variable manipulieren und in folgenden Nodes dann entprechend manipuliert ausgeben. Daher dachte ich, dass mein Freund meintheme_preprocess_node() waere, ich also per folgendem Code ans Ziel kaeme:
function meintheme_preprocess_node(&$variables){
$variables['neueVariable'] = $variables['neueVariable'] * 2;
}
Ich haette ja jetzt gedacht, dass der erste Node den Wert 20 hat, der zweite den Wert 40, der dritte den Wert 80, tbc. Stattdessen haben alle Nodes den Wert 20. Im Gegensatz zu meiner Theorie wird entweder meintheme_preprocess_node () nicht ein Mal pro angezeigtem Node aufgerufen, oder aber die Variable wird nicht aktualisiert. Wo ist mein Denkfehler, oder bin ich mit den preprocess Funktionen eh komplett auf dem Irrweg?
Ich wuerde mich sehr ueber Hilfe freuen!
- Anmelden oder Registrieren um Kommentare zu schreiben
meintheme_preproces wird für jeden Node neu ausgeführt.
am 01.09.2009 - 11:50 Uhr
meintheme_preprocess
wir jedes mal aufgerufen wenn die Funktiontheme
aufgerufen wird. Also für den ersten Node des Views, für den zweiten und für alle weiteren. Jedes mal wird$variables['neueVariable']
auf den Wert 10 gesetzt. Inmeintheme_preprocess_node
wird die 10 dann mit 2 multipliziert, was dabei rauskommt siehst du ja.Werfe
meintheme_preprocess
weg und verwende<?php
function meintheme_preprocess_node(&$variables){
static $neueVariable = 10;
$neueVariable *= 2;
$variables['neueVariable'] = $neueVariable;
}
?>
--
[geloest] Variablenuebergabe innerhalb des Themes
am 01.09.2009 - 12:54 Uhr
Vielen vielen Dank! Mein Fehler war einfach nur das static ausgelassen zu haben. Der Rest war mir dann noch am gleichen WE klar, nur wegen des fehlenden static habe ich mir natuerlich die Variable jedes Mal neu initialisiert...
Ich habe es jetzt ueber die meintheme_preprocess(&$variables, $hook) geloest, da ich als hook nicht nur node, sondern auch page brauchte. Jetzt laeuft alles so wie erwartet! In der template.php werden die entsprechenden neuen Variablen bei mir verwaltet, in der node.tpl.php ergaenzt, geaendert und in der page.tpl.php angezeigt. Perfekt!