Flux rss
Rechercher : dans
Par : Mots clés Nom d'utilisateur
Messages sans réponse

[PhP=>SMARTY] Qui l'utilise et pourquoi ? ccm

ZIG1, le lundi 6 février 2006 à 12:03:26 
 Signaler ce message aux modérateurs

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:::..

1

jisisv, le lundi 6 février 2006 à 15:29:47
  • +1

Assez, sympa.
J'ai utilisé pas mal de temps ModeliXe comme moteur de templates.
Je suis passé à Smarty.
Très agréable, malgré la nécessité de l'adaptation.
J'aprécie particulièrement l'utilisation de la notation pointée (on fait un assign d'un array PHP et le tour est joué, l'utilisation des boucles
{foreach}, des conditionnelles {if}{ellseif}}{/if}

J'ai switché vers Smarty car c'est un standard.
De même, l'utilisation de PEARDB permet de changer facilement de base de données sous-jacente.
La documentation est disponible, non?
http://smarty.php.net/manual/fr/ (14-12-2005)
Document PDF
http://smarty.php.net/distributions/manual/fr/Smarty-2.5.0-d­ocs.pdf
Johan Gates gave you the windows.
GNU gave us the whole house.(Alexandrin)

Répondre à jisisv

2

ZIG1, le lundi 6 février 2006 à 15:39:34

Faut un super bon niveau pour l'utiliser ??
J'ai pas encore mis les mains dedans, mais je compte m'y mettre d'ici mercredi ... ..:::ZIG1:::..

Répondre à ZIG1

3

ZIG1, le mardi 7 février 2006 à 13:07:18

Peut on créer tout type d'application avec SMARTY ?? ..:::ZIG1:::..

Répondre à ZIG1

4

ZIG1, le mardi 7 février 2006 à 13:18:27

Je commence a travailler avec ... mais j'ai du mal a embarquer ...
Quelqu'un pourrait il me faire un résumé rapide qui me permettrait de faire mes premier pas ... et arriver a accrocher avec la doc (ce qui n'est pas encore le cas ...) ..:::ZIG1:::..

Répondre à ZIG1

5

kilian, le mardi 7 février 2006 à 13:49:51
  • +1

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.

Pour résumer, Smarty est une classe. Pour comprendre un peu son fonctionnement, ce serait pas mal que tu connaisses les bases de la programmation orientée objet.
http://www.commentcamarche.net/poo/poointro.php3
http://www.php.net/manual/fr/language.oop.php

Juste les bases: c'est quoi une classe, un objet, une variable membre et une fonction membre.

Par exemple deux fonctions membres très utilisées par les instances de Smarty c'est assign() et display()
assign() te permet de transmettre une variable dans le template et display() te permet d'afficher la page à partir d'un fichier template.

Mais je ne vois pas mieux que la documentation officielle pour comprendre le fonctionnement de Smarty.
Par contre si tu as des question précises, n'hésite pas à les poser.

Répondre à kilian

6

ZIG1, le mardi 7 février 2006 à 14:51:10

Merci, je suis en pleine lecture ...
Car en effet, tu as raison je n'ai jamais pratiqué la poo.
Je lis, je comprend ... et le passage à l'application :
-je le fait avec l'utilisation de SMARTY
-autre idée plus simple ?? ..:::ZIG1:::..

Répondre à ZIG1

7

kilian, le mardi 7 février 2006 à 15:13:37

Oui avec smarty.
Essaie de faire des trucs de base et demande nous si tu as des soucis...

Répondre à kilian

8

ZIG1, le mardi 7 février 2006 à 15:51:38
  • +1

Ben voilà ...
Ca re-commence ... J'ai une question :D

En fait c'est pour vérifier que j'ai compris ...

Les pages php ce sont les demandes avec les données ...
les *.tpl s'occupe du design et des fonctions ???

Genre je fais fais mes *.tpl pour mon design (facile, j'ai compris)
Ensuite, je fais mes fonctionalités ...
Dans mon *.php je fais mes requêtes MySQL pour séléctionner mes données par example, je les stocks dedans ... en assignant $smarty->assign("",""); et ensuite, je fais appel au *.tpl qui va traiter le tout et l'afficher comme faut ...

C'est ca ?? ..:::ZIG1:::..

Répondre à ZIG1

9

kilian, le mardi 7 février 2006 à 16:06:11
  • +1

Non, le tpl est censé ne traiter aucune donnée.

Mais en fait ça ne se passe pas vraiment comme ça.
Le tpl ne traite pas les données mais il peut afficher en fonction de conditions ou effectuer des boucles.

Par exemple pour afficher un tableau du genre

$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.

Répondre à kilian

10

ZIG1, le mardi 7 février 2006 à 16:20:00
  • +1

Donc, je fais l'affichage dans le template ...

Et tous le traitement genre exportation, tri ou autre dans mon php ...

Le fait que l'affichage gére pas mal de chose comme l'UpperCase, la date et l'heure ou les boucles, combo ...
c'est ça ?? ..:::ZIG1:::..

Répondre à ZIG1

11

kilian, le mardi 7 février 2006 à 16:27:37
  • +1

La date et l'heure, je les vois plus dans le traitement.
Et les trucs comme les majuscules, tu peux tout à fait les gérer dans le Php comme dans le template, là c'est plus une question de choix).


Cette logique de disposer tel truc dans l'une ou l'autre partie viendra d'elle même...

Répondre à kilian

12

ZIG1, le mardi 7 février 2006 à 16:43:01
  • +1

Pourquoi y a t il les templates et les templates_c ??
Pourquoi dans templates_c les nom des templates sont de types %%45^45E^45E480CD%%index.tpl.php ??
Je les sort de la demo de smarty ... pour info ..:::ZIG1:::..

Répondre à ZIG1

13

kilian, le mardi 7 février 2006 à 16:51:18
  • +1

Templates_c ce sont les templates compilés.
Je ne sais pas trop comment smarty gère ça mais c'est lui qui s'en occupe, tu n'as pas à t'en soucier (par contre tu dois créer un repertoire pour ces fichiers).

Répondre à kilian

14

ZIG1, le mardi 7 février 2006 à 17:42:46
  • +1

J'ai un souci ...

je fait ma requete, je rempli un tableau avec

$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:::..

Répondre à ZIG1

15

kilian, le mardi 7 février 2006 à 19:41:10
  • +1

Pourquoi il ne le met pas sur une seule ligne

Parce que tu as mis un <br />

pourquoi je ne vois pas mes autres enregistrement ???

Tu n'as demandé qu'une seule ligne du résultat renvoyé par ta requête Sql.
J'ai du faire face au même problème que toi au début.

Pour afficher tous les résultats renvoyés par une requête, d'habitude on fait comme ça:

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à.... :-)

Répondre à kilian

16

ZIG1, le mercredi 8 février 2006 à 10:34:50
  • +1

Ca marche ...
bon maintenant faut que je comprenne et que je fasse apparaître mes données comme je l'entend ...

Petite question subsidiaire ...
parce que le changement de système me "trouble" un peu.
J'ai la sensation que pour chaque fonction de mon application, il va falloir que je créer un fichier php et un tpl ... c'est ca ??

Avant, je passait des variables qui appeler certains includes.
J'avais une page du nom de "contenu" qui routait toute mes pages .... ainsi je n'avais qu'une page php a savoir index et le reste était chargé par des includes
avec les templates ... c'est fini je ne peux plus faire ca ?? (c'est une question, j'ai un gros doute)

..:::ZIG1:::..

Répondre à ZIG1

17

kilian, le mercredi 8 février 2006 à 11:01:41
  • +1

Tu peux inclure un template dans un autre à n'importe quel endroit:

{include file="nom_du_fichier.tpl"}

Répondre à kilian

19

ZIG1, le mercredi 8 février 2006 à 12:01:06
  • +1

Ca voudrait dire que je peux faire un template design générique présentant le header, footer et le menu ...

Est ce que je peut faire appele à plusieur new smarty dans une page ?? ..:::ZIG1:::..

Répondre à ZIG1

20

kilian, le mercredi 8 février 2006 à 12:22:15
  • +1

ca voudrait dire que je peux faire un template design générique présentant le header, footer et le menu ...

Tout à fait, tu peux en fair un pour le footer, un pour le header etc...

Est ce que je peut faire appel à plusieur new smarty dans une page ??

Oui tu peux créer plusieurs instances de Smarty mais pour ça tu n'en a pas besoin.
Tu as juste besoin d'assigner les variables nessaires aux templates puis de lancer le display sur le template qui inclut les autres templates.
Les {include file} importent le code d''autre templates tout simplement....

Répondre à kilian

18

ZIG1, le mercredi 8 février 2006 à 11:18:35
  • +1

Faut que je change tout ma façon de structurer mes application, non ?

pendant un moment j'ai cru qu'avec les templates, il fallait que je créer toutes les fonctionalité par modules puis les assembler notament avec les templates ...

Maintenant, je ne sais plus comment je doit le structurer... je veux dire, je ne sais plus par quel bout commencer.

J'ai une application qui fonctionne, mais elle ne respecte pas les standard ... et puis je veux apprendre surtout

Il y a un design, a peu prés 10 fonctionalités qui peuvent se spécialiser et en ouvrir d'autres si on fait évoluer l'application.

Par où je commence ??
Par créer les modules (1 module par pages php et template ?) ..:::ZIG1:::..

Répondre à ZIG1

21

ZIG1, le mercredi 8 février 2006 à 12:44:57
  • +1

Autre question ...

Encore ...
Ce coups ci je fait une combo ... tu sais une liste déroulante ...
J'appelle mes données depuis la base comme pour les autres affichage et dans le template je fais

{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:::..

Répondre à ZIG1

22

ZIG1, le mercredi 8 février 2006 à 14:33:31
  • +1

Bon, je l'ai fait avec foreach ... au moins ca marche ..:::ZIG1:::..

Répondre à ZIG1

23

kilian, le mercredi 8 février 2006 à 14:36:45
  • +1

Tant mieux, parce que je m'en suis encore jamais servi...

Répondre à kilian

24

ZIG1, le mercredi 8 février 2006 à 14:48:15
  • +1

Autre question à la con ... (c'est par ce que je refais une appli que j'ai déjà fait alors ...)

voila ... j'ai une liste de checkbox ...
le fait est que j'ai une liste d'item dans/sous laquelle j'ai une liste avec checkbox.

en fait, c'est un peu comme la présentation des msg dans ce forum sauf que je l'ai bridé à niveau... pour faire plus simple ...
Je vois comment générer une liste depuis smarty, mais j'ai du mal a imaginer les sous liste ...

--
..:::ZIG1:::..

Répondre à ZIG1

25

ZIG1, le mercredi 8 février 2006 à 15:50:52
  • +1

C'est encore moi,

Je fais une boucle avec une section genre ...

{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:::..

Répondre à ZIG1

26

kilian, le mercredi 8 février 2006 à 23:12:40

Chais pas. J'ai pas encore vu les sections...

Répondre à kilian
[PHP] afficher le nom l'utilisateur Oyez oyez braves gens. Voilà, je débute en PHP et je voulais juste savoir si quelqu'un savais comment on peut récuperer le nom qu'a utilisé le visiteur pour se connecter au site (par un .htaccess .htpasswd) et l'afficher sur une autre page. Je... www.commentcamarche.net/forum/affich-1039040-php-afficher-le-nom-l-utilisateur
PHP 5 - Utiliser une url externe avec la fonction include L'option qui permet d'inclure un url externe (c'est à dire absolue, de la forme http://site.tld/url) via la fonction include est désactivée par défaut dans les versions 5 et ultérieures de PHP, pour l'activer sur votre serveur mettez ces deux lignes... www.commentcamarche.net/faq/sujet-15460-php-5-utiliser-une-url-externe-avec-la-fonction-include
[php] session utilisateur sur un site (Résolu) Bonjour, je voudrais créer un espace utilisateur sur mon site internet (je parle d'un site internet pro pas perso) et je ne sais pas trop par quoi commencer... pour info : les utilisateurs se sont inscrits sur le site via un formulaire d'inscription... www.commentcamarche.net/forum/affich-2897670-php-session-utilisateur-sur-un-site
Guide d'utilisation du Shell pour débutantSHELL BASH - GUIDE D'UTILISATION - Niveau Débutant Introduction Appel aux membres CCM II. C'est quoi le shell ? III. Comment accéder à la ligne de commande IV. Les consoles virtuelles Exemple : Accéder à la console 3 depuis l'interface... www.commentcamarche.net/faq/sujet-4801-guide-d-utilisation-du-shell-pour-debutant
[CCM] Utiliser des caractères spéciauxVous pouvez utiliser des caractères spéciaux dans vos messages sur les forums de CCM. Vous pouvez: Soit utiliser la table de caractères Windows (charmap.exe) et copier-coller les caractères dans le message. Soit utiliser les entités... www.commentcamarche.net/faq/sujet-4552-ccm-utiliser-des-caracteres-speciaux
[PHP] Notice: Undefined index:Si vous utilisez les tableaux $_POST ou $_GET pour récupérer les variables de vos formulaires ou autres, il se peut que vous tombiez sur cette erreur: Notice: Undefined index 'champs du tableau' in 'chemin du fichier php en cours d'execution' on line... www.commentcamarche.net/faq/sujet-1391-php-notice-undefined-index
[PHP] comment utiliser jpgraph (Résolu)Bonjour à tous. Voila j'aimerais générer des graphique dans mes page Web. Pour cela j'ai trouvé qu'on pouvait utiliser jpgraph avec Php et ça me semble assez simple d'utilisation. J'utilise Easy Php, et j'aimerais savoir comment installer corretement... www.commentcamarche.net/forum/affich-1512582-php-comment-utiliser-jpgraph
Supression de fichier en PHP avec unlink(URL) (Résolu)Bonjour, m'etant renseigner sur la supression de fichier en php, j'utilise la fonction unlink(chemin) : Voici mon code : $query = "SELECT * FROM docs WHERE id = ".$id; $result = mysql_query($query, $cnx); while($row = mysql_fetch_row($result)) { $id... www.commentcamarche.net/forum/affich-7434531-supression-de-fichier-en-php-avec-unlink-url
Syntaxe Smarty : récupérer valeur de variable (Résolu)Bonjour, Je développe un site en utilisant un CMS dont les Gabarits sont écrits en Smarty. J'ai actuellement un processus de connexion qui implique la saisie de l'identifiant et du mot de passe. J'ai besoin de "supprimer" la saisie de l'identifiant... www.commentcamarche.net/forum/affich-6758856-syntaxe-smarty-recuperer-valeur-de-variable
PHP - Les fichiersLa gestion des fichiers avec PHP Avec PHP, la création ou la lecture de fichiers est, une fois de plus, assez simple. Il existe une multitude de fonctions dédiées à l'utilisation des fichiers. La communication entre le script PHP et le fichier... www.commentcamarche.net/contents/php/phpfich.php3
PHP - Bases de donnéesPhp permet un interfaçage très simple avec un grand nombre de bases de données. Lorsqu'une base de données n'est pas directement supportée par Php, il est possible d'utiliser un driver ODBC, pilote standard pour communiquer avec les bases de... www.commentcamarche.net/contents/php/phpbdd.php3
PHP - Mail et fonctions réseauPHP étant un langage consacré au Web, il possède bien évidemment des fonctions lui permettant de communiquer avec le "monde extérieur" à l'aide de fonctions standards. Le service le plus utilisé sur Internet étant la messagerie électronique, il est... www.commentcamarche.net/contents/php/phpmail.php3