Vous n'êtes pas identifié(e).
13 février 2024 Sortie de Dotclear 2.29
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
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
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
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
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
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
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
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
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).