|
|
|
|
Bonjour à tous,
je viens de découvrir SMARTY.
Le moteur de templates (http://smarty.php.net/).
Ca a l'air super, qui l'utilise ou peut me donner un avis.
Je me demande si je ne vais pas refaire toutes mes appli avec histoire d'être plus lisible .... vous en pensez quoi ??
Avis favorable, défavorable ??
Quel en est la porté ...
Comment ca marche ... SMARTY :D
bref, je vous écoute :D
..:::ZIG1:::..
Assez, sympa.
|
J'aime bien smarty. Je suis en train de reprendre un site où la présentation et le Php étaient mélangés (histoire de faciliter la maintenance pour plus tard). Avec les templates ça devient plus clair.
|
Ben voilà ...
|
Non, le tpl est censé ne traiter aucune donnée.
$tab=array('un','deux');
$Tpl->assign('tab',$tab)
Et dans le template: {foreach from=$tab item=chiffre}
{$chiffre}<br/>
{/foreach}
Le champs from c'est le nom de la variable tableau concernée. Et le champs item sera le nom à donner à chaque occurence du tableau. Le résultat te donnera: un<br/>deux<br/> Tu vois ce n'est pas vraiment un traitement de données mais un traitement d'affichage. Un affichage par boucle. Ce qui est contenu dans le tableau $tab par contre, ça se passe dans le fichier Php. Et tu peux aussi appliquer des fonctions Php dans le template aux variables affichées, pour mettre la première lettre en majuscule par exemple. Là encore il ya du traitement, mais ça reste cantonné à du traitement pour l'affichage. Bien sûr tu peux utiliser des fonctions Php qui n'ont pas de rapport avec l'affichage dans le template mais du coup tu perds l'interêt du template. |
J'ai un souci ...
$prenom = mysql_fetch_array($result, MYSQL_ASSOC); Ce qui fait un tableau de type [NOM] [PRENOM] ... et ce 7 fois car j'ai 7 entrée en base, mais le dernier et vide aprés je l'assigne $smarty->assign("prenom",$prenom);
dans mon template il y a {foreach key=key item=item from=$prenom}
{$key}: {$item}<br />
{/foreach}
et là il ne me montre qu'un [NOM] [PRENOM] qu'il montre ainsi NOM: Premiére valeur nom PRENOM: Premiére valeur prénom Pourquoi il ne le met pas sur une seule ligne et pourquoi je ne vois pas mes autres enregistrement ??? Je suis sur que j'ai raté un truc dans le foreach !!! Merci d'avance pour votre aide ..:::ZIG1:::.. |
Pourquoi il ne le met pas sur une seule ligne
while ($prenom = mysql_fetch_array($result, MYSQL_ASSOC) )
{
echo 'Prenom: ' .$prenom['prenom'];
echo 'Nom: '. $prenom['nom'];
}
Ce n'est plus possible avec les tpl vu qu'on n'as plus les echo, on doit d'abord récupérer tous les résultats pour les envoyer au tpl. Pour arriver à ça, je passe par un tableau multidimensionnel et par une boucle qui ne fait que répéter sa condition (une boucle sans bloc d'instruction): while ($lignes[]=mysql_fetch_array($result, MYSQL_ASSOC) ); /* Note le ";" à la fin */ Voilà, dans $lignes[0], tu auras la première ligne. Dans $lignes[1]['prenom'] tu auras le prenom stocké à la ligne 2 Seul soucis: lorsqu'il n'y a plus de résultat dans $result, le while executera la condition, et comme il n'y a plus rien, il quittera la boucle mais par contre la variable $lignes[] prendra un résultat vide. Il faut donc supprimer le dernier offset de $lignes: array_pop($lignes);
//Puis on envoie $lignes au tpl
$Tpl->assign('lignes', $lignes);
Ensuite dans le tpl tu peux faire comme ça: {foreach from=$lignes item=ligne}
Prenom: {$ligne.prenom}<br/>
Nom: {$ligne.nom}
{/foreach}
{* Ou alors *}
{foreach from=$lignes item=ligne}
{foreach from=$ligne item=item key=key}
{$key}: {$item}<br/>
{/foreach}
{/foreach}
Et pis voilà.... :-) |
Ca marche ...
|
Faut que je change tout ma façon de structurer mes application, non ?
|
Autre question ...
{html_options name=fonction options=$option_values }
Le fait est qu'il me met autour de chaque valeur un optgroup qui apparait dans la combo avec le numéro du array ... ca fait quelque chose comme: 0 permiere valeur 1 deuxième valeur ... la source html montre ce genre d'info <optgroup label="0"> <option label="1" value="id">1</option> <option label="Première valeur" value="nom">Première valeur</option> </optgroup> ... je crois que ca a un rapport avec le tableau mutlidimensionnel ... mais pas sur ..:::ZIG1:::.. |
Autre question à la con ... (c'est par ce que je refais une appli que j'ai déjà fait alors ...)
|
C'est encore moi,
{section name=service loop=$service}
{if $smarty.section.service.level eq 1}
<INPUT TYPE="checkbox" NAME="SERVICE[]" VALUE={$smarty.section.service.foldId}>{$smarty.section.service.folder}<BR>
{/if}
{/section}
ma question est la suivante ... Quand j'écris $smarty.section.service.level je fais fais bien ressortir la valeur "level" du tableau service, non ?? parce que c'est mon but ... et il me dit qu'il ne connait pas cet index ... alors du coup je ne sais pas vraiment quoi faire et comment ... ..:::ZIG1:::.. |