Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 14 sur 14
  1. #1
    Membre à l'essai
    Inscrit en
    avril 2004
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : avril 2004
    Messages : 80
    Points : 21
    Points
    21

    Par défaut Problème Imbrication Smarty et Javascript

    Bonjour ,

    J'ai un petit soucis avec un bout de code javacript/smarty.
    Voila mon code :

    Code :
    1
    2
    3
    4
    5
    6
    <select name={$m_product_options[m_product_options][m_product_options2].classtext}{$matching[m_product].productid} onchange="if(form.color{$matching[m_product].productid}.selectedIndex != 0) {literal}{{/literal}
    if(form.size{$matching[m_product].productid}.selectedIndex != 0)
    {literal}{ {/literal}
    {assign var="colorIndex" value=form.color{$matching[m_product].productid}.selectedIndex-1}
    {assign var="sizeIndex" value=form.size{$matching[m_product].productid}.selectedIndex-1} 
    form.availP{$matching[m_product].productid}.value = optionsArray{$matching[m_product].productid}[{$colorIndex}][{$sizeIndex}]; {literal}}} {/literal}">
    Donc bien sur, ca ne marche pas , et voila ce que j'ai quand j'affiche la source :

    Code :
    1
    2
    3
    4
    <select name=Size41 onchange="if(form.color41.selectedIndex != 0) {if(form.size41.selectedIndex != 0){ 
    .selectedIndex-1}
    .selectedIndex-1} 
    form.availP41.value = optionsArray41[form.color{Array[m_product].productid][form.size{Array[m_product].productid]; }} ">

    Je comprend pas pourquoi il interprète pas mon code correctement...
    Je ne suis pourtant pas en {literal}
    Qu'est ce qui cloche ???

    Merci mille fois pour votre aide !
    Deb

  2. #2
    Inscrit Avatar de is_null
    Profil pro
    Djangonaute Linuxien
    Inscrit en
    octobre 2006
    Messages
    642
    Détails du profil
    Informations personnelles :
    Localisation : Espagne

    Informations professionnelles :
    Activité : Djangonaute Linuxien

    Informations forums :
    Inscription : octobre 2006
    Messages : 642
    Points : 866
    Points
    866

    Par défaut

    Smarty ne considere pas l'imbrication de {, et considere la fin du assign au premier }
    Essayez sans les accolades, ou sans grandes conviction, un hack de cat :
    Code :
    1
    2
    {assign var="colorIndex" value="form.color"|cat:$matching[m_product].productid|cat: ".selectedIndex-1"}
    {assign var="sizeIndex" value="form.size"|cat: $matching[m_product].productid|cat:".selectedIndex-1"}
    Blog / Github / StackOverflow

    Citation Envoyé par C.A.R. Hoare, The 1980 ACM Turing Award Lecture
    There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies and the other way is to make it so complicated that there are no obvious deficiencies.”
    More great quotes - RIP Uriel

  3. #3
    Membre à l'essai
    Inscrit en
    avril 2004
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : avril 2004
    Messages : 80
    Points : 21
    Points
    21

    Par défaut

    Bonjour,

    Merci beaucoup pour votre réponse.
    Effectivement, je suis bête, j'était déjà en "mode smarty" donc j'avais pas besoin de remettre les accolades.
    Et j'ai remarqué aussi qu'il n'aimait pas trop l'imbrication des [] et des {}.
    Du coup, pour simplifier, j'ai mis mon $matching[m_product].productid dans une variable $pid et du coup, il y a plus de . et de trucs imbriqués, il préfère !!!

    Donc cela fonctionne maintenant.

    Merci encore pour votre aide.
    Deb

  4. #4
    Inscrit Avatar de is_null
    Profil pro
    Djangonaute Linuxien
    Inscrit en
    octobre 2006
    Messages
    642
    Détails du profil
    Informations personnelles :
    Localisation : Espagne

    Informations professionnelles :
    Activité : Djangonaute Linuxien

    Informations forums :
    Inscription : octobre 2006
    Messages : 642
    Points : 866
    Points
    866

    Par défaut

    La concatenation aurait probablement fonctionnée ...
    Blog / Github / StackOverflow

    Citation Envoyé par C.A.R. Hoare, The 1980 ACM Turing Award Lecture
    There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies and the other way is to make it so complicated that there are no obvious deficiencies.”
    More great quotes - RIP Uriel

  5. #5
    Membre à l'essai
    Inscrit en
    avril 2004
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : avril 2004
    Messages : 80
    Points : 21
    Points
    21

    Par défaut

    Bonjour,

    J'ai encore un soucis et cette fois que crois bien qu'effectivement, je vais devoir recourir à la concaténation mais je sais pas comment faire.

    Dans mon onchange j'ai ca :
    Code :
    onchange="form.m_availP.value = optionsArray{$aid}[{$colorIndex}][{$sizeIndex}];"
    Mais il ne l'interprète pas... Il remplace mes {} par leur valeur au lieu de les interpréter. Ex {$aid}=47 il met this.options[this.selectedIndex].value qui est la valeur assignée à âid dans un {assign var...}.
    Par contre un alert('{$aid}'); fonctione !!!

    Comment faire la concaténation dans ce cadre la ?

    J'ai essayé :
    Code :
    optionsArray|cat:$aid|cat:[|cat:$colorIndex|cat:][|cat:$colorIndex|cat:]);
    Mais ca ne fonctionne pas. Dans votre exemple il y avait des guillemet alors qu'ici il n'y en a pas...
    J'ai donc essayé ca :
    Code :
    optionsArray"|cat:$aid|cat:"["|cat:$colorIndex|cat:"]["|cat:$colorIndex|cat:"];
    La il me met le code en rouge, et ca ne marche pas non plus...

    Je suis un peu perdue avec ce javascript et ce smarty...

    Merci de votre aide
    Deb

  6. #6
    Membre à l'essai
    Inscrit en
    avril 2004
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : avril 2004
    Messages : 80
    Points : 21
    Points
    21

    Par défaut

    Ok, y'a vraiment des choses que je comprend pas !

    alert({$aid}+{$colorIndex});
    me donme 471, ce qui est OK !

    maintenant

    alert(optionsArray+{$aid}+[+{$colorIndex}+][+{$colorIndex}+]);
    me donne la même chose que
    alert(optionsArray{$aid}[{$colorIndex}][{$colorIndex}]);
    C'est à dire ne traduit pas les {$...} : alert(optionsArray+this.options[this.selectedIndex].value+[+form.m_Color.selectedIndex-1+][+form.m_Color.selectedIndex-1+]);
    ou alert(optionsArraythis.options[this.selectedIndex].value[form.m_Color.selectedIndex-1][form.m_Color.selectedIndex-1]);

    Pourquoi ????

  7. #7
    Inscrit Avatar de is_null
    Profil pro
    Djangonaute Linuxien
    Inscrit en
    octobre 2006
    Messages
    642
    Détails du profil
    Informations personnelles :
    Localisation : Espagne

    Informations professionnelles :
    Activité : Djangonaute Linuxien

    Informations forums :
    Inscription : octobre 2006
    Messages : 642
    Points : 866
    Points
    866

    Par défaut

    value=foo`$bar.foo`bar
    Il semble que cela fonctionne, en fait, on place le code a executer par smarty dans des backticks (`).
    Blog / Github / StackOverflow

    Citation Envoyé par C.A.R. Hoare, The 1980 ACM Turing Award Lecture
    There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies and the other way is to make it so complicated that there are no obvious deficiencies.”
    More great quotes - RIP Uriel

  8. #8
    Membre à l'essai
    Inscrit en
    avril 2004
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : avril 2004
    Messages : 80
    Points : 21
    Points
    21

    Par défaut

    Bonjour,

    Ca ne marche pas, enfin, ca fait exactement la même chose...
    Voila ce que j'ai écrit :
    Code :
    1
    2
     
    form.m_availP.value = optionsArray`$aid`[`$colorIndex`][`$colorIndex`];
    Je craque

    Merci
    Deb

  9. #9
    Inscrit Avatar de is_null
    Profil pro
    Djangonaute Linuxien
    Inscrit en
    octobre 2006
    Messages
    642
    Détails du profil
    Informations personnelles :
    Localisation : Espagne

    Informations professionnelles :
    Activité : Djangonaute Linuxien

    Informations forums :
    Inscription : octobre 2006
    Messages : 642
    Points : 866
    Points
    866

    Par défaut

    Oui mais ce n'est pas de cette facon que smarty permet d'assigner une valeur a une variable a ma connaissance, pourquoi ne pas utiliser {assign} ?
    Blog / Github / StackOverflow

    Citation Envoyé par C.A.R. Hoare, The 1980 ACM Turing Award Lecture
    There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies and the other way is to make it so complicated that there are no obvious deficiencies.”
    More great quotes - RIP Uriel

  10. #10
    Membre à l'essai
    Inscrit en
    avril 2004
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : avril 2004
    Messages : 80
    Points : 21
    Points
    21

    Par défaut

    C pas une variable smarty, c'est une variable javscript en fait.
    C'est justement ca qui doit bloquer.... La mixage de varaible javascript et smarty...

    Ca devient compliqué....

    Une idée ?

  11. #11
    Inscrit Avatar de is_null
    Profil pro
    Djangonaute Linuxien
    Inscrit en
    octobre 2006
    Messages
    642
    Détails du profil
    Informations personnelles :
    Localisation : Espagne

    Informations professionnelles :
    Activité : Djangonaute Linuxien

    Informations forums :
    Inscription : octobre 2006
    Messages : 642
    Points : 866
    Points
    866

    Par défaut

    Bien sur, les backticks ne fonctionnent qu'entre des balises smarty ...
    Blog / Github / StackOverflow

    Citation Envoyé par C.A.R. Hoare, The 1980 ACM Turing Award Lecture
    There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies and the other way is to make it so complicated that there are no obvious deficiencies.”
    More great quotes - RIP Uriel

  12. #12
    Membre à l'essai
    Inscrit en
    avril 2004
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : avril 2004
    Messages : 80
    Points : 21
    Points
    21

    Par défaut

    Mais je peux pas faire autrement mon tableau c'est en javascript...
    Faudrait que je crée un tableau smarty dans le template. C'est possible ca ?
    On fait comment ?

    Un truc du style {assign var=tab[1][2] value=form.selectedIndex.value} ?
    et après : form.monInput.value = {$tab[1][2]}; ?

  13. #13
    Membre à l'essai
    Inscrit en
    avril 2004
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : avril 2004
    Messages : 80
    Points : 21
    Points
    21

    Par défaut

    Re-bonjour,

    J'ai résolu le problème en passant tout en javascript comme ca plsu de soucis d'interférence entre javascript et smarty.
    Au lieu d'assigner un variable smarty $aid, j'assigne un varibale javascript var aid et je concatene le tout et ca amrche....

    Merci de votre aide is_null.
    A bientot

  14. #14
    Invité régulier
    Inscrit en
    juillet 2009
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : juillet 2009
    Messages : 20
    Points : 8
    Points
    8

    Par défaut

    Hello,

    Désolé de remonter un vieux topic mais pour ceux (comme moi) qui tombent dessus via une recherche google, voici quelques explications sur Smarty et Javascript :

    http://www.couscousboulette.com/2012...et-javascript/

    Avec Smarty v3, c'est désormais beaucoup plus simple ; et il est désormais possible d'encapsuler du Smarty dans du Smarty, rendant ce type de code valide par exemple :
    Code :
    {assign var="colorIndex" value=$form.{$color}}
    En outre, quelques raccourcis rapprochent maintenant la syntaxe Smarty de la syntaxe PHP :
    Code :
    {$colorIndex = $form.{$color}}
    Beaucoup plus intuitif que le "assign"

+ Répondre à la discussion
Cette discussion est résolue.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •