Système de pagination en PHP4

fijou12 Messages postés 16 Date d'inscription mercredi 25 août 2010 Statut Membre Dernière intervention 7 septembre 2020 - 28 août 2010 à 13:32
fijou12 Messages postés 16 Date d'inscription mercredi 25 août 2010 Statut Membre Dernière intervention 7 septembre 2020 - 31 août 2010 à 12:25
bonjour à tous
j'ai un problème, en ce qui concerne le système de pagination, je n'arrive pas a comprendre comment créer les pages(pour afficher les messages) auprealable sachant qu'au départ on connait pas le nombre de pages nécessaires, car ça dépend du nombre de messages envoyés par les utilisateurs.
merci pour votre attention,je vous serai très reconnaissante

6 réponses

inwebo Messages postés 380 Date d'inscription lundi 12 novembre 2007 Statut Membre Dernière intervention 23 octobre 2014
28 août 2010 à 14:55
Bonjour,

Pour un système de pagination il faut :

- Un nombre total d'objet à traiter.
- Un nombre d'objet par page (une constante).
- Diviser le nombre d'objet total par le nombre d'objet par page, puis l'arrondir.
- Donne un nombre totale de page.

Ex :

Nombre total d'objet = 1743
Nombre d'objet par page = 10
Donne : 1743 / 10 = 174,3
On l'arrondi ( function round() ) donne 175 pages de 10 objets.

Voilà @+

________________________________________
( $toBe || !$toBe ) = $this->Question();
0
fijou12 Messages postés 16 Date d'inscription mercredi 25 août 2010 Statut Membre Dernière intervention 7 septembre 2020
30 août 2010 à 10:20
je tiens d'abord à vous remercier pour votre réponce. j'ai déjà fais ce programme, j'ai calculé le nombre de page avec cette méthode, mais mon problème est de savoir comment créer ces pages, je ne sais pas si dois utiliser la programmation objet ou bien il existe une autre astuce. merci
0
inwebo Messages postés 380 Date d'inscription lundi 12 novembre 2007 Statut Membre Dernière intervention 23 octobre 2014
30 août 2010 à 10:43
Bonjour,

Tout d'abord pour le choix de la programmation objet ou non, tout dépends des préférences de chacun. C'est peut être parce que j'utilisais le mot "objet" pour désigné 1 élément ou 1 item de la liste à traiter.

Vous avez pus calculer le nombre de page totale ? Donc le plus dur du travail est fait.

Supposons que :

- Tous les "objets" à lister sont contenus dans un tableau.

$objets = array {
       'Objet1',
       'Objet2',
       'Objet3',
       'Objet4',
       'Objet5',
       'Objet6',
       'Objet7',
       'Objet8',
       'Objet9'
};


Mais également que pour chaque page nous voulons 3 objets d'affichés. ET que chaque page est identifiées par un entier, et que cet identifiant sera transmis par l'url.

Nous pouvons déduire qu'avec l'identifiant de chaque page nous savons quels objets sera affichés.

Page 1 => Objets1, Objets2, Objets3
Page 2 => Objets4, Objets5, Objets6
Page 3 => Objets7, Objets8, Objets9

Avec interval = 3

Donc Page N = de ( ( ObjetsN * interval ) - interval + 1 ) à ObjetsN * interval

Pour la page 2 :

de l'objet ( ( 2 * 3 ) - 3 + 1) à ( 2 * 3 )
donc de l'objet 4 à 6.

Je ne dit pas que c'est la meilleur solution, mais c'est déjà une piste.

@+
________________________________________
( $toBe "|| !$toBe ) = $this->Question();
0
fijou12 Messages postés 16 Date d'inscription mercredi 25 août 2010 Statut Membre Dernière intervention 7 septembre 2020
30 août 2010 à 12:00
merci,
j'ai vu votre programme, c'est le même que j'ai utilisé,pour afficher les messages sur chaque page, d'acord,j'ai enregistré les messages dans une table (base de données).j'ai crée même des liens vers les pages 1 2 3 ....peut être que j'ai mal formulé ma question, c-a-d si un nouveau message arrive et que par hasard les pages sont toutes pleines(elles contiennent toutes le nombre max de messages à afficher)alors il faut creer une autre page pour contenir le nouveau message, c'est ici que réside mon problème:comment creer les pages au fure et à mesure que le nombre de messages augmentent.
merci pour votre patience.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
inwebo Messages postés 380 Date d'inscription lundi 12 novembre 2007 Statut Membre Dernière intervention 23 octobre 2014
30 août 2010 à 13:34
Re,

Les liens vers les pages 1, 2, 3 ne DOIVENT PAS être renseignés en B.D.D. ils seront calculés à la volé, si un objet est ajouté dans la base de donnée, le programme vas re-calculer l'ensemble des pages.

Finalement nous aurons qu'UNE seule page php, qui affichera des éléments du tableau en fonction de l'identifiant de la page.

D'où l'intérêt des pages dynamiques.

Exemple :

<?php
// Notre tableau contenant TOUS nos objets
$totalObjets = array();

// Peuple $totalObjets
for( $i = 0 ; $i < 133 ; $i++ ) {
// Astuce pour commencer le tableau Numerique à 1
if( $i === 0 ) {
$totalObjets[1] = 'Objet1';
}
else {
$totalObjets[$i+1] = 'Objet' . ($i+1);
}
}

// Affiche Tous nos objets
echo '<code>';
print_r($totalObjets);
echo '

';

// Nombre d'objets souhaité par page
$objetsParPage = 25;

// Total des pages
$totalPage = ceil( count($totalObjets) / $objetsParPage );

echo 'Nombre de page ' . $totalPage . '
';

// Affichage pagination
for( $i = 1 ; $i <= $totalPage ; $i++) {
echo ' [?page='.$i.' ' . $i . '] ';
}

// Affichage des objets en fonctions du numero de page

// Initialise la variable page si elle n'existe pas
if( !isset($_GET['page']) ) {
$_GET['page'] = 1;
}

// Index de fin
$start = ( $objetsParPage * $_GET['page'] ) - $objetsParPage + 1;
echo '
Index du tableau de début ' . $start . '' ;

// Index de fin
$end = ( $objetsParPage * $_GET['page'] );
echo '
Index du tableau de fin ' . $end . '' ;

// Affichage des objets
for( $i = $start ; $i <= $end ; $i++ ) {
if( isset($totalObjets[$i]) ) {
echo 'Ceci est la valeur de $totalObjets[' . $i . '] = ' . $totalObjets[$i] . '
';
}
}
?></code>

Bon c'est un code fait très rapidement et il n'est pas sécurisé, il n'y a pas non plus les boutons suivant, précèdent, première page, dernière page ...

Est-ce plus clair ?
________________________________________
( $toBe || !$toBe ) = $this->Question();
0
fijou12 Messages postés 16 Date d'inscription mercredi 25 août 2010 Statut Membre Dernière intervention 7 septembre 2020
31 août 2010 à 12:25
merci beaucoup,
j'ai bien compris votre code, c'est tout ce que j'avais besoin.
je l'ai essayé et ça a marché.
bon courage.
0
Rejoignez-nous