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 ;-)
tutoCMS.fr
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é.