Чтобы сайт не выглядел застывшим, обычно стараются какой-либо из его элементов (фото, цитату, шапку) выбирать случайным образом из нескольких возможных вариантов.
Если на вашем хостинге есть PHP или CGI и вы знаете как с ними управляться, то эта статья вам не нужна. И даже если не очень знаете, то имеется большое число готовых PHP\CGI скриптов, решающих эту задачу.
Но проблема в том, что на некоторых хостингах (особенно бесплатных) не включены PHP\CGI. Тогда задачу случайного вывода элемента обычно возлагают на Java script. Это не лучшее решение. Во-первых, у некоторых пользователей Java выключена и они не увидят ваших усилий. А те юзеры, у которых Java включена будут вынуждены сгружать к себе весь массив (текстов или фотографий), что увеличивает время загрузки, и потом обрабатывать его сгруженным Java script`ом на своем компьютере. То есть при Java script мы зависим от настроек пользователя, ширины его канала и загрузки компьютера. Нехорошо.
Чтобы этого не было, надо, чтобы сервер сразу отдал пользователю готовую страницу, которую не надо дополнительно обрабатывать. Но, как мы помним, PHP\CGI у нас нет, или мы не можем ими пользоваться. Что остается? Единственная возможность использовать SSI (server side include).
SSI поддерживает большинство хостингов. А в тех, которые официально не поддерживают, можно попытаться включить SSI следующей строкой:
AddHandler server-parsed .shtml .shtm .html .htm
в файле .htaccess. При этом SSI директивы будут исполняться и в html\htm файлах. Такой способ включения SSI хостеры обычно не рекомендуют (он увеличивает нагрузку на сервер), но бывают случаи, когда иного выхода нет.
Итак, SSI у нас есть. А что с ним делать? Ведь в SSI нет массивов и математических функций (поэтому чистый случайный выбор можно забыть, максимум мы можем сделать лишь что-то псевдослучайное). Зато есть получение текущего времени от сервера и оператор условия: что вставлять в код страницы, в зависимости от выполнения этого условия.
Довольно просто на SSI можно реализовать следующую логику: "Если последняя цифра секунд текущего времени оканчивается на 0, то показать картинку 0.jpg, если на 1 – 1.jpg, ..... если на 9 – 9.jpg". Ясно, что это не совсем случайный выбор. Но посетитель сайта этого не заметит. Каждый его заход будет в различное (и случайное) время, следовательно и картинку он получит практически случайную.
Вот SSI код (левый столбец зеленым шрифтом, справа только пояснения, не входящие в код), реализующий псевдослучайную выборку из 10 картинок:
<!-- Старт вставки случайной картинки //--> | Начало |
<!--#config timefmt="%S" --> <!--#set var="NUM_SEC" value="$DATE_LOCAL" --> |
Получаем текущее время от сервера в формате секунд |
<!--#if expr="$NUM_SEC = /0$/" --> <img border="0" src="0.jpg"> |
Если цифра секунд кончается на 0, то вставить в код страницы : <img border="0" src="0.jpg"> |
<!--#elif expr="$NUM_SEC = /1$/" --> <img border="0" src="1.jpg"> <!--#elif expr="$NUM_SEC = /2$/" --> <img border="0" src="2.jpg"> <!--#elif expr="$NUM_SEC = /3$/" --> <img border="0" src="3.jpg"> <!--#elif expr="$NUM_SEC = /4$/" --> <img border="0" src="4.jpg"> <!--#elif expr="$NUM_SEC = /5$/" --> <img border="0" src="5.jpg"> <!--#elif expr="$NUM_SEC = /6$/" --> <img border="0" src="6.jpg"> <!--#elif expr="$NUM_SEC = /7$/" --> <img border="0" src="7.jpg"> <!--#elif expr="$NUM_SEC = /8$/" --> <img border="0" src="8.jpg"> <!--#elif expr="$NUM_SEC = /9$/" --> <img border="0" src="9.jpg"> |
То же самое, что и предыдущем пункте, только по очереди проверяем цифры от 1 до 9. И вставляем в html описание соответствующей цифре картинки |
<!--#endif --> <!-- Конец вставки случайной картинки //--> |
Выход |
Вот этот код в текстовом файле.
Результаты работы данного скрипта можно увидеть на www.dl2kq.de, им меняется картинка в центре страницы. В коде же страницы увидеть ничего нельзя – все делает сервер, отдавая пользователю только 1 строку результата своей работы – вставляемую картинку.
Вместо описания картинок (то, что в вышеприведенном коде имеет вид <img border="0" src="0.jpg">) может быть вставлен любой кусок html кода, например, текст приветствия или цитаты.
Если элементов меньше, чем 10 (например 5), то их просто вставляют дважды. Например, 1-я картинка вставляется в 0-ю и в 5-ю секунды, 2-я – в 1-ю и в 6-ю секунды, и т.п.
Если элементов больше 10, то можно использовать не одну последнюю, а две цифры секунд. При этом можно вставлять до 60-ти элементов. Изменения в коде при этом минимальные: сначала copy-paste увеличить число строк до 60 и изменить запись секунд с одной на две цифры. Так:
<!-- Старт вставки случайного текста //-->
<!--#config timefmt="%S" -->
<!--#set var="NUM_SEC" value="$DATE_LOCAL" -->
<!--#if expr="$NUM_SEC = /00$/" -->
Вставляемый текст 0
<!--#elif expr="$NUM_SEC = /01$/" -->
Вставляемый текст 1
<!--#elif expr="$NUM_SEC = /02$/" -->
Вставляемый текст 2
....
<!--#elif expr="$NUM_SEC = /59$/" -->
Вставляемый текст 59
<!--#endif -->
<!-- Конец вставки случайного текста //-->
Результаты работы данного скрипта можно увидеть на www.dl2kq.de, им выбирается анекдот слева. В коде же страницы увидеть ничего нельзя – все делает сервер, отдавая пользователю только выбранный анекдот.
Bonn, 13.09.2010 На главную - Main page >>