[gelöst] Wie auf Variable aus user-profile.tpl.php zugreifen?

am 09.03.2011 - 19:05 Uhr in
Hallo,
mit PHP-Code berechne ich, wenn ein User das Profile eines anderen Users aufruft, on the fly, einen Wert. Dieser Wert kann 1 oder 0 sein.
Die Berechnung erfolgt momentan direkt in der user-profile.tpl.php - der berechnete Wert befindet sich in der Variablen $wert. Der Wert wird nicht per print ausgegeben.
Ich will nun aus einem Block (im Profile) diesen Wert abfragen - leider weiß ich aber nicht wie man an diese Variable herankommt.
Ich habe es schon mit Devel versucht aber $wert taucht nirgends auf!
Das Problem ist - ich habe 10 Blöcke - die Sichtbarkeit dieser Blöcke steuere ich über "True/False". "1" aus der Variablen $wert wäre TRUE und "0" wäre FALSE. Die Berechnung von 1 oder 0 ist allerdings etwas umfangreicher sodass ich diese Berechnung nicht in allen 10 Blöcken durchführen will - ich möchte diesen Wert daher nur einmal berechnen und dann soll jeder Block nur diesen Wert abfragen und dann TRUE oder FALSE returnen.
Könnte mir bitte jemand auf die Sprünge helfen wie ich diese Variable in einem Block aufrufen kann? Ist das auf diese Weise überhaupt möglich oder müsste man $wert in der Datenbank zwischenspeichern (das will ich vermeiden)?
Vielen Dank schonmal.
Schöne Grüße
Matthias
- Anmelden oder Registrieren um Kommentare zu schreiben
Das müßtest Du in einer
am 09.03.2011 - 21:27 Uhr
Das müßtest Du in einer preprozess_block-Funktion in der Datei template.php regeln. Dort kannst Du dann auch eine Variable setzen, die gespeichert wird. Dann können alle Blöcke diese Variable auswerten.
Beste Grüße
Werner
Hallo Werner, danke für den
am 09.03.2011 - 21:53 Uhr
Hallo Werner,
danke für den Denkanstoß.
Erfolgt dann die Berechnung des Wertes auch in der preprocess_block-Funktion in der template.php oder wird das Ergebniss dort nur "gespeichert"? Der Wert soll ja nur berechnet werden wenn ein Profile aufgerufen wird - dazu werden die $user und die $account Variable geladen und diverse Werte abgeglichen. Wenn ein Node oder eine View-Page aufgerufen wird, soll diese Berechnung nicht statt finden (logisch!).
Um Dinge wie "preprocess_block-Funktionen" etc. habe ich bisher immer einen großen Bogen gemacht aber jetzt scheint es wohl Zeit zu sein mal tiefer in die Materie einzutauchen allerdings stehe ich gerade wie der "Ochs vorm Tor".
Grübelnde Grüße
Matthias
Ok - ich glaube ich bin
am 09.03.2011 - 22:33 Uhr
Ok - ich glaube ich bin dahinter gestiegen und werde nun versuchen die Variable zu setzen.
Danke erstmal.
Schöne Grüße
Matthias
Hmmm ... ich muss bzgl. des
am 10.03.2011 - 09:40 Uhr
Hmmm ... ich muss bzgl. des Themas doch noch ein paar grundsätzliche Fragen stellen da ich Verständnis-Probleme habe
Wenn ich über die preprocess-Block-Funktion eine neue Variable definiere dann wird mir diese doch (oder sehe ich das falsch?) "nur" über die block.tpl.php ausgegeben.
Ich muss auf diese Variable aber direkt aus den Sichtbarkeitseinstellungen des jeweiligen Blocks zugreifen.
Ich lege einen neuen Nicht-View-Block an - um mir über Devel alle Variablen/Arrays anzeigen zu lassen, gebe ich im Blockinhalt ...
<?php
dsm(get_defined_vars());
?>
an.
Als Ausgabe erhalte ich aber "nur"
code
theme_path
theme_info
conf
old_theme_path
Die Block-Variable $block taucht dort aber nicht auf - wenn ich über preprocess einen neue Variable definiere, wird mir diese dort sicherlich auch nicht ausgegeben - nun frage ich mich wie ich denn dann auf diese Variable zugreifen kann um True/False zurückgeben zu können?
Oder gehe ich an die Sache falsch ran?
Grübelnde Grüße
Matthias
Modul
am 10.03.2011 - 11:50 Uhr
Hallo.
Wenn Du Daten Template-übergreifend verwenden willst, solltest Du diese Daten entweder über eine dafür erstellte Funktion in der template.php oder über ein eigenes kleines Modul bereitstellen.
Ansonsten kannst Du auf die Daten nicht von überall zugreifen.
Stefan
Hallo Stefan, könntest Du mir
am 10.03.2011 - 12:00 Uhr
Hallo Stefan,
könntest Du mir bitte eine Tip geben mit welcher Funktion/Code man eine Variable Template-übergreifend verfügbar machen kann? Das weiß ich leider nicht.
Ich habe vorhin schon versucht die neue Variable in das globale User-Object zu "injizieren" - damit man darauf zugreifen kann - dies hat aber leider nicht geklappt.
Grübelnde Grüße
Matthias
Funktion
am 10.03.2011 - 12:51 Uhr
Wie schon gesagt: lege in der template.php eine Funktion an (oder schreibe ein Modul, in dem die Funktion definiert ist) und verwende dann diese Funktion in den Templates. So sammelst (oder berechnest) Du an einer Stelle die Daten und kannst sie dann "global" über die Funktion verwenden.
Hallo Stefan, da hast Du
am 10.03.2011 - 13:13 Uhr
Hallo Stefan,
da hast Du natürlich recht. Ich dachte eigentlich, dass es schon eine drupalinterne Funktion gibt die man dazu verwenden muss ala ....
mytheme_drupal_set_variable ....
oder sowas in der Art.Ich habe eben schon in der API rumgesucht.
Aber ok - ich werde dann mal die Function schreiben.
Wegduckende Grüße
Matthias
;-)
Hallo Stefan, ich habe gerade
am 10.03.2011 - 13:41 Uhr
Hallo Stefan,
ich habe gerade meine erste Function geschrieben und kann den Wert nun überall verfügbar machen.
Das klappt super.
Nun ist mir auch zu 100 Prozent klar was "global" bedeutet - ich habe es zwar schon (da es ja überall so aufgeführt wird) häufig verwendet aber die Funktionsweise (warum, weshaIb) war mir (als immer noch PHP-Noob) nie so richtig ersichtlich.
Mir ist hier gerade eine ganze Lichterkette aufgegangen.
Herzlichen Dank für den Denkanstoß. ;-)
Schöne Grüße
Matthias