Je suis face à une question très philosophique concernant PHP...
comment faire ce-ci :
$$page[$i]
? ^^Ouais bon, je sais ça crains comme syntaxe. Voici d'ou vient mon problème :
for ($i=0; $i<=$c; $i++){
$tpl->set_var('index', $index[$i]);
}
Sauf que.... suivant dans quel contexte ce code va s'exécuter, ça ne sera pas toujours "index" le nom de la page, et pas toujours "index" le nom du tableau. Et donc, le nom de cette page et le nom de ce tableau étant les mêmes, et variant de la même façon dans le même contexte, j'ai pensé stoker ce nom dans une variable $page.... Ce qui donne :
$$page[$i]
Évidement ça ne marche pas.
Vos conseils avisés sont les bienvenus, merci.
# variables variables
Posté par andeus . Évalué à 2.
${$page}[$i]
Ou comme ça, si $$page est une globale:
$GLOBALS[$page][$i]
Mais il y a probablement une meilleur solution que les variables variables ;)
# utiliser un tableau
Posté par SQP . Évalué à 2.
$tab = array('index' => $index);
ce qui permet d'appeler
$tpl->set_var($page, $tab[$page][$i]);
# ben
Posté par Éric (site web personnel) . Évalué à 2.
Après peut être que la priorité n'est pas celle que tu souhaites.
Suivant ce que tu veux faire tu peux :
* le [$i] s'adresse à $page :
${$page[$i]} ou aussi $tmp=$page[$i]; $$tmp ;
* le [$i] s'adresse à $$page :
${$page}[$i] ou aussi $tmp=$$page; $tmp[$i] ;
Maintenant 9 cas sur 10 où j'ai vu des variables variables, c'était une erreur. Tu as quasiment toujours intérêt à utiliser une autre structure.
[^] # Re: ben
Posté par Le Gall Sébastien . Évalué à 1.
Bon, je viens de faire le changement en ${$page}[$i]. Ca marche...
Qu'est ce qu'il faut que j'utilise comme structure? Le tableau ne me convient pas parce que je veux un truc dynamique. Pour l'instant il y disons 10 pages... ce qui voudrait dire 10 entrées dans le tableau. Mais après? Chaque fois que je vais créer une page, je vais devoir modifier mon tableau... Ca ne me convient pas, je suis faignant. :-)
[^] # Re: ben
Posté par Éric (site web personnel) . Évalué à 3.
Mais déjà nommer des variables avec un nom qui dépend d'une action, d'une entrée utilisateur ou de quoi que ce soit de non fixe, c'est une mauvaise idée.
Là où tu es capable de créer $index tu es capable de créer $page['index'] non ?
C'est même presque du rechercher/remplacer
Je vois pas bien où créer 10 variables (ou plus) serait "plus simple" que créer 10 entrées (ou plus) dans un tableau, même pour quelqu'un de très fénéant
je continue de penser que tu prend ton problème par le mauvais bout (mais comme je ne comprend pas ton problème fonctionnel, je serai bien à mal de te proposer autre chose)
[^] # Re: ben
Posté par Le Gall Sébastien . Évalué à 1.
Index.php :
include('./includes/functions.php');
print_text('index', 'index.html');
functions.php :
function print_text($page_name, $page){
global $tpl;
//on inclue les templates
include('./includes/template.inc');
$tpl = new Template('./template/'.$_SESSION['style'].'/');
$tpl->set_file('header', 'header.html');
$tpl->set_var(array(
'header_title' => 'WebGiftList',
'title' => 'Listes de cadeaux',
'style' => $_SESSION['style'],
'compteur' => $meter));
$header = $tpl->parse('result','header');
$tpl->set_file($page_name, $page);
$tpl->set_var('header', $header);
include('includes/config.inc.php');
//Inclusion de la page contenant les textes
include('./lang/'.$LANG.'/'.$LANG.'_'.$page_name.'.php');
$c = count(${$page_name});
for ($i=0; $i<=$c; $i++){
$tpl->set_var($page_name.'_'.$i, ${$page_name}[$i]);
}
}
index.html:
{index_0}
Voila ! J'espère que ça suffira pour comprendre le problème...
En tout cas, merci de votre aide.
[^] # Re: ben
Posté par Mildred (site web personnel) . Évalué à 1.
$c = count(${$page_name});
C'est équivalent (lors de l'appel de la fonction) à:
$c = count($index);
parce que $page_name="index"; Mais d'où sort la variable $index ? Elle n'a été définie nulle part, ce n'est pas une variable locale et tu ne peux pas y accéder comme variable globale car elle n'est pas référencée dans une instruction 'global' ?
Sinon, si tu veux bien programmer en PHP, je te conseille de systématiquement faire :
error_reporting(E_ALL);
Cela va afficher toutes les erreurs, même les erreurs E_NOTICE. Et finalement le code sera beaucoup plus propre (devrait, en PHP on n'est jamais sûr).
[^] # Re: ben
Posté par Le Gall Sébastien . Évalué à 1.
Et je n'ai pas de variable $index dans mon code.
dans l'exemple, j'appelle la fonction print_text() avec l'argument 'index'. Mais à un autre moment dans le code, je vais l'appeler avec l'argument 'addlist'.... C'est pour ça qu'il faut que le tout soit dynamique et que je ne peux utiliser une variable $index. Parce que au prochain appelle de la fonction, ma variable ne devras plus être $index, mais $addlist.
[^] # Re: ben
Posté par fabien Granjon . Évalué à 1.
mais ${$page_name} est sensé repésenté un tableau, tableau qui est déclaré dans ton fichier lang .
J'imagine tu veux remplacer dans ton templates tous les champs:
champ_1 par contenu de ton tableau index1
champ_2 par contenu de ton tableau index2
Je ne comprends pas pourquoi tu ne donne pas le même nom (eg: $lang) à tes tableaux (indiqué dans tes fichiers de langues).
Qui du coup te simplifirai ton code:
$tpl->set_var($page_name.'_'.$i, $lang[$i]);
sachant que :
fr_index.php contiendrai
$lang[0]="champ 1";
$lang[1]="champ 2";
etc...
et us_index.php:
$lang[0]="field 1";
$lang[1]="field 2";
etc..
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.