<!--BLOCK_TEST--> {TEST.VAR1} <!--BLOCK_TEST2--> {TEST2.VAR2} <!--/BLOCK_TEST2--> <!--/BLOCK_TEST-->
<?php include('template.class.php'); $tpl = new Template('./'); $file = $tpl->open('index.html'); for ($i = 0; $i < 2; $i++) { $tpl->assign_block_vars($file, 'TEST', array( 'VAR1' => $i )); for ($j = 0; $j < 2; $j++) { $tpl->assign_block_vars($file, 'TEST2', array( 'VAR2' => $j )); } } $tpl->display($file); ?>
0 0 1 1
0 0 1 1 <!--/BLOCK_TEST-->
un exemple tout con :Un wèè boff !
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionJe te file un fichier ZIP contenant le fichier PHP et HTML
En faisant cela je peux dans une boucle appeler de nouveau assign_block_vars pour parser de nouveau le bloc.
Je ne comprend pas ta phrase : Je n'ai rien reçu et je préfère pas. La communauté doit pouvoir visualiser les avancés etc.Je ne fais pas de l'assistanat mais je propose mon aide bénévolement et sans obligation, quand tu me dis tiens le zip de mes fichiers alors que je ne l'ai pas demandé(sisi rappel toi je n'est demandé que le résultat affiché) et alors quand toute franchise je n'ai pas fraîchement envie(et surtout par manque de temps) de me lancer dans le décryptage de tes codes(d'autant que ceux-ci n'ont pas l'air très parlantes - dans la logique), j'ai l'impression que tu me force la main même si ce n'est peut être pas le cas. Voilà c'est dit !
Que veux-tu dire par là ? Le ZIP m'évite de devoir copier/coller tout le code des fichiers concernés, donc je ne vois pas où la communauté peut pas consulter puisque je fournis le lien.
<?php class Template { private $contentfile; //Contenu des fichiers ouverts private $parsecode = array(); private $fileName; public function __construct($contentfile, $file) { $this->filename = $file; $this->contentfile=$contentfile; } function assign_block_vars($blockName, $vars) { if(empty($array)) return false; $tempStock = ''; if(preg_match('#\<!--BLOCK_'.$blockName.'--\>(.+)\<!--/BLOCK_'.$blockName.'--\>#sU', $this->contentfile, $matches) ) foreach($vars as $key => $value) { $tempStock .= preg_replace('/\{'.$blockName.'.'.$key.'\}/', $value, $matches[1]); } $tempStock = preg_replace('#\<!--BLOCK_(.+)--\>(.+)\<!--/BLOCK_(.+)--\>#sU', '', $tempStock); return $this->parsecode[$this->filename][] = $tempStock; } function display($fileName) { echo implode('',$this->parsecode[$fileName]); } } $titles = array('Titre A', 'Titre B', 'Titre C'); $articles = array(array('art1.1', 'art1.2', 'art1.3'), array('art2.1', 'art2.2', 'art2.3'), array('art3.1', 'art3.2', 'art3.3') ); $contenu_recuperer = ' <!--BLOCK_A--> {A.title} <!--BLOCK_B--> [ {B.art}] <!--/BLOCK_B--> <!--/BLOCK_A--> '; $tpl = new Template($contenu_recuperer, 'index.tpl'); for ($i = 0; $i < sizeof($titles); $i++) { $tpl->assign_block_vars('A', array('title' => strval($titles[$i]) )); for ($j=0; $j < sizeof($articles); $j++) $tpl->assign_block_vars('B', array('art' => strval($articles[$i][$j]) )); } $tpl->display('index.tpl'); ?>
J'ai un bloc qui est le type de menu avec son nom (dans ce cas là il contiendra juste des liens), le second bloc qui est dedans c'est la liste des liens du menu. Au lieu de mettre les liens du menu 1 dans le menu 1 et du 2 dans le 2, il me met ceux du 1 et du 2 dans le 1 et le 2, et c'est là où je ne comprend pas.
Menu acceuil
-> Lien Mon compte
-> Lien Mes sources
Menu codes
-> Lien Tous les codes
-> Lien Ajouter un code
Menu acceuil
-> Lien Mon compte
-> Lien Mes sources
-> Lien Tous les codes
-> Lien Ajouter un code
Menu codes
-> Lien Mon compte
-> Lien Mes sources
-> Lien Tous les codes
-> Lien Ajouter un code
<?php $filename = $tpl->open('menu.html'); $blockquery = $sql->query('SELECT `id`,`name` FROM `'.TABLE_BLOCK.'` ORDER BY `id` ASC'); while ( $resultblock = $sql->fetch_array($blockquery) ) { $tpl->assign_block_vars($filename, 'SECTION', array( 'DB_NAME' => $resultblock['name'] ) ); $contentquery = $sql->query('SELECT * FROM `'.TABLE_MENU.'` WHERE `block`='.$resultblock['id'].' ORDER BY `id` ASC'); while ( $resultcontent = $sql->fetch_array($contentquery) ) { $tpl->assign_block_vars($filename, 'CONTENT', array( 'DB_URL' => $resultcontent['url'], 'DB_NAME' => $resultcontent['name'] ) ); } } $tpl->display($filename); ?>
CREATE TABLE IF NOT EXISTS `ChrisSoftware_block` ( `id` TINYINT(3) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, `name` VARCHAR(50) NOT NULL, `description` VARCHAR(255) NULL, `module` TINYINT(3) UNSIGNED NULL ) ENGINE = MYISAM COMMENT "Blocs de menus/modules"; CREATE TABLE IF NOT EXISTS `ChrisSoftware_menu` ( `id` SMALLINT(5) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, `block` TINYINT(3) UNSIGNED NOT NULL, `name` VARCHAR(50) NULL, `url` VARCHAR(255) NULL, INDEX(`block`) ) ENGINE = MYISAM COMMENT "Menu";
$contentquery = $sql->query('SELECT * FROM `'.TABLE_MENU.'` WHERE `block`='.$resultblock['id'].' ORDER BY `id` ASC');
$contentquery = $sql->query('SELECT * FROM `'.TABLE_MENU.'` WHERE `block`='.$resultblock['module'].' ORDER BY `id` ASC');
Menu acceuil
-> Lien Mon compte
-> Lien Mes sources
Menu codes
-> Lien Tous les codes
-> Lien Ajouter un code
Donc le problème ne vient pas de la requête. C'est bien le moteur, car si je sépare les deux blocs au lieu qu'ils soient imbriqués, il n'y a aucun soucis, c'est donc bien le moteur de template qui a un soucis.