boucle {par hasard} et pagination

Salut,
Je cherche à faire une boucle d'articles ordonnés par hasard et avec une pagination.

J'ai ma boucle dans un inclure donc je lui passe bien le {self=#SELF}.

Par contre sur ma page 2 je retrouve des articles de ma page 1 et vis et versa...
Cela fonctionne apparement comme si le par hasard fonctionne bien mais sur toute la liste et pas seulement sur la page

Je n'ai pas trop d'idées pouyr résoudre mon probléme ...
certains d'entre vous ont déjà fait un tri par hasard sur une boucle paginée ?

Merci

Yoann NOGUES (zerax) a écrit :

Salut,
Je cherche à faire une boucle d'articles ordonnés par hasard et avec une pagination.

par hasard ne peut pas marcher avec de la pagination, sauf à calculer toutes les pages en meme temps...
sinon, nouvelle page = nouveau contexte = nouveau calcul = nouveau hasard.

J'ai ma boucle dans un inclure donc je lui passe bien le {self=#SELF}.

Par contre sur ma page 2 je retrouve des articles de ma page 1 et vis et versa...
Cela fonctionne apparement comme si le par hasard fonctionne bien mais sur toute la liste et pas seulement sur la page

en page 1 tu as les 10 premiers tirés au hazard, en page 2 tu as du 11em au 20em d'un autre tirage.
c'est pas comme au loto, on peut pas jouer une grille pour plusieurs tirages...

Je n'ai pas trop d'idées pouyr résoudre mon probléme ...
certains d'entre vous ont déjà fait un tri par hasard sur une boucle paginée ?

la pagination javascript pour ca, je pense que c'est le mieux.

@++

Stephane a écrit :

Yoann NOGUES (zerax) a écrit :
  

Salut,
Je cherche à faire une boucle d'articles ordonnés par hasard et avec une pagination.
    
par hasard ne peut pas marcher avec de la pagination, sauf à calculer toutes les pages en meme temps...
sinon, nouvelle page = nouveau contexte = nouveau calcul = nouveau hasard.

et si je fais 3 niveaux de boucles d'articles ( imbriquées dans la partie conditionnelle )
le premier niveau avec {par hasard}, le second avec {pagination 10}
et le dernier avec {doublons}

et que je fais une autre boucle avec {!doublons}, je ne peux pas trier et ca ressort selon l'id_article ...

mais ca aurait été une bonne astuce de sioux ...
et avec ce principe la d'imbrication, je ne pourrais pas, avec des INCLURE faire ce que je cherche ?

J'ai ma boucle dans un inclure donc je lui passe bien le {self=#SELF}.

Par contre sur ma page 2 je retrouve des articles de ma page 1 et vis et versa...
Cela fonctionne apparement comme si le par hasard fonctionne bien mais sur toute la liste et pas seulement sur la page
    
en page 1 tu as les 10 premiers tirés au hazard, en page 2 tu as du 11em au 20em d'un autre tirage.
c'est pas comme au loto, on peut pas jouer une grille pour plusieurs tirages...
  

c'est bien ce qu'il se produit
et a l'euromillions ca marche pas non plus ?

Je n'ai pas trop d'idées pouyr résoudre mon probléme ...
certains d'entre vous ont déjà fait un tri par hasard sur une boucle paginée ?
    
la pagination javascript pour ca, je pense que c'est le mieux.
  

un plugin jquery ? j'en connais un mais il ne trie que sur des <table> ( la flemme de refaire tout l'html :stuck_out_tongue: )

Au pire, je pourrai me faire un cron qui renomme tous les articles en rajoutant le numéro devant et trie par num_titre ?

@++
  

Merci

Yoann NOGUES (zerax) a écrit :

Stephane a écrit :

Yoann NOGUES (zerax) a écrit :

Salut,
Je cherche à faire une boucle d'articles ordonnés par hasard et avec une pagination.
    
par hasard ne peut pas marcher avec de la pagination, sauf à calculer toutes les pages en meme temps...
sinon, nouvelle page = nouveau contexte = nouveau calcul = nouveau hasard.

et si je fais 3 niveaux de boucles d'articles ( imbriquées dans la partie conditionnelle )
le premier niveau avec {par hasard}, le second avec {pagination 10}
et le dernier avec {doublons}
et que je fais une autre boucle avec {!doublons}, je ne peux pas trier et ca ressort selon l'id_article ...

c'est pareil, c'est une question de contexte qui change et donc provoque le recalcul

mais ca aurait été une bonne astuce de sioux ...
et avec ce principe la d'imbrication, je ne pourrais pas, avec des INCLURE faire ce que je cherche ?

pas mieux puisque c'est le recalcul de la boucle par hasard qui pose probleme

J'ai ma boucle dans un inclure donc je lui passe bien le {self=#SELF}.

Par contre sur ma page 2 je retrouve des articles de ma page 1 et vis et versa...
Cela fonctionne apparement comme si le par hasard fonctionne bien mais sur toute la liste et pas seulement sur la page
    
en page 1 tu as les 10 premiers tirés au hazard, en page 2 tu as du 11em au 20em d'un autre tirage.
c'est pas comme au loto, on peut pas jouer une grille pour plusieurs tirages...
  

c'est bien ce qu'il se produit
et a l'euromillions ca marche pas non plus ?

en fait, pour etre juste ca correspond plutot à jouer plusieurs grille sur un meme tirage, et ca on peut au loto...
Alors disons que tu ne peux pas gratter 2 fois le meme morpion

pour que la pagination marche, il faut un self (pour avoir des contextes differents entre 2 pages, sinon le cache de la page 1 est renvoyé en page 2
mais un nouveau contexte implique un nouveau calcul don un nouveau hasard.

pour que ca marche, il faut faire le calcul du hasard dans un contexte qui reste stable d'une page à l'autre et faire le calcul de la pagination dans un contexte qui change d'une page à l'autre et a acces au resultat de la premiere boucle (doublons ou clause IN construite avec des SET).
je crois qu'une solution est :
- de mettre faire une boucle par hasard dans un contexte sans self en y construisant la liste des id
- de mettre la pagination dans un inclure avec un cache à 0 (sans self mais en passant de quoi faire la clause IN)

c'est pas parfait : si le recalcul est fait (expiration du cache ou modif d'un article) entre 2 pages, ca refera la meme chose, mais ca devrait le faire moins souvent.

Je n'ai pas trop d'idées pouyr résoudre mon probléme ...
certains d'entre vous ont déjà fait un tri par hasard sur une boucle paginée ?
    
la pagination javascript pour ca, je pense que c'est le mieux.
  

un plugin jquery ? j'en connais un mais il ne trie que sur des <table> ( la flemme de refaire tout l'html :stuck_out_tongue: )

Au pire, je pourrai me faire un cron qui renomme tous les articles en rajoutant le numéro devant et trie par num_titre ?

le pensais plutot à un truc du genre des onglets (http://www.sunsean.com/idTabs/)

au moins, la tu es sur que les pages sont cohérentes puisqu'elles sont toutes chargées en meme temps.
c'est juste une question de CSS pour que ca ressemble à une pagination, et il suffit de mettre l'onglet avec un #COMPTEUR_BOUCLE|alterner

@++

Stephane <stephane <at> rezo.net> writes:

par hasard ne peut pas marcher avec de la pagination, sauf à calculer
toutes les pages en meme temps...
sinon, nouvelle page = nouveau contexte = nouveau calcul = nouveau hasard.

et si on passe en argument de pagination le tableau des id déjà sortis
et qu'on les exclus ({not in xx,xx,xx,xx}) de la recherche
de la page suivante ?

on ajoute au tableau les sorties de chaque page.

est-ce une idée vraiment idiote ?

<captcha : skits>

...
    

c'est pareil, c'est une question de contexte qui change et donc provoque le recalcul
  

...
    

pas mieux puisque c'est le recalcul de la boucle par hasard qui pose probleme
  

et bien au moins j'aurais tenté

en fait, pour etre juste ca correspond plutot à jouer plusieurs grille sur un meme tirage, et ca on peut au loto ...
Alors disons que tu ne peux pas gratter 2 fois le meme morpion

pour que la pagination marche, il faut un self (pour avoir des contextes differents entre 2 pages, sinon le cache de la page 1 est renvoyé en page 2
mais un nouveau contexte implique un nouveau calcul don un nouveau hasard.

pour que ca marche, il faut faire le calcul du hasard dans un contexte qui reste stable d'une page à l'autre et faire le calcul de la pagination dans un contexte qui change d'une page à l'autre et a acces au resultat de la premiere boucle (doublons ou clause IN construite avec des SET).
je crois qu'une solution est :
- de mettre faire une boucle par hasard dans un contexte sans self en y construisant la liste des id
- de mettre la pagination dans un inclure avec un cache à 0 (sans self mais en passant de quoi faire la clause IN)

c'est pas parfait : si le recalcul est fait (expiration du cache ou modif d'un article) entre 2 pages, ca refera la meme chose, mais ca devrait le faire moins souvent.

Je vais essayer d'abord dans cette voie ... je pense que ca doit être faisable

Au pire, je pourrai me faire un cron qui renomme tous les articles en rajoutant le numéro devant et trie par num_titre ?
    

et cette idée du cron ? elle est stupide ? ( je n'ai qu'une 50 aines d'articles a modifier c'est pas ces update qui vont faire tomber le serveur :p)

le pensais plutot à un truc du genre des onglets (http://www.sunsean.com/idTabs/)

au moins, la tu es sur que les pages sont cohérentes puisqu'elles sont toutes chargées en meme temps.
c'est juste une question de CSS pour que ca ressemble à une pagination, et il suffit de mettre l'onglet avec un #COMPTEUR_BOUCLE|alterner
  

ok ben ca sera ma dernière tentative si le reste marche pas

Merci du coup de main :slight_smile:

Yoann NOGUES (zerax) a écrit :

Au pire, je pourrai me faire un cron qui renomme tous les articles en rajoutant le numéro devant et trie par num_titre ?
    

et cette idée du cron ? elle est stupide ? ( je n'ai qu'une 50 aines d'articles a modifier c'est pas ces update qui vont faire tomber le serveur :p)

non mais c'est le meme probleme : si c'est recalculé entre ma visite de la page 2 et mon clique sur la page 3....
Pierre (Mortimer) avait fait un truc de classement des mots clés à une epoque si je me souviens bien (ajout d'un champ "rang" ou "ordre", c'est plus clean que de modifier le titre).

le pensais plutot à un truc du genre des onglets (http://www.sunsean.com/idTabs/)

au moins, la tu es sur que les pages sont cohérentes puisqu'elles sont toutes chargées en meme temps.
c'est juste une question de CSS pour que ca ressemble à une pagination, et il suffit de mettre l'onglet avec un #COMPTEUR_BOUCLE|alterner
  

ok ben ca sera ma dernière tentative si le reste marche pas

amha, c'est la seule qui marche vraiment.

sinon, une autre piste serait de se faire un critere {par hasard XXX} ou XXX est le hash utilisé pour calculer le champs de classement.

La tu peux eventuellement maitriser la chose en mettant un truc en rapport avec la session de facon à conserver le meme hasard d'une page à l'autre.

mais la pagination javascript, c'est pas compliqué, c'est accessible, et tu n'as pas de prise de tete de cache, l'ensemble est toujours cohérent.
La seule limite, c'est la taille de la page, mais bon, avant que ca fasse 50ko, il faut deja avoir beaucoup de pages.

@++

Stephane a écrit :

Yoann NOGUES (zerax) a écrit :
  

Stephane a écrit :
    

Yoann NOGUES (zerax) a écrit :

Salut,
Je cherche à faire une boucle d'articles ordonnés par hasard et avec une pagination.
    

par hasard ne peut pas marcher avec de la pagination, sauf à calculer toutes les pages en meme temps...
sinon, nouvelle page = nouveau contexte = nouveau calcul = nouveau hasard.

Salut,
j'ai fait un truc du genre avec un cache élevé ( 48 H )
j'ai mon squelette de rubrique a l'intérieur duquel je fais un include :

<INCLURE{fond=liste-ent}{id_rubrique}{id_mot=#ENV{id_mot}}{self=#SELF}>

et dans le fichier inclus j'ai :

<BOUCLE_select_articles(ARTICLES){id_rubrique}{id_mot?}{par hasard}{doublons}>

</BOUCLE_select_articles>

<BOUCLE_liste_ent(ARTICLES){!doublons}{pagination 10}>
#TITRE
</BOUCLE_liste_ent>

alors d'aprés ce que tu m'as dit a chaque calcul de page ( a chaque chargement de page quoi ) on modifie la boucle par hasard ?
Dans mon cas sur une 30aine de chargement de pages en changeant de page à chaque fois je n'ai pas constaté de dysfonctionnement ...

voir ici l'url :
http://www.batiancien-ariege.com/spip.php?rubrique4 je testerai aprés quelques jours de mises en place pour voir si je n'ai pas de bugs... mais bon si je suit ce que tu disais stéphane ... je devrais en avoir

Merci du coup de pouce :slight_smile:

Yoann NOGUES (zerax) a écrit :

Stephane a écrit :
  

Yoann NOGUES (zerax) a écrit :
  

Stephane a écrit :
    

Yoann NOGUES (zerax) a écrit :

Salut,
Je cherche à faire une boucle d'articles ordonnés par hasard et avec une pagination.
    

par hasard ne peut pas marcher avec de la pagination, sauf à calculer toutes les pages en meme temps...
sinon, nouvelle page = nouveau contexte = nouveau calcul = nouveau hasard.
        

Salut,
j'ai fait un truc du genre avec un cache élevé ( 48 H )
j'ai mon squelette de rubrique a l'intérieur duquel je fais un include :

<INCLURE{fond=liste-ent}{id_rubrique}{id_mot=#ENV{id_mot}}{self=#SELF}>

et dans le fichier inclus j'ai :

<BOUCLE_select_articles(ARTICLES){id_rubrique}{id_mot?}{par hasard}{doublons}>

</BOUCLE_select_articles>

<BOUCLE_liste_ent(ARTICLES){!doublons}{pagination 10}>
#TITRE
</BOUCLE_liste_ent>
  

je me réponds a moi-même en me jetant des pierres ... forcement qu'il n'y a pas de bugs vu que ce n'est pas un tri par hasard ... bon je creuse ... désolé du bruit