Dotclear

Vous n'êtes pas identifié(e).

Annonce

13 février 2024 Sortie de Dotclear 2.29

#1 2011-04-18 11:24:16

osku
Membre
Lieu : 28
Inscription : 2005-06-15

Du tri aléatoire d'une liste de billets

Hello,

Voici la seule solution que j'ai trouvé pour proposer le tri aléatoire d'une liste de billets en quelques lignes :

<?php
$core->addBehavior('templateCustomSortByAlias',array('behaviorsShuffle','templateCustomSortByAlias'));
class behaviorsShuffle 
{	
	public static function templateCustomSortByAlias($alias)
	{
		if (DC_DBDRIVER == 'pgsql' ) {
			$alias['post']['shuffle'] = 'RANDOM()';
		} elseif (DC_DBDRIVER == 'mysql') {
			$alias['post']['shuffle'] = 'RAND()';
		}
	}
}
?>

Puis dans une boucle de Entries :

<tpl:Entries sortby="shuffle">

J'ai conscience que c'est couteux en termes de base de données puisqu'on parcourt toute la base pour faire le tri. Si vous l'utilisez, faites donc gaffe aux éventuelles railleries de votre hébergeur...

Hors ligne

#2 2011-04-18 21:26:06

alexpirine
Membre
Inscription : 2010-08-26

Re : Du tri aléatoire d'une liste de billets

Récupérer les identifiants puis array_rand suivi de $…->con->in() serait peut-être meilleur ?


Alex Pirine ~ 0xB936CB63F011A844 on pgp.mit.edu

Hors ligne

#3 2011-04-18 21:48:36

JcDenis
Membre
Lieu : Lyon, France
Inscription : 2007-08-31
Site Web

Re : Du tri aléatoire d'une liste de billets

Je répond à la place d'osku,
Lorsqu'on fait un getPosts avec $...->con->in() quelques part dans le code il y a un array_walk qui reclasse les ids.


Cordialement,
_JC | Intérimaire | En mode invisible

Hors ligne

#4 2011-04-19 05:57:07

osku
Membre
Lieu : 28
Inscription : 2005-06-15

Re : Du tri aléatoire d'une liste de billets

Merci JC.

Et surtout, cette condition permet juste de contrôler que notre post_id est bien dans la liste donnée.

Plus loin dans le code, tu as toujours ce satané order_by qui fera le tri..

J'avais pensé aussi à la conversion du recordset en tableau, utiliser une fonction du type shuffle() puis retransformer en recordset en réécrivant juste une nouvelle balise ShuffleEntries) mais patatrac, les extensions de recordset tombaient alors en erreur.

Hors ligne

#5 2011-04-19 07:49:12

Philippe
Stagiaire
Lieu : Toulon
Inscription : 2004-06-13
Site Web

Re : Du tri aléatoire d'une liste de billets

Pour le plugin Last Images, zeiram m'avait aidé à écrire une fonction permettant de tirer une liste de billets au hasard, ça donnait quelque chose comme :

$rsp = $core->blog->getPosts($params);

$nb_billets = $rsp->count();
$randIDs = array();
for ($j = 0; $j < $nb_billets; $j++) {

	$id = mt_rand(0, $nb_billets - 1);
	$key_attempts = 0;
	while (array_key_exists($id, $randIDs) && $key_attempts < 20) {
		$id = mt_rand(0, $nb_billets - 1);
		$key_attempts++;
	}
	$randIDs[$id] = TRUE;
	$rsp->index($id);
			
	$url = $rsp->getURL();
}

C'est peut-être utilisable dans ton cas ?

Hors ligne

#6 2011-04-19 07:56:30

osku
Membre
Lieu : 28
Inscription : 2005-06-15

Re : Du tri aléatoire d'une liste de billets

Merci. Pour un widget, pas de souci.

Je cherchais juste la solution la plus courte (et élégante) possible pour directement interférer dans une boucle <tpl:Entries>

Hors ligne

#7 2012-10-14 17:54:41

sebcaverne
Membre
Lieu : Plumergat (Morbihan)
Inscription : 2009-08-07
Site Web

Re : Du tri aléatoire d'une liste de billets

C'est exactement ce que j'aimerais mettre en place pour mon site... par contre, je suis développeur du dimanche... Un ami pourrait m’aiguiller ?

Hors ligne

#8 2012-12-11 09:14:37

Brit Hotel Dax
Membre
Inscription : 2012-12-11
Site Web

Re : Du tri aléatoire d'une liste de billets

sebcaverne a écrit :

C'est exactement ce que j'aimerais mettre en place pour mon site... par contre, je suis développeur du dimanche... Un ami pourrait m’aiguiller ?

+1, c'est aussi ce que j'aimerais faire. Si quelqu'un peut me donner un coup de main ?

Hors ligne

#9 2012-12-11 13:17:38

Lomalarch
Responsable du photocopieur
Lieu : Colombes (92)
Inscription : 2006-05-02
Site Web

Re : Du tri aléatoire d'une liste de billets

Vous pouvez essayer d’intégrer le code donné dans le premier message de ce fil dans un fichier _public.php dans le dossier de votre thème (et intégrer le sortby="shuffle" dans la balise <tpl:Entries> de votre thème).


RTFM attitude : https://fr.dotclear.org/documentation/2.0
Le chantier tips, tutos et astuces : http://tips.dotaddict.org/
Rien nulle part??? une petite recherche sul’ forum, alors?: https://forum.dotclear.org/search.php ?

Hors ligne

Vous n'êtes pas identifié(e).

Pied de page des forums

Sites map