Bonjour,
j'ai un souci de conception que je n'arrive pas à résoudre.
J'ai dans un fichier php y :
1 2 3 4 5 6 7 8
| define('THEME', 'boy');
$css = css(THEME);
$header = inc_file('header.php');
$nav_bar = inc_file('nav_bar.php');
$side = inc_file('side.php');
$footer = inc_file('footer.php');
require(VIEW.'accueil_nli.php'); |
ici, le contenu des fichiers est stoqué dans des variables grace à une fonction inc_file() décrite plus bas.
Ces fichiers on la même forme que celui inclus par le require() (qui est le principale), le voici (appelons-le x):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| <?php
$page = <<<HTML
{$header}
<body>
{$nav_bar}
<div id="global">
{$side}
<div id="page" class="arrondi1">
<h1>
<a href="{$configROOT}">
<img src="img/tua.png" />
</a>
</h1>
<div id="contenu" class="arrondi2">
<h2>Bienvenue</h2>
<p>blahblahblah
</p>
<h2>But</h2>
<p>
blahblahblah
</p>
</div>
</div>
</div>
{$footer}
HTML;
echo $page;
?> |
fonction inc_file() :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| function inc_file($file, $mode="include") {
$file = VIEW.$file;
ob_start();
if($mode == "include") {
include($file);
}
elseif ($mode == "require") {
require($file);
}
else {
ob_end_clean();
return false;
}
$buffer = ob_get_contents();
ob_end_clean();
return $buffer;
} |
Lorsque que j'utilise ma fonction inc_file() sur un fichier et qu'une variable doit etre interprété par php dans ce fichier. La variable n'est pas interpréter.
Sachant que les fichiers stocké dans des variables avec cette fonctions sont sont affiché grace a un appel a leur variable correspondante dans le fichier avec le heredoc principal, le fichier x.
C'est un problème d'interpretation de variable de heredoc en cascade.
Exemple:
Dans x, j'inclus le contenu de header.php dans la variable $header (variable déclarer dans y). Le contenu de $header est bien affiché.
Mais dans header.php qui utilise aussi les heredoc, je veux inclure le contenu de $css (déclaré dans y) mais cela ne marche pas.
Cela ne marche que si $css est déclaré avant le heredoc du fichier header.php, mais je ne veux pas faire ça.
header.php :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| <?php
$page = <<<HTML
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<style type="text/css">
<!--
{$css}
-->
</style>
</head>
<body>
HTML;
echo $page;
?> |
j'ai comme erreur
Notice: Undefined variable: css in I:\easyphp\www\tua\pages\header.php on line 23
et aucun thème d'afficher forcément...
Je ne saisie pas le problème car le fichier est interpréter au moment ou j'utilise inc_file(), les variables sont donc supposé être déjà interprété au moment du stockage dans la variable. Hors ce n'est pas le cas :s
Auriez vous une solution ? J'èspére avoir été clair dans mes explications
Partager