Critère pseudo_hasard : navigation par hasard améliorée

Ce plugin apporte un nouveau critère {par pseudo_hasard} assez proche de {par hasard} mais avec quelques subtilités très pratiques pour la pagination.

Qu’apporte ce plugin ?

Lorsque l’on utilise le critère de tri {par hasard}, chaque calcul du squelette (y compris lors de la pagination) trie aléatoirement les résultats, ce qui n’est pas sans poser de problèmes avec la pagination.

Prenons par exemple la liste d’articles suivante :

  • Article 1
  • Article 2
  • Article 3
  • Article 4

La boucle <BOUCLE_articles(ARTICLES){par hasard}{pagination 2}> affichera sur la page 1 :

  • Article 3
  • Article 2

et sur la page 2 :

  • Article 4
  • Article 3

La répétition de l’article 3 est intrinsèque au fonctionnement du critère {par hasard}.

Maintenant, avec ce plugin et la boucle <BOUCLE_articles(ARTICLES){par pseudo_hasard}{pagination 2}>, la page 1 affichera :

  • Article 3
  • Article 2

et la page 2 :

  • Article 1
  • Article 4

Pas de répétition cette fois. Et même si vous recalculez une des pages, l’ordre des articles sera inchangé. Le hasard de ce plugin est modifié toutes les 24h contrairement au hasard de SPIP qui est modifié à chaque calcul.

Comment utiliser le plugin ?

Si vous n’avez pas déjà le dépôt externals dans votre SPIP, ajoutez le dépôt https://files.spip.net/externals/archives_externals.xml pour trouver le plugin automatiquement.

Après ajout et activation du plugin, vous pouvez utiliser le critère {par pseudo_hasard} dans vos squelettes qui fonctionnera comme {par hasard} mais sans les problèmes de doublons avec la pagination.

Comment ça fonctionne techniquement ?

Le plugin rajoute une colonne MySQL pseudo_hasard à toutes les tables. Une tâche cron toutes les 24h met à jour la valeur de cette colonne pour une valeur aléatoire. Tout nouvel objet éditorial est aussi créé avec une valeur aléatoire dans cette colonne.

Comment contribuer ?

Le plugin est disponible sur GitHub pour vos forks : https://github.com/cahri/spip-pseud....

Discussion

5 discussions

  • Hello,

    Intéressant comme plugin :)

    Il devrait être possible d’obtenir un résultat similaire sans avoir à ajouter une colonne supplémentaire sur toutes les tables, et sans cron.

    La fonction RAND() de Mysql accepte une seed en paramètre pour avoir de l’aléatoire “fixe” :

    One implication of this behavior is that for equal argument values, RAND(N) returns the same value each time, and thus produces a repeatable sequence of column values.

    En donnant la clé primaire comme seed, pof, ça devrait le faire :

    SELECT
        rand(id_article) pseudo_hasard
    FROM
        spip_articles
    ORDER BY
        pseudo_hasard;

    Donc ça pourrait devenir un simple critère qui ajouterait cet alias au select des boucles.
    Je verrais bien ça en ajout au plugin Bonux d’ailleurs.

    Reply to this message

  • 3

    Hummmmmmm

    alors sur l’affichage de mes vignettes, j’avais une répétition avec le le critère par hasard.

    cela m’ennuyé lors de l’utilisation de la pagination, certaine vignette n’apparaissais jamais a l’œil du visiteur.

    tandis qu’avec pseudo un visiteur est sur de visualisé l’ensemble des vignettes.

    merci pour ta contribution

    • ah oui j’ai oublié tester sur spip 3.2

      en changeant les bornes :

      compatibilite=“[3.0.0;3.2.*]”

    • La version compatible SPIP 3.2 est sortie :)

    • spipfactory

      Il me semble qu’il n’y a pas de logo associé a ce plugin dans l’espace privé de spip via la gestion par SVP

    Reply to this message

  • AbsurdePhoton

    Au vu de son fonctionnement, je suppose que ce critère ne doit pas fonctionner sur des boucles DATA ?

    Reply to this message

  • 1

    bonjour Julien,

    “La répétition de l’article 2 est intrinsèque” plutôt article 3 ici dans l’exemple ?

    Reply to this message

  • Oh bravo Julien : la solution technique trouvée est très maline.

    Merci pour cette contribution.

    Reply to this message

Add a comment

Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite / PostgreSQL
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparait.

Merci d’avance pour les personnes qui vous aideront !

Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.

Who are you?
[Log in]

To show your avatar with your message, register it first on gravatar.com (free et painless) and don’t forget to indicate your Email addresse here.

Enter your comment here

This form accepts SPIP shortcuts {{bold}} {italic} -*list [text->url] <quote> <code> and HTML code <q> <del> <ins>. To create paragraphs, just leave empty lines.

Add a document

Follow the comments: RSS 2.0 | Atom