Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Вебмастеру (http://forum.oszone.net/forumdisplay.php?f=22)
-   -   Автоизменение темы. (http://forum.oszone.net/showthread.php?t=70878)

CTEPBA 05-09-2006 22:30 481393

Автоизменение темы.
 
у меня на сайте например есть несколько тем, как сделать так чтобы они ставились случайно при каждом заходе на сайт, т.е. один вошел у него такая тема потом вошел друггой, а у него другая. Можно применять php, javascript.

XCodeR 05-09-2006 22:57 481401

Что Вы подразумеваете под словом "тема"? Строка? или графическое оформление?
проверю свою навыки телепатии и предположу что имеется ввиду графическое оформление.

Мой вариант решения проблемы на PHP.

1. Создаем массив со всеми необходимыми нам элементами дизайна:

$tpl['name_of_design_part'][id] = "путь к изображению";

name_of_design_part - название части дизана например menu_item,top,logo и т.д. и т.п.

2. в начале страницы запускаем генератор случайных чисел и выбираем id, записываем его в переменную $rid

$rid=rand(0,max_ids) ;

max_ids - максимальное количество дизайнов(т.е. кол-во элементов массива)

3. В дизайне каждую изменяемую картинку описываем ввиде:
<img src=<?=$tpl['name_of_design_part'][$rid]?>>

Полный "собранный" пример:
HTML код:

<?
$tpl[top][0]="top0.jpg";
$tpl[top][1]="top1.jpg";
$tpl[top][2]="top2.jpg";

$tpl[left][0]="left0.jpg";
$tpl[left][1]="left1.jpg";
$tpl[left][2]="left2.jpg";

$tpl[right][0]="right0.jpg";
$tpl[right][1]="right1.jpg";
$tpl[right][2]="right2.jpg";

$rid=rand(0,2) ;
?>

<html>
<body>
<table>
<tr>
<Td colspan=2>
<img src=<?=$tpl['top'][$rid]?>
</tr>
<tr>
<td><img src=<?=$tpl['left'][$rid]?>
<td><img src=<?=$tpl['right'][$rid]?>
</tr>
<tr>
<td colspan=2>
<img src=<?=$tpl['bottom'][$rid]?>
</tr>
</body>
</html>


CTEPBA 05-09-2006 23:44 481413

XCodeR
Большое спасибо. всё верно поняли!

CTEPBA 06-09-2006 18:27 481790

А вот такой впорос:
Еслия это всё запихну в header.php, а при переходе пользвателя на другую страницу оформление может скорей всего смениться.
Как сделать так чтобы оформление выбиралось только при заходе на сайт и не менялось пока пользователь не закроет блаузер?
Мне кажеться что для это нужно каждому пользователю открывать сессию, в которой будет храниться текущая тема.

Prisoner 06-09-2006 19:10 481804

Достаточно сохранять идентификатор темы в кукисах, сессия для этого - громоздкое оружие. Конечно имя темы в куках надо будет проверять с точки зрения безопасности.

Strange_V 06-09-2006 19:13 481806

Или открывать сессию или передавать Get параметр.
И первое и второе имеет свои недостатки…
Можно просто ставить куки, но это почти та же сессия.

CTEPBA 06-09-2006 20:58 481836

Ладно, всё понятно, буду скорей всего делать через куку и придеться ее фильтровать!

Prisoner 07-09-2006 00:04 481877

Strange_V, э нет, "не таже" и не "почти". Для сессии кукис это по сути "транспорт". Сессия это именованная идентификатором область данных (в файловой системе, базе данных и т.д. в зависимости от обработчиков сессий) с одной общей чертой - область находится на стороне сервера. кукис же - на стороне клиента. В общем случаем в кукисах (если выбран этот способ хранения идентификатора сессии) хранится указатель на сессию.

В данном случае гораздо проще хранить строку или число идентификатора темы в кукисах, нежели хранить в них ссылку на сессию в которой хранится этот идентификатор.

Strange_V 07-09-2006 00:58 481892

2Prisoner Полностью согласен.
Только нужно не забывать что куки в пользователя могут бить отключены... хотя это не смертельно (ну не будут у него рендом тем…)

CTEPBA 07-09-2006 21:20 482238

Будет у него рендом, только при открытии новой страници, будет новая тема, ну или при попаданиии еще раз на главную.

Strange_V 07-09-2006 22:24 482258

IMHO, это не правильно.
Я захожу на главную (куки откл.) мне рендомится тема, перехожу по какой-то ссылке (идентификатор не передается), а там другая тема… не красиво.
По этому если куки отключены, лучше грузить тему по умолчанию.

CTEPBA 08-09-2006 01:12 482305

Тогда можно использовать сессию. Для каждого пользователя открыавать сессию и с помощью ее передовать индикатор темы. После закрытия блаузера сессия изчезает, если юзер зайдет еще раз на сайт он уже получит новую тему на данный сеанс. Вроде так можно.

Strange_V 08-09-2006 19:15 482697

Можно но...
Лично я сделел бы куками, а если отключены - грузил бы тему по умолчанию.
(смена тем это же просто дополнительная фича...)

CTEPBA 08-09-2006 22:45 482747

А чем же так плохи сессии?

Prisoner 09-09-2006 00:21 482785

Ничем. Более того - они просто жизненно необходимы. Но не везде :). Вот скажите, Вы курите? Даже если и нет, то как часто вы видили, что сигарету поджигают с помощью паяльной лампы предварительно ее разогрев? Наверное не часто. Тормозящий момент тут - геморрои в возьне с оборудованием. В программировании все проще ввиду нематериальности мира как данности. Вот и получается, что порой такое напрограммируешь, что на утро единственное картина приходящая в голову при виде своего же кода это картина маслом и сыром "удаление гланд через заднепроходный канал автогеном" :). Но это все лирика. Ответом на Ваш вопрос будет одно слово - производительность. Ну быть может еще и логика. Зачем таскать от страницы к странице указатель на данные (идентификатор темы), каждый раз заставлять скрипт отрывать сессию по указателю пришедшему из броузера, лезть в файл сессии и уже там брать данные. Ведь достаточно в самой куке просто и надежно все хранить. Поверьте, если Вам вдруг повезет на человека который отключил все кукисы, то такому человеку тем более не нужны Ваши распростертые объятия в виде нескольких цветовых оформлений :).

CTEPBA 09-09-2006 15:48 482914

Ладно понятно, псомотрим что там можно будет сделать.


Время: 02:56.

Время: 02:56.
© OSzone.net 2001-