Bienvenue sur le site officiel du système de template GagaTemplate. Si vous avez un problème avec ce script, allez faire un petit tour dans la documentation ou si cela ne suffit pas, sur le forum.
Ce système de template est très simple et ne contient que les fonctions importantes d'un système de template, c'est pour celà qu'il est rapide et simple d'utilisation. Si vous débutez avec les templates ce script est pour vous.
Sujet résolu
Vous devez être inscrit et connecté pour pouvoir écrire dans les forums
Page : 1 |
|||||||
Amadeus |
Posté le 11/10/2007 17:31 - # | ||||||
|---|---|---|---|---|---|---|---|
|
Membre 9 messages |
Bonjour, Tout d'abord bravo pour ce moteur de template qui correspond parfaitement à mes besoins Seulement j'ai un problème (ce serait trop beau ^^), les variables de blocs dans un fichier inclus dans ce même bloc ne sont pas parsés. Voici le code pour que ce soit plus clair: Template: <!-- BEGIN modules_top --> {include file="modules_list.tpl"} <!-- END modules_top --> PHP: $template->assign_block('modules_top', array( 'moduleTitle' => $blocTitre, 'moduleName' => $blocName, 'moduleId' => $blocId )); Et donc les variables ({$moduleId}, etc...) dans le fichier modules_list.tpl ne sont pas parsés... Comment faire? Merci, Amadeus |
||||||
gaga26 |
Posté le 11/10/2007 18:31 - # | ||||||
|
741 messages 18 ans |
Salut, Le problème vient du fait que quant tu inclut un fichier, mon moteur de templates le compile et le renvoie déjà parsé. Vu qu'il n'y a pas de boucle dans l'include, la boucle n'est pas ou est mal effectuée. Essai voir de mettre la boucle dans le fichier inclut, peut-être que ça va marché, mais sans garantie. Ou sinon ne fait pas d'include. A suivre... |
||||||
Amadeus |
Posté le 11/10/2007 18:41 - # | ||||||
|
Membre 9 messages |
C'est possible une variable dans le nom de la boucle? Parce que si j'ai fait ça c'est que j'ai un fichier assez long qui doit se répéter plusieurs fois et ceci dans plusieurs boucles différentes, donc je ne peux ni mettre une boucle avec un nom spécifique dans le fichier inclus et ni enlever l'include car ce serait impossible à gérer ^^ Il n'y a vraiment pas moyen de faire autrement? Edité par Amadeus le 11/10/2007 18:41 |
||||||
gaga26 |
Posté le 11/10/2007 18:54 - # | ||||||
|
741 messages 18 ans |
Il y a toujours moyen, mais c'est une technique que je n'approuve pas. <!-- BEGIN modules_top --> <?php include($this->this_dir.$this->template_dir.'modules_list.tpl'); ?> <!-- END modules_top --> Il y a de bonne chance que ça marche comme ça, mais on perd un peu l'utilité des templates en mettant du PHP dedans... |
||||||
Amadeus |
Posté le 11/10/2007 19:10 - # | ||||||
|
Membre 9 messages |
Euh non même comme ça il n'y a aucun changement Rien d'autre? Merci ^^ |
||||||
gaga26 |
Posté le 11/10/2007 19:16 - # | ||||||
|
741 messages 18 ans |
Tu as une erreur ou quelque chose qui pourrait nous être utile ? | ||||||
Amadeus |
Posté le 11/10/2007 19:47 - # | ||||||
|
Membre 9 messages |
Non pas d'erreur, mais je vais au cas où détailler plus les fichiers modules.tpl : <table style="margin-bottom: 5px;"> <tr> <td colspan="2" class="dispo-position" id="modules_top"> <div class="titre" style="margin-bottom: 0px;"><img src="templates/admin/images/titres/haut.png" alt="Haut" /></div> <!-- BEGIN modules_top --> <?php include($this->this_dir.$this->template_dir.'modules_list.tpl'); ?> <!-- END modules_top --> </td> </tr> <tr> <td class="dispo-position" id="modules_left"> <div class="titre" style="margin-bottom: 0px;"><img src="templates/admin/images/titres/gauche.png" alt="Gauche" /></div> <!-- BEGIN modules_left --> <?php include($this->this_dir.$this->template_dir.'modules_list.tpl'); ?> <!-- END modules_left --> </td> <td class="dispo-position" id="modules_center"> <div class="titre" style="margin-bottom: 0px;"><img src="templates/admin/images/titres/droite.png" alt="Droite" /></div> <!-- BEGIN modules_center --> <?php include($this->this_dir.$this->template_dir.'modules_list.tpl'); ?> <!-- END modules_center --> </td> </tr> <tr> <td colspan="2" class="dispo-position" id="modules_bottom"> <div class="titre" style="margin-bottom: 0px;"><img src="templates/admin/images/titres/bas.png" alt="Bas" /></div> <!-- BEGIN modules_bottom --> <?php include($this->this_dir.$this->template_dir.'modules_list.tpl'); ?> <!-- END modules_bottom --> </td> </tr> </table> Cette partie une fois compilée: <table style="margin-bottom: 5px;"> <tr> <td colspan="2" class="dispo-position" id="modules_top"> <div class="titre" style="margin-bottom: 0px;"><img src="templates/admin/images/titres/haut.png" alt="Haut" /></div> <?php $this->snapshot_push($this->blocks); if(!empty($this->blocks["modules_top"]) ){ foreach($this->blocks["modules_top"] as $g_b_var){ ?> <?php include($this->this_dir.$this->template_dir.'modules_list.tpl'); ?> <?php }} $this->snapshot_pop($g_b_var); ?> </td> </tr> <tr> <td class="dispo-position" id="modules_left"> <div class="titre" style="margin-bottom: 0px;"><img src="templates/admin/images/titres/gauche.png" alt="Gauche" /></div> <?php $this->snapshot_push($this->blocks); if(!empty($this->blocks["modules_left"]) ){ foreach($this->blocks["modules_left"] as $g_b_var){ ?> <?php include($this->this_dir.$this->template_dir.'modules_list.tpl'); ?> <?php }} $this->snapshot_pop($g_b_var); ?> </td> <td class="dispo-position" id="modules_center"> <div class="titre" style="margin-bottom: 0px;"><img src="templates/admin/images/titres/droite.png" alt="Droite" /></div> <?php $this->snapshot_push($this->blocks); if(!empty($this->blocks["modules_center"]) ){ foreach($this->blocks["modules_center"] as $g_b_var){ ?> <?php include($this->this_dir.$this->template_dir.'modules_list.tpl'); ?> <?php }} $this->snapshot_pop($g_b_var); ?> </td> </tr> <tr> <td colspan="2" class="dispo-position" id="modules_bottom"> <div class="titre" style="margin-bottom: 0px;"><img src="templates/admin/images/titres/bas.png" alt="Bas" /></div> <?php $this->snapshot_push($this->blocks); if(!empty($this->blocks["modules_bottom"]) ){ foreach($this->blocks["modules_bottom"] as $g_b_var){ ?><?php }} $this->snapshot_pop($g_b_var); ?> </td> </tr> </table> modules_list.tpl: <table id="module_{$moduleName}-{$moduleId}" class="module"> <tr> <td rowspan="2" style="width: 90px;"><img src="{$moduleIcon}" alt="{$moduleName}" /></td> <td style="vertical-align: bottom; text-align: left; padding-left: 21px;">{$moduleTitle}</td> </tr> <tr> <td style="text-align: left;"> <img src="templates/admin/images/add_small.png" alt="Configurer" style="vertical-align: middle;" /> <a href="admin.php?module={$moduleName}&moduleid={$moduleId}&pageid={$currentPageId}">Configurer</a> <img src="templates/admin/images/remove_small.png" alt="Supprimer" style="vertical-align: middle;" /> <a href="#" onclick="javascript:deleteModule('module_{$moduleName}-{$moduleId}', '{$currentPageId}'); return false;">Supprimer</a> </td> </tr> </table> Et le résultat final tel que affiché par le naviguateur: <table style="margin-bottom: 5px;"> <tr> <td colspan="2" class="dispo-position" id="modules_top"> <div class="titre" style="margin-bottom: 0px;"><img src="templates/admin/images/titres/haut.png" alt="Haut" /></div> <table id="module_{$moduleName}-{$moduleId}" class="module"> <tr> <td rowspan="2" style="width: 90px;"><img src="{$moduleIcon}" alt="{$moduleName}" /></td> <td style="vertical-align: bottom; text-align: left; padding-left: 21px;">{$moduleTitle}</td> </tr> <tr> <td style="text-align: left;"> <img src="templates/admin/images/add_small.png" alt="Configurer" style="vertical-align: middle;" /> <a href="admin.php?module={$moduleName}&moduleid={$moduleId}&pageid={$currentPageId}">Configurer</a> <img src="templates/admin/images/remove_small.png" alt="Supprimer" style="vertical-align: middle;" /> <a href="#" onclick="javascript:deleteModule('module_{$moduleName}-{$moduleId}', '{$currentPageId}'); return false;">Supprimer</a> </td> </tr> </table> </td> </tr> <tr> <td class="dispo-position" id="modules_left"> <div class="titre" style="margin-bottom: 0px;"><img src="templates/admin/images/titres/gauche.png" alt="Gauche" /></div> <table id="module_{$moduleName}-{$moduleId}" class="module"> <tr> <td rowspan="2" style="width: 90px;"><img src="{$moduleIcon}" alt="{$moduleName}" /></td> <td style="vertical-align: bottom; text-align: left; padding-left: 21px;">{$moduleTitle}</td> </tr> <tr> <td style="text-align: left;"> <img src="templates/admin/images/add_small.png" alt="Configurer" style="vertical-align: middle;" /> <a href="admin.php?module={$moduleName}&moduleid={$moduleId}&pageid={$currentPageId}">Configurer</a> <img src="templates/admin/images/remove_small.png" alt="Supprimer" style="vertical-align: middle;" /> <a href="#" onclick="javascript:deleteModule('module_{$moduleName}-{$moduleId}', '{$currentPageId}'); return false;">Supprimer</a> </td> </tr> </table> </td> <td class="dispo-position" id="modules_center"> <div class="titre" style="margin-bottom: 0px;"><img src="templates/admin/images/titres/droite.png" alt="Droite" /></div> <table id="module_{$moduleName}-{$moduleId}" class="module"> <tr> <td rowspan="2" style="width: 90px;"><img src="{$moduleIcon}" alt="{$moduleName}" /></td> <td style="vertical-align: bottom; text-align: left; padding-left: 21px;">{$moduleTitle}</td> </tr> <tr> <td style="text-align: left;"> <img src="templates/admin/images/add_small.png" alt="Configurer" style="vertical-align: middle;" /> <a href="admin.php?module={$moduleName}&moduleid={$moduleId}&pageid={$currentPageId}">Configurer</a> <img src="templates/admin/images/remove_small.png" alt="Supprimer" style="vertical-align: middle;" /> <a href="#" onclick="javascript:deleteModule('module_{$moduleName}-{$moduleId}', '{$currentPageId}'); return false;">Supprimer</a> </td> </tr> </table> </td> </tr> <tr> <td colspan="2" class="dispo-position" id="modules_bottom"> <div class="titre" style="margin-bottom: 0px;"><img src="templates/admin/images/titres/bas.png" alt="Bas" /></div> </td> </tr> </table> Au passage on peut remarquer que la variable {$currentPageId} qui elle n'est pas déclarée dans un bloc est correctement parsée lorsque j'inclus le fichier avec {include} mais qu'elle ne l'est pas quand j'utilise ta technique de <?php include(...); ?>, donc quand on fait ça le fichier n'est pas parsé du tout
|
||||||
Amadeus |
Posté le 11/10/2007 21:53 - # | ||||||
|
Membre 9 messages |
Bon dans le fichier gaga.class.php ligne 202 j'ai remplacé par pour que tout soit parsé en un seul fichier et tout semble marcher correctement, donc à suivre mais pour l'instant il ne semble pas y a avoir de problèmes comme ça
|
||||||
Amadeus |
Posté le 11/10/2007 22:07 - # | ||||||
|
Membre 9 messages |
Et j'en profite pour rajouter (désolé pour le triple poste ^^) que ligne 237 il convient remplacer $key = $this->blocks; $for = $this->blocks[$match1[2]][0]; $search = $match1[2]; par if(array_key_exists($match1[2], $this->blocks)) { $key = $this->blocks; $for = $this->blocks[$match1[2]][0]; $search = $match1[2]; } et ligne 275 il convient de rajouter Sinon PHP affichera un Notice lorsqu'un bloc est vide (premier cas) et lorsque qu'aucune variable n'a été assignée (deuxième cas) EDIT: Arf j'avais pas vu la technique pour les blocs vides ne marche pas, je regarde ça... EDIT: Corrigé (voir début du poste) ^^ Edité par Amadeus le 11/10/2007 22:53 |
||||||
Amadeus |
Posté le 11/10/2007 22:52 - # | ||||||
|
Membre 9 messages |
Bon je continue avec mon histoire: Maintenant j'essaye de faire une inclusion dynamique avec une variable assignée dans un bloc: <!-- BEGIN modules_top --> {include file="$includeFile"} <!-- END modules_top --> Et bien sûr, ça ne marche pas! Donc quelqu'un aurait-il une solution pour faire ceci? Merci ^^ |
||||||
gaga26 |
Posté le 12/10/2007 20:40 - # | ||||||
|
741 messages 18 ans |
Ce n'était pas possible avant la dernière version, mais maintenant ça devrait être bon. | ||||||
Amadeus |
Posté le 12/10/2007 20:53 - # | ||||||
|
Membre 9 messages |
C'est à dire? J'ai la 3.3 et ça ne marche pas EDIT: Apparemment ça marche juste quand la variable est assignée avec assign(), pas quand c'est dans un bloc avec assign_block(). Edité par Amadeus le 12/10/2007 20:54 |
||||||
gaga26 |
Posté le 12/10/2007 21:08 - # | ||||||
|
741 messages 18 ans |
Citation : Amadeus EDIT: Apparemment ça marche juste quand la variable est assignée avec assign(), pas quand c'est dans un bloc avec assign_block(). Ca doit être ça. |
||||||
Amadeus |
Posté le 13/10/2007 21:30 - # | ||||||
|
Membre 9 messages |
C'est bon problème résolu!
|
||||||
Ze Thriller |
Posté le 24/10/2007 12:56 - # | ||||||
|
Membre 105 messages 24 ans |
On ne le dira jamais assez: Les includes à répétition, en particulier dans les boucles, sont une atteinte monstrueuse à la stabilité d'un script (cad fort risque de plantage) et affecte fortement(en diminution ) la vitesse de traitement/d'affichage d'une page.Donc: Includes à répétition dans une boucle: à bannir. Préfère la structure blocs/sous-blocs, d'autant plus que désormais le niveau de blocs est illimité ^^ |
||||||
Page : 1 |
|||||||
Vous devez être inscrit et connecté pour pouvoir écrire dans les forums
Retour au forum Variables, à la liste des forums, ou au haut de page


