Afficher une boucle dans une autre avec systeme de templat

Petit nouveau ! | 3 Messages

02 août 2011, 00:39

bonjour
j'essaye de puis une semaine d'afficher une boucle a l'intérieur d'une autre boucle mais hélas je ne parviens pas , j'expose donc mon problème ici

j'ai deux table sql :
une pour le statut de l'utilisateur
et l'autre pour les commentaires de ce statut

j'aimerai les afficher
pour celle qui contiens les statuts je l'affiche normal aucun problème , par-contre mon problème est dans la deuxième boucle quand j'essaye d'afficher les commentaires lié au statut ( table statut) , la j'obtiens qu'un seul commentaire hor yen a 2 dans la table,
je précise que le code html et php sont dans deux pages différentes ( templat )
voici mon code php
		if ($g['options']['videogallery'] == "Y" and $html->blockexists("statut"))
		{
			DB::query("SELECT * FROM blog_msg ORDER BY id DESC LIMIT 10");	
			while ($statut = DB::fetch_row())
			{ 
				$html->setvar("s_user_id", $statut['user_id']);
				$html->setvar("s_dt", $statut['dt']);
				$html->setvar("s_subject", $statut['subject']);
				$html->setvar("s_msg", $statut['msg']);
				
// debut de ma 2eme boucle			
                     DB::query("SELECT * FROM blog_comment WHERE msg_id=" . $statut['id'] . " ORDER BY id DESC LIMIT 10", 2);
                     $comment = DB::fetch_row(2);				
			        if($comment['msg_id'] == $statut['id'])
                    {
				             while ($comment = DB::fetch_row(2))
				             {										
				             $html->setvar("c_comment", $comment['comment']);
		                     $html->parse("statut_comment", true);		
				             }
			        }
			        else $html->setblockvar("statut_comment", "");
// fin de ma 2 eme boucle 
								
				$html->parse("statut_item", true);
            }
			$html->parse("statut", true);
		}
et voici mon code html
<!-- begin_statut -->
<ul id="index-personal-stat" style="clear:both;">		
<!-- begin_statut_item -->
<div style="padding:5px; border:1px solid #E0E0E0; margin:2px">
<b>Statut :</b> {s_subject}<br>
</div>
<!-- begin_statut_comment -->
<div style="padding:5px; border:1px solid #E0E0E0; margin:2px 2px 2px 50px;background:#efefef;">
 {c_comment}
</div>
<!-- end_statut_comment -->
<br>
<!-- end_statut_item -->
</ul>
<!-- end_statut -->
le code tel qu'il est affiche les statuts correctement mais pour les commentaire il affiche que le premier et c'est la le problème j'aimerai qu'il affiche tout les commentaire lié au statut
voici mon site en construction la page concerné est l'accueil du site index.php:
http://idurar.fr/index.php
merci pour votre aide

ViPHP
xTG
ViPHP | 7331 Messages

02 août 2011, 08:18

C'est normal, ton système de template doit remplacer aussitôt le token.
Donc la seconde fois que tu passes dans ton while il n'y a plus de token correspondant à c_comment.
Il faut que tu passes dans c_comment un tableau contenant tous les commentaires et non un par un.

Petit nouveau ! | 3 Messages

02 août 2011, 16:59

bonjour xTG
j'ai essayer avec un tableau mais le résultat est toujours le même , la boucle ne fonction pas elle m'affiche que le dernier commentaire , par-contre quand je supprime la condition (le if) la il m'affiche bien tous les commentaires mais hélas il répète les commentaires sur tout les statuts même sur les statut qui n'ont pas de commentaire , donc la boucle fonction il reste a rajouter un if quelques part pour afficher que les commentaire lié
voici le code sans le if
		if ($g['options']['videogallery'] == "Y" and $html->blockexists("statut"))
		{
			DB::query("SELECT * FROM blog_msg ORDER BY id DESC LIMIT 10");

			while ($statut = DB::fetch_row())
			{ 
				$html->setvar("s_user_id", $statut['user_id']);
				$html->setvar("s_dt", $statut['dt']);
				$html->setvar("s_subject", $statut['subject']);
				$html->setvar("s_msg", $statut['msg']);
				
// debut de ma 2eme boucle			
                    $retour = mysql_query("SELECT * FROM blog_comment WHERE msg_id=" . $statut['id'] . " ORDER BY id DESC LIMIT 10");				
				     while ($comment = mysql_fetch_array($retour))
				    {
				             $html->setvar("c_comment", $comment['comment']);
		                     $html->parse("statut_comment", true);						 
					}		
 //fin de ma 2 eme boucle 
							
				$html->parse("statut_item", true);
           }
			$html->parse("statut", true);
		}
 

ViPHP
xTG
ViPHP | 7331 Messages

02 août 2011, 17:04

Question... Dans la solution où tu envoies un tableau, tu le mets où ton parse() ?

Petit nouveau ! | 3 Messages

02 août 2011, 17:14

le parse des commentaire est la
$html->parse("statut_comment", true); //qui se trouve a l'intérieur de la 2ème boucle et qui correspond à :
<!-- begin_statut_comment -->
<!-- end_statut_comment -->

et la ligne :
$html->setvar("c_comment", $comment['comment']);
correspond a la colonne comment de la base de donné que j'affiche dans l'html comme ceci
{c_comment}

la si tu regard le résultat sur http://idurar.fr/index.php on voi bien la boucle fonctionné mais hélas il répète les résultat ce qui est normal du fait que la boucle elle même est a l'intérieur d'une autre il faut donc un if quelques part