5 votes

Comment utiliser les numéros de page dans la pagination Codeigniter au lieu de l'offset ?

J'ai lu toutes les questions sur Stackoverflow et je n'ai vu aucune réponse définitive à la question. J'utilise actuellement la bibliothèque de pagination codeigniter pour générer mes liens de pagination en utilisant une limite et un offset :

$config['base_url'] = base_url() . 'explore/featured/index/';
    $config['total_rows'] = $this->Projects_model->get_featured_count();//Count featured projects
    $config['per_page'] = 12;
    $config['uri_segment'] = 4;
    $config['display_pages'] = FALSE;
    $config['next_link'] = 'Older →';
    $config['prev_link'] = '← Newer';
    $this->pagination->initialize($config);
    $limit = $config['per_page'];
    $offset = $this->uri->segment(4);

    $data['pagination'] = $this->pagination->create_links();

    $data['projects'] = $this->Projects_model->get_featured($limit, $offset); //get featured projects from database

Le code ci-dessus limite les valeurs de sortie de ma requête et utilise un décalage contenu dans mon 4e segment URI.

Comment puis-je modifier le code ci-dessous pour obtenir des numéros de page ? Il semble que ce soit impossible car je ne pourrais plus utiliser de décalage dans mon url.

18voto

Wesley Murch Points 48959

À un moment donné, CI a mis à jour son bibliothèque de pagination pour s'adapter (enfin) à cette situation :

$config['use_page_numbers'] = TRUE;

Par défaut, le segment URI utilise l'index de départ des éléments que vous paginez. Si vous préférez afficher le numéro de page réel, définissez cette option à VRAI.

Si vous utilisez une version qui ne dispose pas de cette fonctionnalité et que vous n'êtes pas en mesure de mettre à jour l'ensemble de votre installation CI, vous devriez être en mesure d'ajouter simplement la dernière bibliothèque de pagination.

Pour calculer votre décalage de DB, utilisez $limit * $page_number où "numéro_de_page" est la valeur de votre URL (4e segment dans votre cas).

7voto

Barış Ürüm Points 635

$limit * $page_number mentionnée ci-dessus ne renvoyait pas un vrai décalage comme point de départ et créait des problèmes lorsque le numéro de page était 1 car le décalage devait être 0 à ce moment-là. Ceci a fonctionné pour moi :

$offset = ($page_number  == 1) ? 0 : ($page_number * $config['per_page']) - $config['per_page'];

4voto

Thiên Teakee Points 51

Il suffit d'utiliser :

$offset = ($this->uri->segment(4)) ? $this->uri->segment(4) : 1;
$data['projects'] = $this->Projects_model->get_featured($limit, $limit*($offset-1));

-1voto

$page_num = $this->uri->segment(1);
$offset = ($page_num  == NULL) ? 0 : 
          ($page_num * $config['per_page']) - $config['per_page'];

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X