Вывод блоков в случайном порядке

R
На сайте с 30.05.2007
Offline
163
1245

Доброго времени суток! Прошу Вашей помощи: есть сайт на движке DataLife Engine (DLE). В шаблоне, в "Общий макет страницы" имеются блоки (код ниже), таких различных блоков около 80.

На сайте они отображаются следующим образом:

У всех блоков одинаковый код (за исключением "<div class="left_1_NN"> - это маленькая картинка слева, а также за исключением ссылки и текста), один из блоков:

<div class="left_2">
<div class="left_1_35">
<div class="left_3">
<h1 class="link_blog">Ваше мнение о ЕГЭ</h1>

<table width="251" height="53" border="0" cellpadding="0" cellspacing="0" id="blog_1">
<tr>
<td width="106" scope="col">&nbsp;</td>

<td width="145" scope="col">
<a href="url.php"><strong>У ЕГЭ есть сторонники и противники. Кем являетесь Вы? У Вас есть своя точка зрения?</strong></a>
</td>
</tr>
</table>
<h2>&nbsp;</h2>
</div>
</div></div>

Что мне нужно:

1. Чтобы на странице выводилось 5 блоков.

2. Блоки выводились в случайном порядке (рандомно).

3. Как-то сделать так, чтобы, например, 5,7,10,17,70,63,15 и 80 блоки одновременно не выводились на странице.

Подскажите, пожалуйста, как это реализовать?

Заранее благодарю.

EA
На сайте с 15.02.2007
Offline
29
#1

$input = array ("block 1", "block 2", "block 3", "block 4", "block 5");  //ваши блоки

$rand_keys = array_rand ($input, 5);

//вывод блоков
echo $input[$rand_keys[0]];
echo $input[$rand_keys[1]];
echo $input[$rand_keys[2]];
echo $input[$rand_keys[3]];
echo $input[$rand_keys[4]];

как 3 условие реализовать незнаю.

"Конкурс" (/ru/forum/201132) и "Фото конкурс" (/ru/forum/212504) для DLE.
O
На сайте с 03.02.2008
Offline
0
#2


$rand_keys = array();
for ($i = 0; $i < 5; $i++)
{
$rnd = rand(0, count($input));
while (in_array($rnd, $rand_keys) $rnd = rand(0, count($input));
$rand_keys += array(count($rand_keys) => $rnd);
}

Это только приближенно.

mfl
На сайте с 16.10.2006
Offline
134
mfl
#3

<?

$input = array ("block 1", "block 2", "block 3", "block 4", "block 5"); //ваши блоки
$povtor = array (5,7,10,17,70,63,15,80);

// перемешиваем
shuffle($povtor);
// удаляем первый элемент массива
$povtor = array_slice ($povtor, 1);
// меняем местами ключи и значения
$povtor = array_flip($povtor);

$i=0;
while($i<80) {
if(!isset($povtor[++$i])) { $out[]=$input[$i-1]; }
}
shuffle($out);
print $out[0];
print $out[1];
print $out[2];
print $out[3];
print $out[4];
?>
R
На сайте с 30.05.2007
Offline
163
#4
el_aspect:
$input = array ("block 1", "block 2", "block 3", "block 4", "block 5"); //ваши блоки

А не подскажете, как мои блоки разместить в одной строке?..

mfl
На сайте с 16.10.2006
Offline
134
mfl
#5

Помещаешь все блоки в один файл (к примеру blok.html)

между блокми ставишь разделитель (к примеру "~~delimiter~~")


<?
// открываем файл
$input=file_get_contents("blok.html");
// разбиваем в массив
$input=explode("~~delimiter~~", $input);

$povtor = array (5,7,10,17,70,63,15,80);

// перемешиваем
shuffle($povtor);
// удаляем первый элемент массива
$povtor = array_slice ($povtor, 1);
// меняем местами ключи и значения
$povtor = array_flip($povtor);

$i=0;
while($i<80) {
if(!isset($povtor[++$i])) { $out[]=$input[$i-1]; }
}
shuffle($out);
print $out[0];
print $out[1];
print $out[2];
print $out[3];
print $out[4];
?>

файл blok.html


block 1
~~delimiter~~
block 2
~~delimiter~~
block 3
~~delimiter~~
block 4
~~delimiter~~
block 5

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий