Hallo zusammen, ich verwende ein kurzes Javascript, dass ca. so aussieht und folgendermaßen in der \templates\meintemplate\frontend\blog\index.tpl eingesetzt ist: {\* Javascript \*} {block name="frontend\_index\_header\_javascript" append} {literal}<script type="text/javascript">
$(document).ready(function(){
if ($.xyz...) {
$('.variierende_css_klasse').xyzfunction({
option1: variierende Zahl(1,2,3...),
option2: "#variierende_div_id"
});
}
});
</script>{/literal} {/block}
Das eigentliche .js-file selbst ist ganz normal angebunden: <script type="text/javascript" src="%7Blink%20file='frontend/_resources/javascript/xyzscript.js'%7D"></script>
Das Script benötigt eine Option in Form einer Zahl (1,2,3…), eine css-klasse und die ID eines div’s. Alles funktioniert soweit auch. Das Problem ist wie ich im Code schon angedeuetet habe, das aufgrund bestimmter Umstände sich jetzt die Klasse, das Div und die Zahl ändern sollen, ohne das ich den Code-Abschnitt mit der Funktion für jede mögliche Kombination im Template wiederholen muss. Das soll sich also automatisch ändern. Dafür wollte ich ein Artikel-Attribut verwenden, dass aber an der Stelle im Template nicht zur Verfügung steht und erst geholt werden muss - und Smarty muss dazu wohl auch noch mit dem Javascript kombinert werden… 1. Problem: ich weiss nicht genau wie eine Variable angefordert werden kann. Das Attribut selbst wird über ein Array angesprochen / explode zerlegt, die Werte sind im Attribut per “|” getrennt hinterlegt (das funktioniert an anderer Stelle schon, aber ohne Javascript): Ist das so wie hier prinzipiell richtig? {foreach from=$sArticles item=article"} {include file="frontend/blog/box.tpl" sArticle=$article} {assign var="myArray" value="|"|explode:$sArticle.attr14} {/foreach}
…oder ist das total falsch? 2. Problem: wie wird {$myArray[0]}, {$myArray[1]}, {myArray[0]} in das Javascript eingefügt? Prinzipiell soll es ja so aussehen: [code]{\* Javascript \*} {block name="frontend\_index\_header\_javascript" append} {literal}<script type="text/javascript">
(document).ready(function(){
if (.xyz...) {
(’.{$myArray[0]}’).myfunction({
option1: {$myArray[2]},
option2: “#{$myArray[1]}”
});
}
});
{/literal} {/block}[/code] Was ja so nicht geht, es muss ja innerhalb des Javasripts entweder mit {/literal}{…smarty…}{literal} gearbeitet werden oder im Script { durch {ldelim} und } durch {rdelim} ersetzt werden (Literal-Tags dann weglassen), soweit ich weiß. Wie ist es hier richtig oder geht das so überhaupt nicht? 3.Problem: Wie muss die Abfrage für die Variable mit dem Javascript in Verbindung gebracht werden? Hat dazu Jemand eine Lösung? frohe Ostern noch und Grüße rattaui
Hallo, also momentan sieht es so aus: [code]{literal}[/code] …funktioniert aber immer noch nicht. Im Firebug Script-Fenster sieht das so aus: [code][/code] Und die Konsole meldet: missing } after function body Woran könnte das liegen? Liegt der Fehler (nur) in der Syntax? Und scheinbar findet er auch nicht nach diesem Teil in das Javasript zurück: {foreach $sArticle AS $article} {assign var="myArray" value="|"|explode:$article.attr14}
…denn sonst müsste der Rest des Scriptes in dem Firebug-Scriptfenster auch angezeigt werden anstelle der Leerzeilen… Oder aber: Ich habe die Vermutung, das durch literal oder {ldelim} / {rdelim} aber grade die Variablen/Werte die in {$myArray[1]} usw. stehen, für das Javascript wieder unsichtbar sind / gemacht werden. Wenn dem so ist, müsste eine Möglichkeit gefunden werden, die Variablen-Werte von {myArray[0]} usw. an das Javascript zu übergeben. Ich habe von Javascript kaum eine Ahnung, aber vom Prinzip her dachte ich an so etwas ähnliches - Beispiel: [code]({/literal}{$myArray[1]}{weiterer nötiger php/smarty code}{literal}’.WERT_HIER’).xyzfunction({ [/code] Nur ob es daran liegt oder wie das umszusetzen ist weiß ich nicht. Kann Jemand weiterhelfen? Grüße rattatui