lorem_ipsum Posté 10 Avril 2009 Posté 10 Avril 2009 Bonjour à tous, j'essaye de créer du xml via php, jusque là tout va bien, le plus dur est de créer une structure a mon xml du genre: rubrique1 lien1 lien2 lien3 /rubrique1 rubrique2 lien1 lien2 lien3 /rubrique2 ...... Le resultat que j'obtiens actuelement est: rubrique1 lien1 /rubrique1 rubrique1 lien2 /rubrique1 ...... Voici mon code php require_once('config.php');require_once(WB_PATH.'/framework/class.frontend.php');$query = 'SELECT * FROM `'.TABLE_PREFIX.'mod_bookmarks_links` WHERE active=1 AND '.TABLE_PREFIX.'mod_bookmarks_links.page_id=7 ORDER BY '.TABLE_PREFIX.'mod_bookmarks_links.link_id DESC LIMIT 0 , 10';$result = $database->query($query);echo '<?xml version="1.0" encoding="UTF-8"?>';echo '<partners>';while($item = $result->fetchRow($result)) { echo '<rubrique group="'.$item['group_id'].'"> <element> <info picture="'.$item['picture'].'" name="'.$item['title'].'" link="'.$item['url'].'" /> <texte><![CDATA['.$item['description'].']]></texte> <texte><![CDATA['.$item['aboutbm'].']]></texte> </element> </rubrique>'; } echo'</partners>'; En gros je souhaiterai avoir une rubrique, suivi de tous ces petits puis fin de rubrique et hop j'enchaine la rubrique suivante avec tous ces petits dedans etc...etc.... Je suppose qu'il faut utiliser les boucles récursive, mais mon niveau php est trop bas pour piger leur logique est algo. =( Merci d'avance, pour le coup de pouce.
cyberlaura Posté 10 Avril 2009 Posté 10 Avril 2009 Bonsoir, je suppose que tu changes de rubrique lorsque tu changes de $item['group_id'] ? Dans ce cas, il ne faudrait afficher <element></element> qu'à la modification de cette valeur.
lorem_ipsum Posté 10 Avril 2009 Auteur Posté 10 Avril 2009 Je pige le concept, et comment lui fait on dire: si la valeur de $item['group_id'] change? Merci
cyberlaura Posté 10 Avril 2009 Posté 10 Avril 2009 Et bien, il faut la comparer à la dernière valeur mémorisée : if ($Mem_group_id!=$item['group_id']) { $Mem_group_id=$item['group_id']; // Code d'ajout de la rubrique}
lorem_ipsum Posté 11 Avril 2009 Auteur Posté 11 Avril 2009 Merci pour ton aide, Si je suis ton explication: Si mem_group est différent de group_id mem_group est égal à group_id En gros si ca retourne "true" tu peux ecrire la fin de balise/début de balise et tu retiens la variable pour le prochaine tour. Mais comment peut il savoir si il est différent alors que mem_group n'as pas de valeur? Du coup au premier tour de ma boucle il seront forcement différent et je me prends une fin de balise </rubrique><rubrique id...> dès le départ. Par contre je ne vois tjs pas comment je vais lui faire dire: si c'est le dernier article, tu fais juste </rubrique>. Pourrais tu détailler un poil plus la manipe à faire stp ? Pas une réponse toute faite, mais juste m'ouvrir les yeux sur le détails qui coince. Merci
cyberlaura Posté 11 Avril 2009 Posté 11 Avril 2009 Alors, un code vaut mieux qu'un long discours : tu mémorise tes éléments dans une variable $Elements. En cas de modification du group_id, tu écris ta rubrique avec les éléments, tu vides $Elements et tu mémorises le nouveau group_id. Il faut bien sûr écrire les derniers elements en fin de boucle. while($item = $result->fetchRow($result)) { if ($Mem_group_id!=$item['group_id']) { if ($Mem_group_id) { echo '<rubrique group="'.$Mem_group_id.'">'.$Elements.'</rubrique>'; unset($Elements); } $Mem_group_id=$item['group_id']; } $Elements.=' <element> <info picture="'.$item['picture'].'" name="'.$item['title'].'" link="'.$item['url'].'" /> <texte><![CDATA['.$item['description'].']]></texte> <texte><![CDATA['.$item['aboutbm'].']]></texte> </element> '; }if ($Elements) echo '<rubrique group="'.$Mem_group_id.'">'.$Elements.'</rubrique>';
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant