Tout savoir pour devenir un pro de PluXml, mais pas seulement...

Pagination via JavaScript


Rédigé par gccyrillus le Aucun commentairee

Dans deux précédents articles nous avons vu comment faire usage de la fonction pagination() de Pluxml ou en créer une de toutes pieces.

Cet article vous propose de voir ou revoir une version Javascript de pagination, que vous pourrez utiliser au sein de vos articles ou pages statiques.

Cette fonction a été proposé par Bazooka07 qui l'a intégré à quelques un de ses thèmes en libre services.

Voyons cette fonction et regardons comment en faire usage.

La fonction

(function() {
  'use strict';
  
  const list = [...document.body.querySelectorAll('.new-page > h2')];
  if(list.length == 0) { return; }
  
  if(list.length > 1) {
    // On crée une barre de navigation s'il y a plus de 1 chapitre
    var innerHTML = '';
    list.forEach((item, i) => {
      const caption = item.textContent;
      innerHTML += `<button data-page="${i}">${caption}</button>`;
    });
    
    // On crée la barre de navigation
    const pagination_numbers_container = document.createElement('NAV');
    pagination_numbers_container.className = 'art-nav center';
    pagination_numbers_container.innerHTML = innerHTML;
    
    const page0 = list[0].parentElement;
    page0.parentElement.insertBefore(pagination_numbers_container, page0);

    // On gére le click sur la barre de navigation
    pagination_numbers_container.addEventListener('click', (evt) => {
      if(evt.target.hasAttribute('data-page')) {
        evt.preventDefault();
        // On affiche uniquement le chapitre demandé
        [...document.body.querySelectorAll('.new-page.active')].forEach((item) => {
          item.classList.remove('active');
        });
        const i = parseInt(evt.target.dataset.page);
        list[i].parentElement.classList.add('active');
        // On met en évidence uniquement le bouton du chapitre affiché
        [...pagination_numbers_container.querySelectorAll('.active')].forEach((item) => {
          item.classList.remove('active');
        });
        event.target.classList.add('active');
      }
    });
  }
  
  // On allume sur le premier .new-page ( Fire up )
  list[0].parentElement.classList.add('active');
  const btn = document.body.querySelector('.art-nav button');
  if(btn != null) {
    btn.classList.add('active');
  }
})();
C'elle ci peut-être intégrée dans l'article ou chargé depuis une balise <script> à partir du thème avant la fermeture de la balise <body> si vous avez de nombreux articles et pages en faisant usages.

Tip : integrer cette fonction en fin de document ou sur l'evenement onload(). L'article doit-être déjà chargé pour que le script puissent y extraire les données necessaire à la création de la pagination.

Comment fonctionne le script?

Le script va rechercher les conteneur avec la class .new-page et si ceux-ci ont un h2 en enfant direct.

Si il y plus d'un conteneur correspondant à cette condition, alors une barre de navigation est créée et tous les conteneurs .new-page sont cachés, excepté le premier.

Chaque lien de pagination, prendra le texte contenu par premier titre h2 de chaque conteneur. Au click, il affichera alors le conteneur auquel il correspond en cachant les autres. C'est le cas dans cet article que vous lisez.

Conditions requises

Chaque portion de page devra obligatoirement être incluse dans un conteneur avec la class .new-page ayant un titre <h2>.

Le squellette HTML de base à reproduire pour chaque section de votre page est:

  <div class="new-page">
    <h2>Chapitre X</h2>
    <!-- Contenus ici -->
  </div>

Dans votre feuille de style, Pour qu'une seule de ces portion s'affiche, il faudra un minimum de style pour n'affiché qu'un seul de ses éléments:

.new-page:not(.active) {
  display: none;
}

Vous trouverez un exemple modifiable en ligne ici : Exemple en ligne du script.

Une autre version de ce script, légèrement différente, permet de paginer les portions en les regroupant par groupe de 1 à X. configuration à partir de la variable constante (ligne 6) const items_per_page = 1;//indiquez ici le nombre à regrouper.


Notez que ce script , cette fonction JavaScript n'est pas dépendante de Pluxml et peut-être utiliser dans n'importe quel autre contexte. Javascript est interprété par le navigateur du visiteur en fonction du contenu de la page affichée. Que ce soit un autre CMS qui à généré cette page ou un seulement un fichier HTML statique, si la structure qui s'affiche à l'écran correspond à ce que ce script attend, pagination du contenu il y aura.





DClassé dans : PluXml, Bout de code ,Mots clés : Scripts, pagination, Tuto

A propos de l'auteur, gccyrillus:

Gccyrillus : Amoureux de PluXml et codeur bricoleur à mes heures perdues.

Les commentaires sont fermés.

Top