К содержанию

Как реализовать случайные li для ul?

Как можно сделать, что бы для одного ul выдавало несколько случайных li. Допустим из 10 li, будет выходить рандомные 3?
Денис Мавлютов
Денис Мавлютов
08 февраля 2017, 11:15
modx.pro
1 524
Реклама

Комментарии: 5

Максим Кузнецов
Максим Кузнецов Проверенный
08 февраля 2017, 15:34
1. Создаем сниппет (random_list):
<?php
	$total = intval($total);
	$list = explode("||", $input);
	
	$random_items = array_rand($list, $total);
	
	$result = '';
	for ($i = 1; $i <= $total; $i++) {
		$result .= '<li>' . $list[$random_items[$i - 1]] . '</li>';
	}
	
	return $result;

2. Вызываем:
<ul>
	[[!random_list? &input=`Значение1||2||3||десять||8` &total=`3`]]
</ul>
    Денис Мавлютов
    Денис Мавлютов Старожил
    08 февраля 2017, 15:37
    Ох, забыл написать что решено. Вот как я сделал. Спасибо за помощь.
    <?php
    $input = array(
    '<a href="#"><li>...</li></a>',
    '<a href="#"><li>...</li></a>',
    '<a href="#"><li>...</li></a>',
    '<a href="#"><li>...</li></a>',
    '<a href="#"><li>...</li></a>',
    '<a href="#"><li>...</li></a>',
    '<a href="#"><li>...</li></a>',
    '<a href="#"><li>...</li></a>',
    '<a href="#"><li>...</li></a>',
        );
    
    echo '<ul>';
    $rand_keys = array_rand($input, 3);
    
    	echo '<li>' . $input[$rand_keys[0]] . '</li>';
    	echo '<li>' . $input[$rand_keys[1]] . '</li>';
    	echo '<li>' . $input[$rand_keys[2]] . '</li>';
    
    echo '</ul>';
      Konstantin
      Konstantin Проверенный
      08 февраля 2017, 16:42
      сниппет не должен делать echo он лишь возвращать должен массив, а чанк этот массив распечатывает!
        Денис Мавлютов
        Денис Мавлютов Старожил
        08 февраля 2017, 16:44
        То есть, лучше сделать как приведенный пример выше?
          Konstantin
          Konstantin Проверенный
          08 февраля 2017, 16:59
          Сниппет возвращает данные, чанки возвращают результат в виде html

          Даже в примере выше li был лишним
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    5