
Home
» Talus' Works » Talus' TPL » Général & Support » Problème avec une boucle foreach » Lecture du Sujet » Page 1 | Forum Fermé - Sujet Fermé |
|
|
|
|
Bonjour, Tout d'abord bravo pour le moteur de template. Je le trouve très facile d'accès alors que c'est le premier moteur que j'utilise et que je ne suis pas un pro du php (genre plutôt programmeur du dimanche ;) ) Enfin quoiqu'il en soit j'ai quand même un souci. Voici l'erreur que je rencontre:
Code
Notice: Undefined index: COMMENTAIRES in C:\wamp\www\fj\cache\menu-droite.html.php on line 16
Warning: Invalid argument supplied for foreach() in C:\wamp\www\fj\cache\menu-droite.html.php on line 16
Et les codes associés (sachant que j'essaie d'utiliser une architecture type MVC). La vue (qui est censée m'afficher les derniers commentaires postés sur mon site (auteur et article concerné)):
Code
<foreach ary="{$COMMENTAIRES}">
<li><a class="menud" href="{__RACINE__}article-{VALUE,COMMENTAIRES['id_article']}-{VALUE,COMMENTAIRES['titre_url']}.html#{VALUE,COMMENTAIRES['id']}">{VALUE,COMMENTAIRES['auteur']}</a> sur <a class="menud" href="{__RACINE__}article-{VALUE,COMMENTAIRES['id_article']}-{VALUE,COMMENTAIRES['titre_url']}.html">{VALUE,COMMENTAIRES['titre']}</a></li>
</foreach>
Le controleur (code entier):
Code
include ('modeles/menu-droite.php');
$limite = 3;
$articles = recuperer_articles($limite);
$commentaires = recuperer_commentaires($limite);
$tpl->set('COMMENTAIRES', $commentaires);
$tpl->set('ARTICLES', $articles);
$tpl->pparse('menu-droite.html');
Le modèle:
Code
function recuperer_commentaires($limite)
{
include('fonctions/connect.php');
$commentaires = array();
$req = mysql_query("SELECT fj_commentaires.id, fj_commentaires.id_article, fj_commentaires.auteur, fj_commentaires.date_ajout, fj_articles.titre_url
FROM fj_commentaires
LEFT JOIN fj_articles ON fj_commentaires.id_article = fj_articles.id
ORDER BY date_ajout DESC LIMIT 0,'".$limite."'") or die(mysql_error());
while($data = mysql_fetch_assoc($req))
{
$commentaires[] = $data;
}
mysql_close();
return $commentaires;
}
Là où le bas blesse c'est que j'utilise un code quasi identique pour afficher les derniers articles postés( boucle foreach ary="{$ARTICLES}" pour la vue, seule la requête sql du modèle change). J'ai testé la requête sql sous phpmyadmin et elle fonctionne très bien donc a priori l'erreur ne provient pas de là. Merci d'avance |
|
|
|
|
|
Salut, Déjà, utilise $tpl->parse() et non pparse() (pparse() te permet de récupérer le contenu une fois parsé, et non pas de l'afficher... A moins de un echo derrière). Ensuite, montre moi le code de C:\wamp\www\fj\cache\menu-droite.html.php, aux alentours de la ligne 16, pour que je puisse voir si il y a un quelconque problème. Et enfin, fais un print_r() sur $commentaires, pour voir si le résultat retourné est sous une bonne forme ? Dev' de Talus' Works |
|
|
|
|
Salut, J'ai remplacé pparse() par parse() et j'obtiens une erreur supplémentaire (le même type) pour le tableau articles cette fois. Au passage le fichier menu-droite.php est inclus dans un autre fichier parsé avec parse() donc je pensais utilisé la bonne fonction. Sinon voici le code de menu-droite.html.php (j'ai coupé une partie du code mais le reste n'est que du html pur)
Code
<ul>
<?php foreach ($tpl->vars['ARTICLES'] as $__tpl_foreach_key['ARTICLES'] => $__tpl_foreach_value['ARTICLES']) : ?>
<li><a class="menud" href="<?php echo RACINE; ?>article-<?php echo $__tpl_foreach_value['ARTICLES']['id']; ?>-<?php echo $__tpl_foreach_value['ARTICLES']['titre_url']; ?>.html"><?php echo $__tpl_foreach_value['ARTICLES']['titre']; ?></a></li>
<?php endforeach; ?>
</ul>
<h3>Derniers commentaires</h3>
<ul>
<?php foreach ($tpl->vars['COMMENTAIRES'] as $__tpl_foreach_key['COMMENTAIRES'] => $__tpl_foreach_value['COMMENTAIRES']) : ?>
<li><a class="menud" href="<?php echo RACINE; ?>article-<?php echo $__tpl_foreach_value['COMMENTAIRES']['id_article']; ?>-<?php echo $__tpl_foreach_value['COMMENTAIRES']['titre_url']; ?>.html#<?php echo $__tpl_foreach_value['COMMENTAIRES']['id']; ?>"><?php echo $__tpl_foreach_value['COMMENTAIRES']['auteur']; ?></a> sur <a class="menud" href="<?php echo RACINE; ?>article-<?php echo $__tpl_foreach_value['COMMENTAIRES']['id_article']; ?>-<?php echo $__tpl_foreach_value['COMMENTAIRES']['titre_url']; ?>.html"><?php echo $__tpl_foreach_value['COMMENTAIRES']['titre']; ?></a></li>
<?php endforeach; ?>
</ul>
Concernant le print_r j'ai bien déjà essayé de l'utiliser mais elle ne me retourne rien (rien ne s'affiche). C'est plutôt étrange puisque je m'en étais déjà servi avec succès sur une autre partie du site. Merci de ton aide |
|
|
|
|
|
Alors enleve touttes instructions TPL, et fais donc les print_r. Donc en fait, il y a juste un autre tpl parsé pour menu-droite ? Ca ne devrait pas vraiment poser de soucis, pourtant... Ce que je vais te demander, c'est de faire, une fois que tu as fait les $tpl->set(), de faire un print_r sur $tpl->vars... Et dis moi ce que ca fait ? Dev' de Talus' Works |
|
|
|
|
Bon et bien là franchement je n'y comprend rien. Que je fasse un print_r dans menu-droite.php ou même un bête echo d'une chaine de caractère rien ne s'affiche. En fait pour t'expliquer la situation un peu plus précisément voilà comment la page est construite : j'ai une page index.php qui est parsé en index.html. Le fichier index.html inclus (avec <include tpl=""/>) le fichier menu-droite.html, fichier parsé à partir de menu-droite.php Je ne sais si c'est lié mais en tout cas comme je l'ai déjà précisé rien ne s'affiche quand je fais des echo ou print_r dans menu-droite.php Aurais-tu une idée? |
|
|
|
|
|
En fait, soit tu fais un include tpl dans ton index, et dans ce cas, dans ton menu-droite.php, tu ne fais pas de parsage (juste allocations de variables, blocs, etc), soit tu ne fais pas d'incluse... Et alors tu fais un parsage dans le php. Aux premières lignes de ton code (première instruction qui puisse être executée), fais donc :
Code PHP
<?php
Et dis moi après ce que ca peut faire ? Dev' de Talus' Works |
|
|
|
|
Désolé mais ça n'affiche rien de plus, toujours les mêmes messages... |
|
|
|
|
|
Fais ce que je t'ai dit, et enleve (ou commente, meme chose :p) les $tpl->parse() pour voir ? C'est juste voir si il y a des messages d'erreurs, et le contenu de $tpl->vars... Dev' de Talus' Works |
|
|
|
|
Bon après quelques tests j'ai eu de nouveaux éléments. Le parsage du premier s'effectue correctement, tout fonctionne bien et si j'effectue un print_r($tpl->vars) des variables de ce premier template (à la fin du fichier index.php) les infos qui s'affichent sont correctes. |
|
|
|
|
|
Ah bah ca, ca releve plus du PHP que du moteur TPL alors... Dev' de Talus' Works |
|
|
|
|
J'ai finalement réussi à régler le problème. Par contre j'ai un autre souci. Jusqu'à maintenant je testais mon site en local avec wamp mais là j'ai voulu le mettre en ligne et ô misère:
Code
Parse error: syntax error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in /xxx/xxx/xxx/x/x/domaine/talus_tpl.php on line 36
Je précise que le site est hébergée chez free. Est-ce que ça pourrait être la cause de l'erreur? (Free interdit l'accès à certaines fonctions php). Bon bah c'est Free le souci: leurs serveurs sont apparemment encore en php 4 Dernière édition le 15/06/2009, à 17:57, par Ben0 |
|
|
|
|
|
Bah t'as la réponse dans le problème : Need PHP5. Faut le mettre en quel taille our ce que visible ? Pour mettre PHP5 chez Free, il y a une directive htaccess. Dev' de Talus' Works |
| Forum Fermé - Sujet Fermé |