Système template basique : problème avec une include...

Mammouth du PHP | 531 Messages

15 juin 2008, 13:23

Bonjour,

Suite à un de mes topics du forum j'ai adopté un petit système de template maison simpliste mais suffisant pour l'ampleur de mon projet.

Seulement j'ai un petit soucis quand il s'agit de faire une include.
Je m'explique

Tout dabord voilà a quoi ressemble mon fichier à inclure. Sachant qu'il est provisoire en ce qui conçerne la boucle et l'affichage direct avec echo. Mais en gros se fichier doit exécuter du code avant de l'afficher :
<?php
$req = new mysql( $ServeurSql, $LoginSql, $PasseSql, $BaseSql );
$res = $req -> ExecReq( "SELECT * FROM cms_menu ORDER BY position" );
while( $val = $req -> ArraySuiv( $res ) )
{
	echo $val['nom'];
}
?>
Ensuite je cherche donc à l'appeler lorsque je rencontre la chaine %%menu%% dans le fichier que je parcours. Je vais coller les 2 méthodes que j'ai essayé. Je dois être sur une mauvaise piste car aucune des deux ne donne le résultat voulu :


$html = LireFichier( REP_PAGES.$page.'.htm' );
### On parse
// Tableau des éléments a remplacer
$balise[] = '%%NOM_SITE%%';
$balise[] = '%%DESC_SITE%%';
$balise[] = '%%MOTSCLES_SITE%%';
$balise[] = '%%THEME_SITE%%';
$balise[] = '%%MENU_SITE%%'; // ICI
// Eléments de remplacement
$remplacement[] = NOM_SITE;
$remplacement[] = DESC_SITE;
$remplacement[] = MOTSCLES_SITE;
$remplacement[] = REP_THEMES.THEME_SITE;
$remplacement[] = include REP_MODULES.'menu.php'; // ICI
// Remplacement
$html = str_replace( $balise, $remplacement, $html );
### On affiche la page
echo $html;
Cette première méthode marcherais presque, le code est exécuté. Le problème c'est que l'unclude se fait en tout début de page et apparait même avant le header de ma page au lieu de se faire à l'endroit ou la balise %%MENU_SITE%% se trouve dans le fichier que je parse...



Voici la seconde que j'ai essayé par dépis. Celle-ci évidement n'exécute pas mon code mais se contente de le lire, logique en fait...
$remplacement[] = LireFichier( REP_MODULES.'menu.php' );


Voilà
Si quelqun à une idée et peut m'expliquer pourquoi dans la première méthode l'include ne se fait pas à l'endroit voulu... j'ai du mal à comprendre. Quelquechose cloche dans mon raisonnement :?


Edit : la fonction LireFichier se contente simplement de parcourir un fichier.

Eléphanteau du PHP | 34 Messages

16 juin 2008, 15:11

bonjour,

dans ton fichier a inclure, met tout ton texte dans une fonction :
<?php

function posMenu() {
  $req = new mysql( $ServeurSql, $LoginSql, $PasseSql, $BaseSql );
  $res = $req -> ExecReq( "SELECT * FROM cms_menu ORDER BY position" );
  while( $val = $req -> ArraySuiv( $res ) )
  {
    echo $val['nom'];
  }
}
?>
ensuite dans l'autre code, il suffit d'exécuter la fonction et de déplacer l'include en début de fichier :
include REP_MODULES.'menu.php';

$html = LireFichier( REP_PAGES.$page.'.htm' );
### On parse
// Tableau des éléments a remplacer
$balise[] = '%%NOM_SITE%%';
$balise[] = '%%DESC_SITE%%';
$balise[] = '%%MOTSCLES_SITE%%';
$balise[] = '%%THEME_SITE%%';
$balise[] = '%%MENU_SITE%%'; // ICI
// Eléments de remplacement
$remplacement[] = NOM_SITE;
$remplacement[] = DESC_SITE;
$remplacement[] = MOTSCLES_SITE;
$remplacement[] = REP_THEMES.THEME_SITE;
$remplacement[] = posMenu(); // ICI
// Remplacement
$html = str_replace( $balise, $remplacement, $html );
### On affiche la page
echo $html;
?>
essaye pour voir "mon canard" et dis moi :)
Pouap !

Mammouth du PHP | 531 Messages

16 juin 2008, 15:47

Salut :D
J'ai eu une lueur d'espoir en voyant ton code mais non, le menu s'affiche toujours pas au bon endroit

EDIT : Pour que ça marche il faut juste raoujouter un return dans la fonction.
Merci pour ton aide c'est tout bon :D

Eléphanteau du PHP | 34 Messages

16 juin 2008, 16:45

arf, oui bien sur :) j'ai pas fait gaffe

Bien vu !

a bientôt
Pouap !