Page 1 sur 1

SVP je n'arrive pas à résoudre cela (afficher x résultats pa

Posté : 12 sept. 2007, 20:25
par Lorange
Bonjour,

Je serais très reconnaissant à la personne qui veut bien m'aider car je n'y parviens vraiment pas seul.

Préambule:

J'ai une base de données qui contient des images (ou plutôt des adresses d'images). Chaque photo est associée à un pays.

J'ai une galerie flash qui doit être alimentée par un fichier XML.
Je génère ce fichier XML dynamiquement, en PHP, à partir des images contenus dans ma BDD.

Ce fichier XML se présente ainsi (en simplifié):

Code : Tout sélectionner

<?xml version="1.0" encoding="utf-8" ?> <gallery> <album name="country1"> <image src="xxy.jpg" /> <image src="yxx.jpg" /> </album> <album name="country2"> <image src="xyy.jpg" /> <image src="yxx.jpg" /> </album> <album name="country3"> <image src="zzz.jpg" /> <image src="zzx.jpg" /> </album> </gallery>
Après pas mal de galère, je suis parvenu à créer le script qui puisse générer ce fichier (qui contient en réalité plus d'infos mais je simplifie au maximum).

Le voici (encore une fois c'est simplifié au maximum):
<? //Génération du fichier gallery.xml
$fichier1 = 'gallery.xml';
$fp1 = fopen($fichier1, "w");
$book1 = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n";
$book1 .= "<gallery>\n";

// Ci-dessous, je vais chercher dans ma base les photos à afficher
$tmp1 = mysql_query("SELECT id, country, pic1 FROM ".C_MYSQL_MEMBERS." order by country ASC");

while($i=mysql_fetch_array($tmp1))
 {

if(!isset($cat)) // Nouvelle utilisation: On va donc créer un premier album
   {
                          
    $book1 .= "\t   <album name=\"".$i['country']."\">\n";
    $book1 .= "\t\t  <image src=\"".$i['pic1']."\" />\n"; //On liste les photos de cet album (=de ce pays)
    $cat = $i['country']; //On attribue une valeur a $cat pour que celui ne soit plus vide
   }

elseif ($i['country'] == $cat) // On doit donc rester dans le même album car le pays n'a pas changé
   {
    $book1 .= "\t\t  <image src=\"".$i['pic1']."\" />\n";
   }

else // On arrive à une photo qui se trouve dans un nouveau pays.
   {
    $book1 .= "\t   </album>\n"; // On ferme donc l'album précédent...
    $book1 .= "\t   <album name=\"".$i['country']."\">\n"; // ...et on en crée un nouveau
    $book1 .= "\t\t  <image src=\"".$i['pic1']."\" />\n";
    $cat = $i['country'];
   }

 }
$book1 .= "\t</album>\n";
// Et on clôt le fichier xml...
$book1 .= "</gallery>\n";
fwrite($fp1, $book1);
fclose($fp1);
?>
J'obtiens donc une galerie photos divisée en plusieurs albums - chaun d'entre eux étant un pays différent (country). Alors, puisque ça marche, me direz-vous, quel est le problème?

Le problème, c'est que dans certains pays, il y a plusieurs centaines de photos et que, dans ces pays-là, ça fait un peu planter l'animation flash lorsqu'on les ouvre. J'aimerais donc que dès qu'on atteint un certain nombre de photos dans un pays (disons 200), on crée automatiquement un nouvel album qui s'appellerait NOMDUPAYS-2, NOMDUPAYS-3, NOMDUPAYS-4, etc. Un peu comme lorsqu'on veut afficher seulement 20 résultats par page et qu'il faut passer à la page suivante pour afficher les 20 suivants.

Franchement, cela me dépasse... J'ai essayé des choses mais ça ne mène à rien. Qui saurait m'aider à modifier mon code PHP pour y parvenir?

Mille fois merci de m'avoir lu jusqu'ici.

Lorange

Posté : 13 sept. 2007, 01:24
par Lorange
Problème résolu:
<?php //Génération du fichier gallery.xml
$fichier1 = 'gallery.xml';
$fp1 = fopen($fichier1, "w");
$book1 = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n";
$book1 .= "<gallery>\n";
//on définit la limite d'images par pays
$limit_pic=200;
//On recupere tous les pays de manière unique
$requete_pays="select distinct(country) from ".C_MYSQL_MEMBERS." order by country asc";
$exe=mysql_query($requete_pays);
if($exe){
  while($pays=mysql_fetch_assoc($exe)){
      //on initialise les variables
      $nb_gal=0;
      //pour chaque pays, on recherche les images
      $requete="select pic1 from  ".C_MYSQL_MEMBERS." where country='".$pays[country]."'";
      $axe=mysql_query($requete);
      //on recupere le nombre de photo pour le pays concerné
      $nb=mysql_num_rows($axe);
      //on calcule le nombre de "galleries nécessaires"
      $nb_gal=ceil($nb/$limit_pic);
      $compteur=0;
      //on boucle
      while ($compteur<$nb_gal){
            //si c'est la premiere galerie on garde le nom du pays
            if($compteur==0){
            $book1 .= "\t   <album name=\"".$pays['country']."\">\n";
            }else
            {
              //sinon on fait nom du pays+$compteur+2
              $book1 .= "\t   <album name=\"".$pays['country']."-".($compteur+1)."\">\n";
            }
            
            //maintenant on recherche les images
            //on définit les limites de la requete
            $limit_deb=$compteur*$limit_pic;
            $requete="select pic1 from  ".C_MYSQL_MEMBERS." where country='".$pays[country]."' limit ".$limit_deb.",".$limit_pic;
            $ixe=mysql_query($requete);
            if($ixe){
              while($img=mysql_fetch_assoc($ixe)){
                 $book1 .= "\t\t  <image src=\"".$img['pic1']."\" />\n";
              }
            }
            $book1 .= "\t   </album>\n";
            $compteur++;
      }
  }
}
// Et on clôt le fichier xml...
$book1 .= "</gallery>\n";
fwrite($fp1, $book1);
fclose($fp1)
Merci quand même si quelqu'un m'avait lu...[/code]