PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 09-04-2011 09:56:20

blackant
Membre
Inscription : 03-11-2010
Messages : 25

organiser un xml par colonnes.

Bonjour,

je débute en programmation, j'ai quelques bases, mais je n'ai aucun talent pour la prog.
bref,
je réalise un site e-commerce, et pour afficher les objets à vendre, j'aimerais pouvoir afficher le contenu de mon XML sur 2 voir 3 colonnes.
le problème c'est que je ne sais pas comment faire et que pour le moment la seule chose que j'ai réussie à faire c'est de dupliquer la première colonne dans la deuxième !
le mieux est de vous montrer en direct:
http://blackantmaster.com/Store/BeastCartoon.php

la mise en page est bonne mais pas le contenu.

Hors ligne

#2 09-04-2011 11:30:58

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : organiser un xml par colonnes.

Saluton,
Voir le résultat ne nous aide pas beaucoup pour te suggérer de modifier le code qui l'a produit.


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#3 09-04-2011 12:37:19

blackant
Membre
Inscription : 03-11-2010
Messages : 25

Re : organiser un xml par colonnes.

ok,
voila en gros le contenu de la cellule centrale:

<tr>
    <td width="10"></td>
    <td width="642"><table width="300" height="94" border="0" align="center" cellpadding="0" cellspacing="0" >
      <?php  
if (file_exists('beastcart.xml')) {
  $xml = simplexml_load_file('beastcart.xml');
 
  $catalos = ($xml->catalo);
 
  foreach ($catalos as $catalo) {
 
   
    echo "<tr width='300'>\n<td>";
    printf('<p class="style1"><strong>%s</strong></p>', $catalo->nom);
    echo "</tr><tr>\n<td width='109'>";
    printf('<a href="%s"><img src="img/%s"
        alt="%s" width="105" height="105" border="2" bordercolor="#000000"
        "/></a>'
,$catalo->image_princ->href, $catalo->image_princ->src,$catalo->image_princ->alt );
   
    echo "</td>\n<td width='10'>\n</td> <td width='191'>";
    printf('<p>%s polys</p>', $catalo->poly);
    printf('<p>%s vertices</p>', $catalo->vert);
    printf('<p>Price  : <strong> %s €</strong></p>', $catalo->prix);
    echo "</td>\n</tr>";
    echo "<tr>\n</tr>";
   
  }
} else {
  exit('Failed to open catalos_1.xml.');
}
?>
                        </table></td>
                        <td width="642"><table width="300" height="94" border="0" align="center" cellpadding="0" cellspacing="0" >
      <?php  
if (file_exists('beastcart.xml')) {
  $xml = simplexml_load_file('beastcart.xml');
 
  $catalos = ($xml->catalo);
 
  foreach ($catalos as $catalo) {
 
   
    echo "<tr width='300'>\n<td>";
    printf('<p class="style1"><strong>%s</strong></p>', $catalo->nom);
    echo "</tr><tr>\n<td width='109'>";
    printf('<a href="%s"><img src="img/%s"
        alt="%s" width="105" height="105" border="2" bordercolor="#000000"
        "/></a>'
,$catalo->image_princ->href, $catalo->image_princ->src,$catalo->image_princ->alt );
   
    echo "</td>\n<td width='10'>\n</td> <td width='191'>";
    printf('<p>%s polys</p>', $catalo->poly);
    printf('<p>%s vertices</p>', $catalo->vert);
    printf('<p>Price  : <strong> %s €</strong></p>', $catalo->prix);
    echo "</td>\n</tr>";
    echo "<tr>\n</tr>";
   
  }
} else {
  exit('Failed to open catalos_1.xml.');
}
?>
                        </table></td>
  </tr>

Hors ligne

#4 09-04-2011 19:03:36

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : organiser un xml par colonnes.

Tu peux nous faire voir le résultat d'un var_dump($catalos) ?


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#5 10-04-2011 08:50:51

blackant
Membre
Inscription : 03-11-2010
Messages : 25

Re : organiser un xml par colonnes.

je peux faire plein de chose mais ca faudrais d'abord que je sache comment le faire ...

Hors ligne

#6 10-04-2011 08:53:38

xTG
GrandGourou
Inscription : 18-06-2009
Messages : 1 127
Site Web

Re : organiser un xml par colonnes.

$catalos = ($xml->catalo); // ligne présente dans ton script
var_dump($catalos); // ligne à rajouter

wink

Hors ligne

#7 10-04-2011 09:45:12

blackant
Membre
Inscription : 03-11-2010
Messages : 25

Re : organiser un xml par colonnes.

merci grandgourou
ca me mets un message a la c..

http://blackantmaster.com/Store/BeastCartoon.php

Hors ligne

#8 10-04-2011 10:04:23

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : organiser un xml par colonnes.

C'est bien ce qui me semblait $catalos n'est pas un array mais un objet.

object(SimpleXMLElement)#2 (6) {
     ["id"]=>  string(1) "1"
     ["nom"]=>  string(12) "Young Golem "
     ["poly"]=>  string(3) "446"
     ["vert"]=>  string(5) " 402 "
     ["prix"]=>  string(1) "5"
     ["image_princ"]=>  object(SimpleXMLElement)#4 (3) {
            ["alt"]=>  string(10) "Baby Golem"
            ["src"]=>  string(17) "BabyGolemMini.png"
            ["href"]=>  string(46) "http://blackantmaster.com/Store/BabyGolem.html"
            }
      }

Donc tu ne peux pas le parcourir avec foreach


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#9 10-04-2011 10:50:40

xTG
GrandGourou
Inscription : 18-06-2009
Messages : 1 127
Site Web

Re : organiser un xml par colonnes.

Maljuna Kris a écrit :

Donc tu ne peux pas le parcourir avec foreach

SimpleXmlElement implémente un itérateur donc c'est possible d'utiliser foreach (la preuve en image sur son site, sinon il n'y aurai rien d'affiché).
Mais nous nous écartons du problème. wink

Pour faire deux colonnes il suffit d'utiliser <td></td> et un compteur.
Petit exemple :

$i = 1;
echo "<table><tr>";
foreach(......)
{
  echo "<td>$i</td>"; // une colonne
  if( $i % 2 == 0 ) // toutes les deux cases
    echo "</tr><tr>"; // nouvelle ligne
  $i++;
}
echo "</tr></table>";

Hors ligne

#10 10-04-2011 19:01:59

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : organiser un xml par colonnes.

xTG a écrit :

SimpleXmlElement implémente un itérateur donc c'est possible d'utiliser foreach

simplexml_load_file — Convertit un fichier XML en objet

et

foreach fonctionne uniquement sur les tableaux et les objets,

Donc au temps pour moi.
Cela dit, cela ne m'explique pas pourquoi son code affichait toujours le même item dans l'objet.
D'ailleurs, avec ou sans gestion de rupture modulo 2 pour changement de ligne <tr>, ton code utilise le même foreach() sous-entendu, cela ne devrait donc rien changer de fondamental au résultat.


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#11 10-04-2011 21:01:26

blackant
Membre
Inscription : 03-11-2010
Messages : 25

Re : organiser un xml par colonnes.

ok j'ai bien compris le conditionnement par numero mais maintenant j'ai un autre probleme qui se pose:
je n'arrive pas a imbriquer des colonnes dans des lignes

explication:
je voudrais une ligne de 300 pour le titre, en dessous une ligne contenant 2 colonnes, la premiere l'image et la deuxieme la description de l'objet.

  <tr>
    <td colspan="4" rowspan="3"><?php  
if (file_exists('beastcart.xml')) {
  $xml = simplexml_load_file('beastcart.xml');
 
  $catalos = ($xml->catalo);
  $i = 1;
  echo "<table><tr width='900'>";
 
  foreach ($catalos as $catalo) {
   
    echo "<td width ='300'><tr width='300'>"; // une colonne
      echo "<p class='style1'><strong>$i";
      printf('- %s</strong></p></tr>', $catalo->nom);
    echo "<tr width='300'><td width='109'>";
   
      printf('<a href="%s"><img src="img/%s"
        alt="%s" width="105" height="105" border="2" bordercolor="#000000"
        "/></a></td>',$catalo->image_princ->href, $catalo->image_princ->src,$catalo->image_princ->alt );
   
    echo "<td width='109'>";
    printf('<p>%s polys</p>', $catalo->poly);
    printf('<p>%s vertices</p>', $catalo->vert);
    printf('<p>Price  : <strong> %s €</strong></p>', $catalo->prix);
       
      echo "  </td></tr>";
  if( $i % 2 == 0 ) // toutes les deux cases
       echo "</tr><tr>"; // nouvelle ligne
  $i++;
   
    /*

si l'agencement semble logique je l'ecris, en revanche le resultat correspond pas.
les balises dans les balises sont mises aleatoirement dans ma page, bref un gros bordel !

Hors ligne

#12 10-04-2011 21:11:43

xTG
GrandGourou
Inscription : 18-06-2009
Messages : 1 127
Site Web

Re : organiser un xml par colonnes.

Ton agencement de balise HTML est par contre totalement illogique.
Tu devrais relire un cours sur les tableaux HTML.

Cela dit, cela ne m'explique pas pourquoi son code affichait toujours le même item dans l'objet.

Il a dédoublé son code, il fait deux fois le chargement du XML et la boucle foreach. (cf premier post)

Hors ligne

#13 10-04-2011 22:32:22

blackant
Membre
Inscription : 03-11-2010
Messages : 25

Re : organiser un xml par colonnes.

je crois que je viens de capter mon erreur les td sont contenus dans les tr et pas l'inverse.

Hors ligne

#14 10-04-2011 22:46:14

blackant
Membre
Inscription : 03-11-2010
Messages : 25

Re : organiser un xml par colonnes.

bon, bin non, c'est bien rangé maintenant mais c'est toujours pas en colonne.

<?php  
if (file_exists('beastcart.xml')) {
  $xml = simplexml_load_file('beastcart.xml');
 
  $catalos = ($xml->catalo);
  $i = 1;
  echo "<table><tr width='900' >";
 
  foreach ($catalos as $catalo) {
   
    echo "<td width ='300' colspan='3'>"; // une colonne
      echo "<p class='style1'><strong>$i";
      printf('- %s</strong></p></td></tr>', $catalo->nom);
    echo "<tr><td width='109'>";
   
      printf('<a href="%s"><img src="img/%s"
        alt="%s" width="105" height="105" border="2" bordercolor="#000000"
        "/></a></td>',$catalo->image_princ->href, $catalo->image_princ->src,$catalo->image_princ->alt );
    echo "<td width='10'></td>";
    echo "<td>";
    printf('<p>%s polys</p>', $catalo->poly);
    printf('<p>%s vertices</p>', $catalo->vert);
    printf('<p>Price  : <strong> %s €</strong></p>', $catalo->prix);
       
      echo "</td></tr>";
  if( $i % 2 == 0 ) // toutes les deux cases
       echo "</tr><tr>"; // nouvelle ligne
  $i++;
    }
    echo "</tr></table>";
     
} else {
  exit('Failed to open catalos_1.xml.');
}
?>

Hors ligne

#15 11-04-2011 05:58:47

xTG
GrandGourou
Inscription : 18-06-2009
Messages : 1 127
Site Web

Re : organiser un xml par colonnes.

Si tu veux pouvoir faire un <tr> dans ton enregistrement il faut que cela soit celui d'un autre <table> que celui qui contient tes données.
C'est le seul moyen pour obtenir des colonnes tout en gardant ton organisation titre-informations.

Hors ligne

#16 11-04-2011 10:22:42

blackant
Membre
Inscription : 03-11-2010
Messages : 25

Re : organiser un xml par colonnes.

non, j'arrives a rien, j'ai beau chercher ouper deplacer les balises ca me fait n'importe quoi.
le mieux que j'ai reussi c'est a creer un tableau avec 2 colonnes et les titres, mais les autres titres ne sont pas a la ligne et c'est encore pire si je rajoutes les images et description.

j'arrives pas a comprendre la logique du foreach.
normalement il doit executer l'action pour chaque objet et recommencer tant qu'il y'en a non ?
et surtout les faire dans l'ordre...

Hors ligne

#17 11-04-2011 13:03:26

blackant
Membre
Inscription : 03-11-2010
Messages : 25

Re : organiser un xml par colonnes.

wa! enorme ! j'ai enfin reussi a organiser colonnes lignes et tableaux comme je voullais !!

merci j'ai beaucoup appris!:D

Hors ligne

#18 25-04-2011 21:04:06

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : organiser un xml par colonnes.

Bonsoir,

La logique d'un Foreach quoique un peu barbare parfois  lors de sa découverte est cependant très simple:
Il suffit de vérifier, pour chaque index du tableau lu par foreach, la nature des données qu'il contient et d'y appliquer le traitement approprié souhaité.

Cordialement,

Jc

Dernière modification par Jc (25-04-2011 21:04:49)


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

Pied de page des forums