[Résolu] Problème Smarty/Back -
debutems - 12/03/2017
Citation :#~~~~~ DEBUT BLOC A NE PAS SUPPRIMER ~~~~~
#~ Version du CMS: 2.1.2
#~ Url du site :
#~ Hébergeur / Soft : wampserver
#~ Informations Système :
#~~~~~ FIN BLOC A NE PAS SUPPRIMER ~~~~~
Bonjour à tous,
Je bloque sur un petit problème qui est d'ailleurs lié à Smarty, du coup je viens vers vous afin de savoir si quelqu'un aurait une idée de solution
Sur mon fichier .tpl j'ai :
Code :
[== HTML ==]
{foreach from=$listfiles key=k item=file }
{$file["Key"]}
<input type="submit" name="{$actionid}downloadfile" value="{$mod->Lang('download_file')}"/>
{/foreach}
Mon but étant de récupérer sur mon back la value de mon {$file["Key"]} correspondant au submit.
Sur le back :
Code :
[== PHP ==]
if(isset($params['downloadfile'])){
}
Pour résoudre ce problème, j'avais dans l'idée d'ajouter un input hidden pour chaque item de mon foreach :
Code :
[== HTML ==]
{foreach from=$listfiles key=k item=file }
<input type="hidden" name="{$actionid}cache[]" value="{$file['Key']}"/>
{$file["Key"]}
<input type="submit" name="{$actionid}downloadfile" value="{$mod->Lang('download_file')}"/>
{/foreach}
Le problème étant que je n'ai pas la possibilité de savoir quel est la key "k"... Donc quand dans le back je fais un var_dump($params['cache']); L'ensemble du array s'affiche
Merci d'avance pour toutes les réponses qui pourront faire avancer mon schmilblick
[Résolu] Problème Smarty/Back -
airelibre - 13/03/2017
Bonjour,
Te faut-il obligatoirement passer par un formulaire ? Tu peux très bien faire des liens avec {cms_action_url} :
Code :
{foreach $listfiles as $k=>$file}
<a href="{cms_action_url action='NOM_ACTION' file_key=$k}">Télécharger {$file}</a>
{/foreach}
Ou alors j'ai mal compris le but de l'action... peux-tu préciser ton intention dans ce cas ?
Merci et a+
[Résolu] Problème Smarty/Back -
debutems - 13/03/2017
Bonjour,
HUM... Merci pour la réponse !!! c'est exactement ce que je cherchais.
Je passe le sujet en résolu.
(merci encore)
[Résolu] Problème Smarty/Back -
airelibre - 13/03/2017
Super
Bonne continuation
[Résolu] Problème Smarty/Back -
debutems - 13/03/2017
Juste avant de mettre en résolu, j'ai une mini question
Je voulais savoir si c'était possible de mettre un {cms_action_url} dans du jQuery
Code :
[== HTML ==]
<a class="del_user" href="{cms_action_url action=delete_user hid=$user->id}" title="{$mod->Lang('delete')}">
</a>
Par exemple avec ce type de code, j'aimerais l'intégrer dans une balise <td>, mais malgré mes recherches, pas trouvé...
Code :
[== JavaScript ==]
/**
* [sBuildTab create table]
* @type {String}
*/
var sBuildTab = "";
/**
* [oDictUser correspond user]
* @type {[type]}
*/
var oDictUser = oDictionnaryListFile[$id_select_client.val()];
/**
* [oDictUserWithFeatures correspond features]
* @type {[type]}
*/
var oDictUserWithFeatures = oDictUser[$id_select_features.val()];
$(oDictUserWithFeatures).each(function(index, value){
sBuildTab += "<tr>";
sBuildTab += "<td>";
sBuildTab += value;
sBuildTab += "</td>";
sBuildTab += "</tr>";
});
$("#id_tbody_file").empty();
$("#id_tbody_file").append(sBuildTab);
Merci d'avance pour les personnes qui pourront me répondre
[Résolu] Problème Smarty/Back -
airelibre - 13/03/2017
Oui c'est possible, et il y a un paramètre "forjs" normalement pour la balise {cms_action_url} - regarde l'aide du plugin (Extensions / Balises , dans l'admin). Tu peux t'en servir pour disposer d'une URL d'action faite pour JS.
[Résolu] Problème Smarty/Back -
debutems - 13/03/2017
Merci
Je n'avais pas compris qu'il était possible de regarder la doc directement par le back...
Code :
[== JavaScript ==]
$(oDictUserWithFeatures).each(function(index, value){
sBuildTab += "<tr>";
sBuildTab += "<td>";
sBuildTab += value;
sBuildTab += "</td>";
sBuildTab += '<td>';
sBuildTab +='<a class="del_file" href={cms_action_url action=delete_file namefile='+value+' forjs=1} title="delete">';
sBuildTab += '{admin_icon icon="delete.gif"}';
sBuildTab += '</a>';
sBuildTab += '</td>';
sBuildTab += "</tr>";
});
Néanmoins, lors du retour sur le back, mon params["namefile"] a pour valeur "+value+"... et non la valeur de la variable, ce qui est logique parce qu'un petit coup de F12 me montre bien que la variable n'est pas interprétée...
Je vous embête encore une fois pour savoir si vous auriez une idée pour forcer l'interprétation d'une variable ?
Merci pour les réponses qui me seront apportées
[Résolu] Problème Smarty/Back -
Jean le Chauve - 13/03/2017
Bonsoir,
Tu dois placer une balise {literal} avant le JS et {/literal} après le JS pour éviter que les accolades ne soit évaluées par Smarty :
http://www.smarty.net/docsv2/fr/language.function.literal.tpl
[Résolu] Problème Smarty/Back -
airelibre - 14/03/2017
Il est normal dans ce cas que +value+ soit la valeur car Smarty va interpréter le code, puis le renvoyer au navigateur. Ensuite seulement le JS prend le relais. Smarty est côté serveur, il faut le comprendre comme étant du PHP. Donc la logique n'est pas bonne dans ton code.
Dans ton cas, il faut trouver une astuce pour faire interagir les deux.
La remarque de Jean le Chauve, bien que pertinente de manière générale pour le JS au sein du Smarty, ne s'applique pas pour toi car tu as besoin d'utiliser du Smarty au sein du JS. Il faut juste veiller à ce que les accolades ouvrantes dans ton code JS soient suivies par au moins un espace ou un saut de ligne pour qu'il ne soit pas interprété par Smarty.
Pour ta solution, il faut tenter plutôt quelque chose comme ca :
Code :
$url = "{cms_action_url forjs=1 action='delete_file'}"
Puis dans ta boucle :
Code :
sBuildTab +='<a class="del_file" href="' + $url + '&cntnt01namefile=' + value + '" title="delete">';
[Résolu] Problème Smarty/Back -
debutems - 14/03/2017
airelibre a écrit :Code :
$url = "{cms_action_url forjs=1 action='delete_file'}"
Puis dans ta boucle :
Code :
sBuildTab +='<a class="del_file" href="' + $url + '&cntnt01namefile=' + value + '" title="delete">';
La variable $url serait dans mon controller et je l'enverrais sur Smarty avec assign ?
Le problème est qu'il me faudrait {cms_action_url action=delete_file namefile=value forjs=1}, dans votre exemple le namefile est en dehors des "{" "}" du coup je ne peux pas le récupérer avec $params["namefile"] si ?
merci pour toutes les réponses
[Résolu] Problème Smarty/Back -
airelibre - 14/03/2017
Pour la variable $url, elle serait dans le JS. Smarty génère l'URL via {cms_action_url} puis JS la récupère sous forme de chaîne.
Tu peux récupérer ton $params['namefile'] car je l'ai ajouté à la fin de l'URL avec :
Code :
$url + '&cntnt01namefile=' + value
[Résolu] Problème Smarty/Back -
debutems - 14/03/2017
Vous pensez à quelque chose comme ça ?
Code :
[== JavaScript ==]
var url = "{cms_action_url action=delete_file forjs=1}";
$(oDictUserWithFeatures).each(function(index, value){
sBuildTab +='<a class="del_file" href="'+ url + '&cntnt01namefile='+value+'"title="delete">';
sBuildTab += '{admin_icon icon="delete.gif"}';
sBuildTab += '</a>';
});
merci encore pour les réponses, c'est vraiment super d'avoir autant d'aide sur le forum quand on débute
[Résolu] Problème Smarty/Back -
airelibre - 14/03/2017
C'est exactement ça - ca fonctionne ?
[Résolu] Problème Smarty/Back -
debutems - 14/03/2017
Non
c'est comme si il n'y avait pas de "namefile" dans le href.
J'essaye de voir s'il n'y a pas d'autres solutions sans passer par jQuery.
J'avais pensé créer tout mon tableau et ensuite hide ou show en jQuery ce dont j'ai besoin mais pour ça il faudrait avoir des "class" avec des noms différents selon l'emplacement du dictionnaire, ça me semble hyper fouillis...
[Résolu] Problème Smarty/Back -
airelibre - 14/03/2017
Tu récupères bien l'url dans ton .each ? Après ca devient un problème de JS, donc l'inspecteur de code est ton ami
Tiens-nous au courant
[Résolu] Problème Smarty/Back -
debutems - 14/03/2017
airelibre a écrit :Tu récupères bien l'url dans ton .each ? Après ca devient un problème de JS, donc l'inspecteur de code est ton ami Tiens-nous au courant
Dans mon .each j'ai bien l'url mais pas le "&cntn01namefile" à la suite dans le href ^^
Je vous tient au courant, merci pour les réponses.
[Résolu] Problème Smarty/Back -
debutems - 14/03/2017
Merci à tous pour les réponses
particulièrement à airlibre qui est ultra efficace !
J'ai fait un petit mix de tout, et finalement la solution était de mettre dans une variable l'URL comme l'avait proposé airlibre mais dans la boucle et lui associer directement le "namefile" que je récupère en GET dans le controller
Problème réglé !! je lock vraiment le sujet du coup
Encore merci !
[Résolu] Problème Smarty/Back -
airelibre - 14/03/2017
Super, ravi de t'avoir aidé
Bonne continuation !