2010-08-04 8 views
4

Je suis en train d'utiliser des variables Smarty à l'intérieur javascript intérieur tplles variables Smarty à l'intérieur javascript

{literal} 
<script language="javascript"> 
    google.load('visualization','1',{'packages': ['geomap']}); 
    google.setOnLoadCallback(drawMap); 


    function drawMap() { 
    var data = new google.visualization.DataTable(); 
    data.addRows(4); 
    data.addColumn('string', 'Location'); 
    data.addColumn('number', 'Number of links'); 

{/literal}{foreach from=$last5 item=link name=links key=index} 
    data.setValue({$index},0,'{$link.location|replace:'\'':'\\\''}'); 
    data.setValue({$index},1,{$link.location_count}); 
{/foreach}{literal} 

    var options = {}; 
    options['dataMode'] = 'regions'; 
    options['region'] = 'world'; 

    var container = document.getElementById('map'); 
    var geomap = new google.visualization.GeoMap(container); 

    geomap.draw(data, options); 
    }; 
</script> 
{/literal} 

pouvez-vous me suggérer une solution s'il vous plaît

+1

Quelle est votre question? Qu'est-ce qui ne fonctionne pas? –

+0

cela ne fonctionne pas, est-ce syntaxiquement correct? – soField

+0

-1 --- Votre lien a expiré - cela rend vraiment ce post inutilisable pour moi! – bastiandoeen

Répondre

13

fermer simplement la balise {literal} juste avant d'insérer la variable Smarty, et rouvrez-le à nouveau.

Ou utilisez {ldelim} et {rdelim} pour les éléments de code auxquels vous attribuez des valeurs de Smarty.

+0

devrais-je le faire pour foreach tag de smarty – soField

+0

Aucune étiquette Smarty ne peut être placée à l'intérieur de {literal} {/ literal}. Lorsque vous avez besoin de placer un foreach, une variable, un if, ou n'importe quoi d'autre dans Smarty, vous devez le faire en dehors de {literal}. Si petit JS est présent, il peut être préférable d'omettre le {literal}, et à la place utiliser {ldelim} et {rdelim} pour les accolades littérales nécessaires dans JS. – AlexanderMP

+0

Je suis vraiment confus, j'essaie beaucoup de choses mais je ne pouvais pas réussir à travailler, pouvez-vous s'il vous plaît modifier le code et le coller pour moi – soField

7
{literal} 
function doSomething(myNumber){ 
    var result = myNumber/{/literal}{$myDivider}{literal}; 
    // rest of code... 
} 
// more functions... 
{/literal} 

ou

{literal} 
function doSomething(myNumber){ 
{/literal} 
    var result= myNumber/{$myDivider}; 
{literal} 
    // rest of code... 
} 
// more functions... 
{/literal} 

ou

function doSomething(myNumber){ldelim} 
    var result= myNumber/{$myDivider}; 
    // rest of code below... 
{rdelim} 

function doSomeMore(another){ldelim} 
    alert('{$myHello}'); 
    // more code 
{rdelim} 

OR (avec 3.x Smarty et au-dessus, aucun littéraux etc nécessaire)

function doSomething(myNumber){ 
    var result = myNumber/{$myDivider}; 
    // rest of code 
} 

Dans Smarty 3, une accolade gauche avec un espace (espace, tabulation ou nouvelle ligne) à côté ne devrait plus déranger la logique de Smarty. Problèmes résolus en utilisant la nouvelle version :)

+0

J'ai une situation similaire ici mais peu complexe, regardez @ mon code. '{literal} {/ literal}' Dans ce cas, il ne retourne pas l'URL complète, mais la valeur est récupérée.Aide? – Vijay

+1

Eh bien, au moins vous avez "localhots", pas "localhost". être inacceptable, voir http://stackoverflow.com/questions/3707738/facebook-oauth-redirect-uri-problem-given-url-is-not-permitted-by-the-applicatio – karvonen

+0

{Idelim} et {rdelim} est ne fonctionne pas –

0

Après avoir essayé (Karvonen) réponses [Je n'ai pas essayé {rdelim} cependant, seulement essayé {literal}], je me suis un problème avec mes ajax demandes, il a cessé de chercher de toute date du serveur sur le chargement après la rupture de smarty en JS. Donc, ce que j'ai fait, c'est que j'ai assigné la valeur smarty à un hidden field (je sais que ce n'est pas la chose la plus intelligente à faire), puis j'ai demandé cette valeur à JS et je l'ai donc assigné à une variable. J'espère que cela aide.