PDA

Shop Support News Archive - Shopbetreiber News -> Forum : ECB: Smarty-Variable verfügbar in Snippets


Kopernikus
27.03.2009, 11:21
Hallo zusammen

Frage: Kann man eine Smarty-Variable, die normalerweise in der Index.html zur verfügung steht auch in eine Snippets Datei einbauen. Fall ja wie?

In meinem Fall wird die horizontale Kategorie in der /snippets/TabNavigation.html konstruiert. Da ich die Smarty-Variable {$box_SEARCH_TOP} an einem bestimmten Ort in der horizontalen Navi-Leiste eingebaut haben möchte, müsste ich diese Variable in der TabNavigation.html zur verfügung haben.

Kann mir da jemand einen Tipp geben?

Besten Dank im Voraus

Gruss Kopernikus

avenger
27.03.2009, 13:33
''>ZITAT(Kopernikus @ Mar 27 2009, 10:21) 158410Frage: Kann man eine Smarty-Variable, die normalerweise in der Index.html zur verfügung steht auch in eine Snippets Datei einbauen. Fall ja wie?[/b]
Nicht so ohne weiteres....

Das Rendern der einzelnen Template [CSS Shop/Onlineshop Template s oder Tabellen Shop/Onlineshop Template s ] -Teile wird in verschiedenen Smarty-Instanzen erledigt (z.B. $box_smarty, $moDule_smarty, usw.).

Das Ergebnis der einzelnen Box- und MoDul -Rendervorgänge wird dann als Variable an die Smarty-Instanz $smarty übergeben, mit der dann die "index.html" gerendert wird.

D.h., beim Rendern der Snippets ist in der dazu verwendeten Smarty-Instanz natürlich erst mal die gewünschte "$smarty"-Variable nicht verfügbar.

Wenn diese Variable zum ZeitPunkt des Renderns des "Snippets" schon vorhanden ist, kann man das Problem wie folgt lösen:

In das Snippet-Template [CSS Shop/Onlineshop Template s oder Tabellen Shop/Onlineshop Template s ] folgenden Code einfügen:


{php}
global $smarty;

$s='var_name';
$this->_tpl_vars[$s]=$smarty->_tpl_vars[$s];
{/php}
Damit wird die Variable "var_name" aus dem ConText der "$smarty"-Instanz in die aktuelle Smarty-Instanz kopiert, und kann dann dort verwendet werden.

Man könnte das natürlich auch im Snippet PHP-Programm analog lösen.

Diese Template [CSS Shop/Onlineshop Template s oder Tabellen Shop/Onlineshop Template s ] -Lösung hat aber den Vorteil, dass sie "update-sicher" ist....

Kopernikus
27.03.2009, 13:47
Hallo avenger

Herzlichen Dank für Deine Antwort. Leider wird mir die Suchbox noch immer nicht angezeigt.

Ich publiziere mal den Code der /snippets/TabNavigation.html

<ul id="topnavigation">

************
********************{section name=data loop=$box_content.main}
********************
******** ****************<li class="tab">
******************** {$box_content.main[data].NAME} ({$box_content.main[data].URL [Adresse die im Browser eingegeben wird]})<p id="{$box_content.main[data].CSS}"</p>
********************{/section}
********
**** <li id="sub-topnavigation">**
********
************{if $box_content.sub[$active_tab]}|{/if}
************{section name=data2 loop=$box_content.sub[$active_tab]}
****************{$box_content.sub[$active_tab][data2].NAME} ({$box_content.sub[$active_tab][data2].URL [Adresse die im Browser eingegeben wird]})
************ {$box_SEARCH_TOP}{/section}
****
**


[/list]


Sehe ich es nun richtig, dass wenn ich die Suchbox welche ich ja in der index.html mit {$box_SEARCH_TOP} aufrufe, einfach mit folgendem Code:


**{php}
global $smarty;

$s='box_SEARCH_TOP';
$this->_tpl_vars[$s]=$smarty->_tpl_vars[$s];

an beliebiger Stelle einbauen könnte?

avenger
27.03.2009, 13:56
''>ZITAT(Kopernikus @ Mar 27 2009, 12:47) 158464 Hallo avenger

Herzlichen Dank für Deine Antwort. Leider wird mir die Suchbox noch immer nicht angezeigt.

Ich publiziere mal den Code der /snippets/TabNavigation.html

<ul id="topnavigation">

************
********************{section name=data loop=$box_content.main}
********************
************************ <li class="tab">
******************** {$box_content.main[data].NAME} ({$box_content.main[data].URL [Adresse die im Browser eingegeben wird]})<p id="{$box_content.main[data].CSS}"</p>
********************{/section}
********
**** <li id="sub-topnavigation">**
********
************{if $box_content.sub[$active_tab]}|{/if}
************{section name=data2 loop=$box_content.sub[$active_tab]}
****************{$box_content.sub[$active_tab][data2].NAME} ({$box_content.sub[$active_tab][data2].URL [Adresse die im Browser eingegeben wird]})
************ {$box_SEARCH_TOP}{/section}
****
**


[/list]


Sehe ich es nun richtig, dass wenn ich die Suchbox welche ich ja in der index.html mit {$box_SEARCH_TOP} aufrufe, einfach mit folgendem Code:


**{php}
global $smarty;

$s='box_SEARCH_TOP';
$this->_tpl_vars[$s]=$smarty->_tpl_vars[$s];

an beliebiger Stelle einbauen könnte? [/b]
Ja, in diesem Template [CSS Shop/Onlineshop Template s oder Tabellen Shop/Onlineshop Template s ] .

Das ganze funktioniert natürlich nur, wenn die "box_SEARCH_TOP" schon in "$smarty" vorhanden ist.

Kopernikus
27.03.2009, 14:00
''>ZITAT(avenger @ Mar 27 2009, 12:56) 158468
Ja, in diesem Template [CSS Shop/Onlineshop Template s oder Tabellen Shop/Onlineshop Template s ] .

Das ganze funktioniert natürlich nur, wenn die "box_SEARCH_TOP" schon in "$smarty" vorhanden ist.
[/b]

Ok, dann ist "box_SEARCH_TOP" offensichtlich noch nicht dort drin. Du hast mir nicht einen Tipp wo und wie ich dies ergänzen kann?

Kopernikus
27.03.2009, 22:38
@avenger

Also wenn ich mir die \source\boxes\search_top.php ansehe, dann steht dort die box_SEARCH_TOP in der $smarty drin. Müsste also gehen, oder?


****if(!$cache) {
********$box_search = $box_smarty->fetch(CURRENT_TEMPLATE.'/boxes/box_search_top.html');
****} else {
********$box_search = $box_smarty->fetch(CURRENT_TEMPLATE.'/boxes/box_search_top.html', $cache_id);
****}
****$smarty->assign('box_SEARCH_TOP',$box_search);

Trotzdem gehts nicht. Was mache ich also falsch?

Ist der code so wirklich richtig? Oder muss das $ Zeichen noch vorne hin?

******{php}
global $smarty;

$s='box_SEARCH_TOP';
$this->_tpl_vars[$s]=$smarty->_tpl_vars[$s];{/php}

avenger
28.03.2009, 06:52
''>ZITAT(Kopernikus @ Mar 27 2009, 21:38) 158599 Also wenn ich mir die \source\boxes\search_top.php ansehe, dann steht dort die box_SEARCH_TOP in der $smarty drin. Müsste also gehen, oder?[/b]
Nur dann, wenn die 'box_SEARCH_TOP' vor der Erstellung des Snippet erstellt wird.

''>ZITAT</div>Oder muss das $ Zeichen noch vorne hin? [/b]
Nein.

Kopernikus
28.03.2009, 10:43
Ok, Danke - das übersteigt allerdings meinen Horizont. Ich kopier nun den Code zum Bau der Navi direkt in die Index.html.

Kopernikus
31.05.2009, 22:14
Hallo avenger oder sonst jemand

Meine Lösung, das ganze einfach in die Index zu kopieren hat leider nicht wie gewünscht geklappt. Ich muss es also irgenwie erreichen, dass ich {$box_SEARCH_TOP} in der /meinTemplate [CSS Shop/Onlineshop Template s oder Tabellen Shop/Onlineshop Template s ] /snippets/TabNavigation.html nutzen kann.

Ich bin in den letzten zwei Tagen diverse Beiträge zu diesem Thema Durchgegangen und wurde doch nicht schlau. Auf Gunnart's Homepage beschreibt er ja ähnliches (http://www.gunnart.de/tipps-und-tricks/xtcommerce-Boxen [ Template anzeige Fenster ]-ueberall-anzeigen/) - funzt jedoch bei mir auch nicht.

Ich bin langsam total am verzweifeln. Kann mir nochmals jemand einen Tipp geben?