Templates et boucles

Templates et boucles - PHP - Programmation

Marsh Posté le 31-08-2005 à 16:37:03    

Hello :hello:
 
Je suis en train de restructurer tout mon code avec des templates, mais j'ai un problème, lorsque j'arrive devant une boucle...
 

Code :
  1. $tpl->SetVar('SELECT', 'Sous-Catégorie : <select name="subcat">');
  2.              while ($aff_subcats = mysql_fetch_array($bdd_subcats))
  3.              {
  4.               $tpl->SetVar('OPTION', '<option value="' . $aff_subcats['id'] . '"');
  5.               if (isset($_GET['subcat']) AND $_GET['subcat'] == $aff_subcats['id'])
  6.               {
  7.                $tpl->SetVar('SELECTED', 'selected="selected"');
  8.               }
  9.               $tpl->SetVar('OPTION_1', '>' . $aff_subcats['name'] . '</option>');
  10.              }
  11.              $tpl->SetVar('SELECT_1', '</select><br /><br />');
  12.              }


 
Ca ne m'affiche qu'une seule des sous-catégories demandées... (en fait je fais un <select> pour choisir la sous-catégorie lorsqu'on fait un nouveau topic ;))
 
D'une part c'est vraiment moche comme code ce que j'ai fait, et d'autre part ça ne marche pas :D Si vous avez une idée... :??:
 
PS >> J'utilise le moteur de templates d'un pote... Si vous avez besoin de plus d'infos, demandez ;)


---------------
Feaks Forum
Reply

Marsh Posté le 31-08-2005 à 16:37:03   

Reply

Marsh Posté le 31-08-2005 à 16:43:37    

oui, tu fais un echo dans le setvar ou c'est fait plus loin à l'aide d'une autre fonction?

Reply

Marsh Posté le 31-08-2005 à 16:51:24    

Bah euh ça m'affiche une sous-catégorie, donc oui je pense que le echo est fait autre part...  
Sinon dans le setvar, tu l'insérerais comment le echo??
 
bref euh.. je pense plutôt qu'il ne prend plus en compte le while... non?


Message édité par Multinickname le 31-08-2005 à 16:51:35

---------------
Feaks Forum
Reply

Marsh Posté le 31-08-2005 à 16:56:01    

si le echo est fait autre part, alors tu écrases surement les valeurs à chaque tour de boucle.
Du coup, seul le dernier sera affiché vu que seul le dernier existe encore à la sortie de la boucle.
 
Au fait, pourquoi t'as pas demandé à ton ami pourquoi t'en as qu'un seul qui s'est affiché? Il aura pas besoin de jouer aux devinettes pour te répondre. ;)

Reply

Marsh Posté le 31-08-2005 à 16:58:30    

Ok, je comprends l'explication...  
 
Bah j'ai MPisé celui qui a fait le template en début d'aprem, mais j'ai toujours pas de réponse... donc j'attends :d
 
Je verrais avec lui si le probleme vient de l'echo... ;)
 
:jap:


---------------
Feaks Forum
Reply

Marsh Posté le 31-08-2005 à 17:00:04    

Je pense que c'est normal que ça ne t'affiche qu'une seule sous-catégorie. Si je ne me trompe pas ça t'affiche la dernière ? (ou la première si le moteur de ton pote ne permet pas la réaffectaion).
 
En fait, dans ta boucle tu réaffectes tes valeurs aux mêmes variables ('OPTION', 'SELECTED', etc....), donc au final tu n'as qu'un enregistrement.
 
Comme je ne connais pas le moteur de ton pote, le seul moyen de savoir comment gérer un bloc (une boucle quoi) c'est de lire la doc si il en a une ou de lui demander directement :)


---------------
France Hardware | Degroup Test | Degroup News
Reply

Marsh Posté le 31-08-2005 à 17:07:47    

Ah euh bah oui il est possible de gérer les blocs
 

Citation :

* <!-- INCLUDE fichier -->
 *      Inclusion du fichier spécifié. Accepte un nom de fichier ou une variable.
 *
 * <!-- EXIT -->
 *      Arret immédiat de la compilation du fichier en cours. Utile dans les blocs IF/ELSE/END et INCLUDE
 *
 * <!-- BEGIN bloc -->...<!-- ELSE -->...<!-- END -->
 *      Affiche toutes les occurences du bloc spécifié, ou le ELSE si le bloc n'existe pas
 *
 * <!-- DO bloc -->...<!-- ELSE -->...<!-- END -->
 *      Affiche une seule fois les variables du bloc spécifié, ou le ELSE si le bloc n'existe pas
 *
 * <!-- REPEAT fois -->...<!-- END -->
 *      Réptition d'une séquence HTML. "fois" peut être une constante ou une variable simple
 *
 * <!-- IF [NOT] cond -->...<!-- ELSE -->...<!-- ENDIF -->
 *      Compilation conditionnelle. "cond" peut être MORE, TRUE, FALSE, ou une variable
 *
 * <!-- REM -->
 *      Commentaire, supprimé du code final. Les commentaires normaux étant conservés,
 *      c'est pratique pour s'échanger des indications entre plusieurs auteurs de la page.
 *
 * <!-- DUMP [VARS|SOURCE|CODE|varname] -->
 *      Affiche un dump des variables du template, du source, du code compilé ou d'une variable PHP
 */


 
Mais euh comme je débute en templates (commencé aujourd'hui, enfin apres plusieurs tentatives abandonnées :D), je ne vois pas bien comment utiliser les blocs pour ma boucle :??:


---------------
Feaks Forum
Reply

Marsh Posté le 31-08-2005 à 17:12:55    

Ben sans doc on peut rien te dire, il peut y avoir X façons de déclarer le bloc.


---------------
France Hardware | Degroup Test | Degroup News
Reply

Marsh Posté le 31-08-2005 à 17:16:58    

ca t'aide pas le quote que j'ai mis plus haut?


---------------
Feaks Forum
Reply

Marsh Posté le 31-08-2005 à 17:19:35    

Ben tu as mis les tags utilisés dans les templates, mais en fait il faudrait savoir comment définir en php le contenu des blocs.
 
Et ça on peut pas le savoir. Y'a que ton pote qui peut te le dire. Mais ça me parait bizarre qu'il n'ait pas une doc où est expliqué comment utiliser son moteur.


---------------
France Hardware | Degroup Test | Degroup News
Reply

Marsh Posté le 31-08-2005 à 17:19:35   

Reply

Marsh Posté le 31-08-2005 à 17:24:04    

Il y a un fichier d'exemples...
 
c'est peut être ça non?
 

Code :
  1. // Ajoute une variable composée
  2. $tpl->SetVar("BLOC_1", array("LIGNE_1" => "Premi&egrave;re ligne",
  3.                              "LIGNE_2" => "Seconde ligne",
  4.           "LIGNE_3" => "Troisi&egrave;me ligne",
  5.           "LIGNE_4" => "Quatri&egrave;me ligne",
  6.           "LIGNE_5" => "Cinqui&egrave;me ligne",
  7.          ));


 
Ou ca ?
 

Code :
  1. // On peux mixer :D
  2. $tpl->SetVars(array("SIMPLE_1" => "Simple 1",
  3.                     "BLOC_2"   => array("LIGNE_2_1" => "Ligne 2.1",
  4.                         "LIGNE_2_2" => "Ligne 2.2" ),
  5.     "SIMPLE_2" => "Simple 2",
  6.     "VRAI"     => 1,
  7.     "FAUX"     => 0,
  8.       ));


---------------
Feaks Forum
Reply

Marsh Posté le 31-08-2005 à 17:25:37    

il a l'air un peu moyen ton moteur de templates...[:pingouino]


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 31-08-2005 à 17:29:55    

Ah euh bah faut dire ça au conecpteur [:bighead]
 
Nan mais disons que c'est le premier où j'arrive à le faire marcher...
 
Les autres du genre Smarty, ou celui de PHPLib, bah j'y arrivais pas :spamafote:
 
M'enfin euh oui il est peut être nul :d
 
Si je dois vraiment changer, je le ferais


Message édité par Multinickname le 31-08-2005 à 17:30:09

---------------
Feaks Forum
Reply

Marsh Posté le 31-08-2005 à 17:31:26    

Multinickname a écrit :

Smarty j'y arrivais pas


[:pingouino]


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 31-08-2005 à 17:33:10    


 
 
Ba euh je veux bien réessayer hein, mes dernieres tentatives datent :d


---------------
Feaks Forum
Reply

Marsh Posté le 31-08-2005 à 17:34:31    

Smarty est très simple, très puissant, et a une bonne doc, facile à exploiter.


---------------
France Hardware | Degroup Test | Degroup News
Reply

Marsh Posté le 31-08-2005 à 17:35:09    

Multinickname a écrit :

Ba euh je veux bien réessayer hein, mes dernieres tentatives datent :d


 
Bah c'est quand même relativement simple...après avoir regardé 2/3 exemples tu sais utiliser les fonctions de base...[:pingouino]


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 31-08-2005 à 17:36:18    

Bon... Je vais m'y remettre avec Smarty alors...
 
et puis bah euh je regarderais la doc pour mon probleme plus haut :d
 
:jap:


---------------
Feaks Forum
Reply

Marsh Posté le 31-08-2005 à 19:03:01    

Ben avec smarty c'est facile, suffit d'utiliser {foreach} :)


---------------
France Hardware | Degroup Test | Degroup News
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed