Globale Variablen

Moin,

gibt es eine Möglichkeit Variablen so anzulegen, dass sie in allen Teilen einer Seite gelesen werden?

Spezifisch, ich möchte in _header.tpl eine Variable setzen, die details.tpl später auswertet. Parm Übergabe via include geht nicht, da der Body nicht includet wird.

:confused:

Der View müsste doch persistent sein, oder? Variable $oView->sColour in _header.tpl setzen und in details.tpl wieder auslesen?

[QUOTE=obsidian;8951]Moin,

gibt es eine Möglichkeit Variablen so anzulegen, dass sie in allen Teilen einer Seite gelesen werden?

Spezifisch, ich möchte in _header.tpl eine Variable setzen, die details.tpl später auswertet. Parm Übergabe via include geht nicht, da der Body nicht includet wird.

:confused:

Der View müsste doch persistent sein, oder? Variable $oView->sColour in _header.tpl setzen und in details.tpl wieder auslesen?[/QUOTE]
Oder Smarty bemühen…
[{assign var=“sColour” value="???"}] in _header.tpl setzen

Und dann mit [{$sColour}] verwenden.

Ist die Variable dann auch in einem anderen Skript definiert? Das ist ja das Problem.

[QUOTE=obsidian;8998]Ist die Variable dann auch in einem anderen Skript definiert? Das ist ja das Problem.[/QUOTE]
In anderen Template-Dateien…

Spezifisch, ich möchte in _header.tpl eine Variable setzen, die details.tpl später auswertet.

Das sollte also funktionieren…

Schön wärs.
In Templates die indirekt von header includet werden ist die Variable definiert, aber nicht im Body.

Wie bekomme ich den am einfachsten die Variable in den view gesetzt? assign hustet mir was.

[QUOTE=obsidian;9011]Schön wärs.
In Templates die indirekt von header includet werden ist die Variable definiert, aber nicht im Body.

Wie bekomme ich den am einfachsten die Variable in den view gesetzt? assign hustet mir was.[/QUOTE]
Dann mach es auf die harte Tour…

in _header.tpl:

[{php}]
$GLOBALS[‘sColor’]=’???’;
[{/php}]

Wo es verwendet werden soll:

[{php}]
$this->_tpl_vars[‘sColor’]=$GLOBALS[‘sColor’];
[{/php}]

Und dann mit [{$scolor}] verwenden.

Oder:

in _header.tpl:

[{php}]
define(‘SCOLOR’,’???’);
[{/php}]

Wo es verwendet werden soll:

Mit [{$smarty.const.SCOLOR}] verwenden.

Problem ist das die _header.tpl von der details.tpl geladen wird. Umgekehrt funktionierts.

details.tpl: [{assign var=“sColour” value="???"}]

_header.tpl: [{$sColour}]

Ist zwar keine Lösung des Problems, aber zumindest die wahrscheinliche Ursache.

Mit den php-Varianten gehts.

mfg

ok, danke. Der Inhalt der Variable wird allerdings von smarty generiert…ist also keine Konstante.
@tobi73de OIC

Mein Problem ist eigentlich auch nur, dass ich das Farbschema abhängig von der gerade expanded Topkategorie abhängig machen muss. Kann ich die einfach - und vor allem testbar gegen Konstanten- direkt abfragen?

Heißt das $smarty objekt im oshop anders?
$smarty->get_template_vars(‘iActRoot’);
hustet mir: Call to a member function get_template_vars() on a non-object.

Wenn ich dich richtig verstehe hatte ich sowas auch mal vor ner Weile probiert. Siehe: http://www.oxid-esales.com/forum/showthread.php?p=7242

Ich hab das dann so gelöst:

in der _header.tpl einfach die id der rootkategorie abgefragt und abhängig davon eine best. CSS-datei geladen

[{if $actCategory->oxcategories__oxrootid->value == ‘ad5a78decffdfd59f334ba9f356c19bf’}]

das hat funktioniert , Problem war nur das dann in Contentseiten und Wrenkorb das Design wieder auf Default zurückfiel. War im Grunde ne Sackgasse für uns, aber vielleicht ist es das was Du brauchst?

Probieren geht über studieren.

Spricht denn etwas dagegen, die Variable in der details.tpl vor dem include der _header.tpl mit leerem Wert zu initialisieren und dann in der _header.tpl den korrekten Wert zuzuweisen?

[QUOTE=m.weinreich;9021]Spricht denn etwas dagegen, die Variable in der details.tpl vor dem include der _header.tpl mit leerem Wert zu initialisieren und dann in der _header.tpl den korrekten Wert zuzuweisen?[/QUOTE]
Dann verändert sich der Wert nach dem includen von _header.tpl trotzdem nicht. Vermutlich ist die Variable dann lokal.

@tobi73de sehr ermutigend…

Was ist mit dem oview? das Objekt ist doch für alle Tpls auf einer Seite das Selbe, wie setze und lese ich da eine Variable aus dem tpl, vorzugsweise ohne den View-Sourcecode zu ändern?

Danke, Leute!
Folgende Kombi funktioniert:
Sender:
[{php}]
$GLOBALS[‘iActRoot’] = $this->_tpl_vars[‘iActRoot’];
[{/php}]

Empänger:
[{php}]
$this->_tpl_vars[‘iActRoot’]= $GLOBALS[‘iActRoot’];
[{/php}]

:smiley:

schön wenn was funktioniert :slight_smile: , weiss zwar nich was das macht, aber wenns geht.

was is iActRoot ?

[QUOTE=tobi73de;9029]schön wenn was funktioniert :slight_smile: , weiss zwar nich was das macht, aber wenns geht.

was is iActRoot ?

[/QUOTE]

der Name der Variable

und was beinhaltet der? einen Integer-Wert ?! :wink:

nee im ernst was für ein Wert wird da gesetzt ?

i (integer) Act (Aktuelle) Root Kategorie.

Ein Index, der angibt welche der fest auf 5 beschränkten Root-Kategorien gerade aktiv ist. Der wird dann modulo 3 genommen um festzulegen welches Farbschema verwendet wird.

Ist aber eigentlich egal - ich wollte bloss kurz den funktionierenden Code zusammenfassen, falls mal jemand das Problem auch hat und das Forum durchsucht.

Hallo,

ich habe OXID 4.5 und wenn ich eine Variable in smarty definiere ( [{assign var=foo value=“hallo”}] ) und in den [{php}] Bereich danach :
$this->getTemplateVars(‘foo’);
eingebe, um die Variable in php nutzen zu können, gibt der mir folgenden Fehler aus:
Fatal error: Call to a member function get_template_vars() on a non-object
WIESO ?

Viele Danke für eure Hilfe!

Hat sich erledigt.
Danke!

[QUOTE=Schumc;137600]Hat sich erledigt.
Danke![/QUOTE]

lass uns doch bitte alle schlau werden und poste Deine Lösung … ist ja der SInn des Forums.