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

Steeve

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é.

Commentaires (0)





Tags autorisés : <b><i><br> Ajouter un nouveau commentaire :