MODX : Afficher des chunks aléatoirement grace à ce petit snippet
- 12 octobre 2018
- Steeve
Dans ce tutoriel vous trouverez une solution rapide pour afficher des Chunk en mode aléatoire grâce a un petit snippet que je vous donne plus bas
/* * * Created on: 08/10/18 * Project randomChunk * Created by Steeve for tutocms.fr * * DESCRIPTION * * This snippet will return chunks in a random order. * * PROPERTIES: * * &chunks string of all name chunks comma separated. Required! * &howManyChunks integer. If not define all chunks will be displayed. * */ $chunks = $modx->getOption('chunks', $scriptProperties); $howManyChunks = $modx->getOption('howManyChunks', $scriptProperties); $output = false; $chunksArray = explode(",", $chunks); $totalChunks = count($chunksArray); // ERRORS if (!isset($scriptProperties['chunks'])) { $modx->log(modX::LOG_LEVEL_ERROR, '[randomChunk] missing required properties &chunks!'); return; } if (isset($scriptProperties['howManyChunks']) && $howManyChunks > $totalChunks) { $modx->log(modX::LOG_LEVEL_ERROR, '[randomChunk] howManyChunks properties is bigger than the number of chunks'); return; } // rand the array (keep assoc key => value) function arrayKeyShuffle(&$array) { if(!is_array($array) || empty($array)) { return false; } $tmp = array(); foreach($array as $key => $value) { $tmp[] = array('k' => $key, 'v' => $value); } shuffle($tmp); $array = array(); foreach($tmp as $entry) { $array[$entry['k']] = $entry['v']; } return true; } // shuffle chuks array arrayKeyShuffle($chunksArray); if(isset($scriptProperties['howManyChunks'])) { $i=0; $rand_keys = array_rand($chunksArray, $howManyChunks); // return number of chunks asked in howManyChunks properties in a random order while ($i getChunk($chunksArray[$rand_keys[$i]],array()); $i++; } }else{ // return random all chunks foreach ($chunksArray as $chunk) { $output .= $modx->getChunk($chunk,array()); } } return $output;
Si vous avez des connaissance en PHP pas besoin de vous expliquer mon code.
[[!randomChunk? &chunks=`firstChunkName,secondChunkName,nameofchunk,anotherChunk`]]
De cette façon vous obtiendrais (normalement) tous les chunks qui sont nommés dans le paramètre &chunks dans un ordre aléatoire
[[!randomChunk? &chunks=`firstChunkName,secondChunkName,nameofchunk,anotherChunk` &howManyChunks=`2`]]
Avec cette deuxième version vous obitendrez aussi les chunks dans un ordre aléatoires mais seulement 2 chunks car vous pouvez voir le nouveau paramètre &howManyChunks qui est paramétré a 2.
Voilà, j’espère que mon petit outil vous sera utile et comme d’habitude n’hésitez pas à commenter et à partager mon article ça m’incitera à en écrire d’autre ;-)
Partagez cet article
A propos de l'auteur
Passionné d’informatique, de Design, de développement d'application et du Web en général (participation au start-up weekend, hackathon, dev Var, formation Google...), j’ai créé ce site afin de partager mes connaissances sur mon système de gestion de contenu préféré MODX. En espérant participer au développement de la communauté.