Aller au contenu

Besoin d'aide boucle php/xml


lorem_ipsum

Sujets conseillés

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. ;)

Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

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
}

Lien vers le commentaire
Partager sur d’autres sites

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 ;)

Lien vers le commentaire
Partager sur d’autres sites

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>';

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...