Forum-webmaster
Technique - programmation => PHP / MySQL => Message commencé par: webmasterfdm le le 27-04-2011 a 14:17:40

Titre: Pagination php
Posté par: webmasterfdm le le 27-04-2011 a 14:17:40

Bonjour, sur mon site je récupère des infos à partir d'un fichier .xml

Lorsque je les affiche sur ma page, je limite le nombre de réponses pour que ça ne "déborde" pas. Ce que j'aimerais, c'est pouvoir récupérer toutes les infos et qu'une pagination automatique soit créée, pour afficher comme dans mon code ci-dessous 5 éléments par page mais que tous les éléments contenus dans le fichier puissent être affichés en créant d'autres pages ... J'espère que vous me comprenez lol

Voici mon code php :

<?php
require_once "magpierss/rss_fetch.inc";
define('MAGPIE_OUTPUT_ENCODING', 'UTF-8');
define('MAGPIE_OUTPUT_ENCODING', 'UTF-8');
define('MAGPIE_INPUT_ENCODING', 'UTF-8');
define('MAGPIE_DETECT_ENCODING', false);
$fichier_xml = "http://www.fins-de-mois.com/bons_reduction.xml";
$nombre_element = 5;
$rss = fetch_rss($fichier_xml);
if (is_array($rss->items))
{
$liste = array_slice($rss->items, 0, $nombre_element);
foreach ($liste as $item)
{
$advertiser = $item[advertiser];
$description = $item[description];
$url = $item[url];
$adv = str_replace('-','',$advertiser);
$descript = str_replace('&#128;','&euro;',$description);
$desc = str_replace('-','',$descript);
echo "<span class=\"title\">$adv <b>:</b></span><br />$desc<br /><form method=\"post\" action=\"$url\" target=\"_blank\"><input class=\"bouton\" type=submit value=\"Cliquez ici\"></form><br />\n";
}
}
?>

Merci d'avance pur votre aide précieuse.

Titre: Re:Pagination php
Posté par: Apollinaire le le 28-04-2011 a 00:45:19

Bonsoir,

Je ne comprends pas si le but est uniquement de faire une pagination ou si le résultat attendu est de pouvoir afficher les différentes pages de résultats sans recharger la page.

Dans le premier cas il suffit de faire un count du tableau en passant en variable le numéro de la page dans laquelle on se trouve pour faire la pagination correctement et afficher les résultats de la bonne page.

Si c'est le second cas il faudra passer par du JS. Si l'on veut faire léger on récupère l'indice avec le foreach et chaque tranche de $nombre_element se retrouve dans un conteneur différent. Le premier (donc les 5 premiers résultats) est affiché et les autres non (via CSS). Lorsqu'on clique sur un numéro de page on modifiera l'affichage des résultats et de la pagination (c'est ici qu'on a besoin de JS).

Peut être souhaitez vous faire autre chose mais dans ce cas je n'ai pas saisi.

A bientôt.

Titre: Re:Pagination php
Posté par: webmasterfdm le le 28-04-2011 a 02:17:19

Bonsoir,
déjà merci pour la réponse.

En fait, je veux faire comme ici :
http://www.fins-de-mois.com/commentaires.php

La pagination (le nombre de pages nécessairent à l'affichage de tous les commentaires, en ayant fixé un certain nombre de commentaires par page) se crée automatiquement, au fur et à mesure que le nombre de commentaires augmente ...

Titre: Re:Pagination php
Posté par: Apollinaire le le 28-04-2011 a 10:22:28

Bonjour,

Dans ce cas, si c'est juste pour faire une pagination avec le code actuel il suffira de récupérer le numéro de page (passer en variable get dans l'exemple) dans le début du code. Nous l’appellerons $page.

Ensuite dans le if (is_array($rss->items)) { on fera un count de $rss->items qui nous donnera le nombre total de résultats qu'on stockera dans $nbres.

Le premier élément à afficher aura donc comme valeur $page*$nombre_element-$nombre_element
Le 0 de $liste = array_slice($rss->items, 0, $nombre_element); sera donc remplacé par la valeur ci-dessus.

Enfin pour créer la pagination, à la sortie du foreach ($liste as $item) on fera un for qui ira de 1 à ceil($nbres/$nombre_element) compris.
Dans ce for il suffit d'écrire la valeur de la boucle actuelle avec le lien correspondant (en passant la variable de la page) et lorsque $page = cette valeur, uniquement écrire le numéro sans lien (page actuelle).

Bien entendu, après il est possible d'agrémenter davantage que ce soit esthétiquement ou niveau propreté de codage mais le principe est là.

Bon courage.

Titre: Re:Pagination php
Posté par: webmasterfdm le le 28-04-2011 a 11:32:06

Bonjour,
je vais essayer de faire comme vous me l'expliquez.

Je ne pense pas que j'aurais le temps aujourd'hui, mais d'ici demain ça devrait être bon.

En cas de soucis, je reviendrai vers vous.

Merci.

Titre: Re:Pagination php
Posté par: webmasterfdm le le 28-04-2011 a 12:52:55

Re :
j'ai fait ceci vite fait :

<?php
require_once "magpierss/rss_fetch.inc";
define('MAGPIE_OUTPUT_ENCODING', 'UTF-8');
define('MAGPIE_OUTPUT_ENCODING', 'UTF-8');
define('MAGPIE_INPUT_ENCODING', 'UTF-8');
define('MAGPIE_DETECT_ENCODING', false);
$fichier_xml = "http://www.fins-de-mois.com/bons_reduction.xml";
$page = isset($_GET['page']) ? $_GET['page'] : '';
$nombre_element = 3;
$rss = fetch_rss($fichier_xml);
print "<div class=\"centrage\">";
if (is_array($rss->items))
{
$nbres = count($rss->items);
$elem = ($page*$nombre_element-$nombre_element);
$liste = array_slice($rss->items, $elem, $nombre_element);
foreach ($liste as $item)
for ($page = 1; $page <= ceil($nbres/$nombre_element); $page++) {
if ($page>0) {
$precedent=$page-1;
echo "<a href=\"$PHP_SELF?page=$precedent\">
<img src=\"http://www.fins-de-mois.com/images/page_precedente.png\" align=AbsMiddle width=\"32\" height=\"32\" border=\"0\" alt=\"Page précédente\">
</a>";
}
$i=0;
$j=1;
if($nbres>$nombre_element) {
while($i<($nbres/$nombre_element)) {
if($i!=$page){echo "<a href=\"$PHP_SELF?page=$i\">$j</a> ";}
else { echo "<b>$j</b> ";}
$i++;$j++;
}
}
if($elem+$nombre_element<$nbres) {
$suivant=$page+1;
echo "<a href=\"$PHP_SELF?page=$suivant\">
<img src=\"http://www.fins-de-mois.com/images/page_suivante.png\" align=AbsMiddle width=\"32\" height=\"32\" border=\"0\" alt=\"Page suivante\">
</a>";
}
}
print "</div>";
{
$advertiser = $item[advertiser];
$description = $item[description];
$url = $item[url];
$adv = str_replace('-','',$advertiser);
$descript = str_replace('&#128;','&euro;',$description);
$desc = str_replace('-','',$descript);
echo "<span class=\"title\">$adv <b>:</b></span><br />$desc<br /><form method=\"post\" action=\"$url\" target=\"_blank\"><input class=\"bouton\" type=submit value=\"Cliquez ici\"></form><br />\n";
}
}
?>

Comme vous le constatez, ce n'est pas encore tout à fait ça ...

Pourriez-vous me dire où sont mes erreurs svp ?

Titre: Re:Pagination php
Posté par: webmasterfdm le le 28-04-2011 a 12:58:43

Résultat visible sur la page :

www.fins-de-mois.com/bons_reductionTEST.php

Titre: Re:Pagination php
Posté par: Apollinaire le le 28-04-2011 a 13:31:25

Ca me semble un peu compliqué.
Voilà ce que je tentais d'expliquer à partir de votre premier code :

<?php
require_once "magpierss/rss_fetch.inc";
define('MAGPIE_OUTPUT_ENCODING', 'UTF-8');
define('MAGPIE_OUTPUT_ENCODING', 'UTF-8');
define('MAGPIE_INPUT_ENCODING', 'UTF-8');
define('MAGPIE_DETECT_ENCODING', false);
$fichier_xml = "http://www.fins-de-mois.com/bons_reduction.xml";
if(!empty($_GET['page'])) $page=$_GET['page']; else $page=1;
$nombre_element = 5;
$rss = fetch_rss($fichier_xml);
if (is_array($rss->items))
{
   $nbres=count($rss->items);
   $felem = $page*$nombre_element-$nombre_element;
   $liste = array_slice($rss->items, $felem, $nombre_element);
   foreach ($liste as $item)
      {
      $advertiser = $item[advertiser];
      $description = $item[description];
      $url = $item[url];
      $adv = str_replace('-','',$advertiser);
      $descript = str_replace('&#128;','&euro;',$description);
      $desc = str_replace('-','',$descript);
      echo "<span class=\"title\">$adv <b>:</b></span><br />$desc<br /><form method=\"post\" action=\"$url\" target=\"_blank\"><input class=\"bouton\" type=submit value=\"Cliquez ici\"></form><br />\n";
      }
   if(ceil($nbres/$nombre_element)>1){
      if($page>1) //On écrit l'icone de page précédente
      for($cpt=1;$cpt<=ceil($nbres/$nombre_element);$cpt++){
         if($page==$cpt) echo $cpt;
         else echo '<a href="'.$PHP_SELF.'?page='.$cpt.'">'.$cpt.'</a>';
      }
      if($page<ceil($nbres/$nombre_element)) //On écrit l'icone de page suivante
   }
}
?>

Il est possible qu'il y ait quelques erreurs car je n'ai pas testé.

Titre: Re:Pagination php
Posté par: webmasterfdm le le 28-04-2011 a 14:28:18

Cette fois-ci je ne peux vraiment pas essayer.
Je me repencherai sur le problème ce soir, tardivement.
Je vous tiens au courant.
Merci.

Titre: Re:Pagination php
Posté par: webmasterfdm le le 29-04-2011 a 04:10:44

J'ai mis le code que vous m'avez fourni en place pour le tester et lemodifier un peu selon le résultat, mais une erreur se produit et je pense que la fatigue n'aidant pas je ne trouve pas l'erreur !

Sur la page s'affiche :

Parse error: syntax error, unexpected '}' in /mnt/web7/32/47/51967647/htdocs/bons_reductionTEST2.php on line 91

Page où j'ai mis le code :

http://www.fins-de-mois.com/bons_reductionTEST2.php

Voilà, la nuit portant conseil, je verrai ça demain.

Titre: Re:Pagination php
Posté par: webmasterfdm le le 29-04-2011 a 18:08:47

Bonjour,
voici mon dernier code :

<?php
require_once "magpierss/rss_fetch.inc";
define('MAGPIE_OUTPUT_ENCODING', 'UTF-8');
define('MAGPIE_OUTPUT_ENCODING', 'UTF-8');
define('MAGPIE_INPUT_ENCODING', 'UTF-8');
define('MAGPIE_DETECT_ENCODING', false);
$fichier_xml = "http://www.fins-de-mois.com/bons_reduction.xml";
$nombre_element = 5;
$rss = fetch_rss($fichier_xml);
if(!empty($_GET['page'])) $page=$_GET['page']; else $page=1;
if (is_array($rss->items))
{
$nbres=count($rss->items);
$felem = $page*$nombre_element-$nombre_element;
$liste = array_slice($rss->items, $felem, $nombre_element);
foreach ($liste as $item)
$advertiser = $item[advertiser];
$description = $item[description];
$url = $item[url];
$adv = str_replace('-','',$advertiser);
$descript = str_replace('','&euro;',$description);
$desc = str_replace('-','',$descript);
echo "<span class=\"title\">$adv <b>:</b></span><br />$desc<br /><form method=\"post\" action=\"$url\" target=\"_blank\"><input class=\"bouton\" type=submit value=\"Cliquez ici\"></form><br />\n";
print "<div class=\"centrage\">";
if(ceil($nbres/$nombre_element)>1)
if($page>1)
{
$precedent=$page-1;
echo "<a href=\"$PHP_SELF?page=$precedent\">
<img src=\"http://www.fins-de-mois.com/images/page_precedente.png\" align=AbsMiddle width=\"32\" height=\"32\" border=\"0\" alt=\"Page précédente\">
</a>";
}
for($cpt=1;$cpt<=ceil($nbres/$nombre_element);$cpt++)
if($page==$cpt) echo $cpt;
else echo '<a href="'.$PHP_SELF.'?page='.$cpt.'">'.$cpt.'</a>';

if($page<ceil($nbres/$nombre_element))
{
$suivant=$page+1;
echo "<a href=\"$PHP_SELF?page=$suivant\">
<img src=\"http://www.fins-de-mois.com/images/page_suivante.png\" align=AbsMiddle width=\"32\" height=\"32\" border=\"0\" alt=\"Page suivante\">
</a>";
}
print "</div>";
}
?>

Alors, au niveau de la pagination, cela fonctionne ... MAIS !!!
Maintenant bien que je définisse 5 éléments à afficher par page, il ne m'en affiche plus qu'un par page ... Et, au lieu de tous les récupérer, je ne sais pas comment, mais il en sélectionne juste quelques un dans le fichier .xml ...


Titre: Re:Pagination php
Posté par: webmasterfdm le le 29-04-2011 a 18:09:37

Voyez ce que ça donne ici :

http://www.fins-de-mois.com/bons_reductionTEST2.php


Forum-webmaster | Actionné par YaBB SE
© 2001-2003, YaBB SE Dev Team. Tous droits réservés.