Dr.Freddy Опубликовано 3 Июня 2005 Жалоба Поделиться Опубликовано 3 Июня 2005 Модификация должна научить форум при заходе гостя, бота и юзера отображать в заголовке форума не один стандартный логотип, а выбирать его из нескольких существующих случайным образом. Выбранный логотип должен оставаться неизменным на протяжении всей сессии посетителя. Код я написал. Есть некоторые проблемы (об этом чуть позже). Хотелось бы уточнить у профессионалов корректность кода и возможные логические ошибки. 0. Заводим поле logo (int) в таблице ibf_sessions. 1. Создаём в папке style_images/1/ папку folder_forum_logos и заливаем туда логотипы с названиями от 0: например, 0.png, 1.png, 2.png и т.п. 2. Открываем functions.php и добавляем в класс FUNC новую функцию: function get_random_variable($max_value=RAND_MAX) { mt_srand( time() + (double)microtime() * 1000000 ); return mt_rand( 0, $max_value ); } 3. Через админпанель создаём в группе настроек General Configuration переменную logos_count. Не забываем включить настройку «Add this option into the settings cache?». 4. Открываем class_sessions.php и ищем три функции: create_bot_session, create_guest_session и create_member_session. Они собственно и занимаются созданием соответствующих сессий на форуме. В каждой из них есть запрос $DB->do_shutdown_insert; добавляем в него такую конструкцию: 'logo' => $std->get_random_variable( $ibforums->vars['logos_count'] ), 5. Добавляем в class_sessions.php переменную logo:var $logo = 0; 6. Ищем функцию get_session. В ней ищем строчку $this->session_id = $result['id']; и после неё добавляем:$this->logo = $result['logo']; 7. В самые конец функции authorise, перед return $this->member добавляем:$this->member['logo'] = $this->logo; 8. Открываем class_display.php. В нём передаём в фрагмент номер лого, то есть вместо $this_header = $ibforums->skin_global->global_board_header() у нас получится $this_header = $ibforums->skin_global->global_board_header($ibforums->member['logo']). 9. Открываем шаблон All Global HTML и во фрагменте global_board_header меняем код между комментариями <!--ipb.logo.start--> и ><!--ipb.logo.end--> на:<img src='style_images/<#IMG_DIR#>/folder_forum_logos/{ipb.member['logo']}.png' style='vertical-align:top' border='0' />Кроме этого, меняем передаваемые фрагменту переменные на $logo="0". Это всё. Модификация вполне корректно работает, за исключеним одного неприятного момента: при попытке стереть все кукисы борды через ссылку на главной странице (это которая act=Login&CODE=06) страница обновляется, но код модификации почему-то не выполняется и выводится 0-е лого (заданное во фрагменте и скрипте по умолчанию). Почему? Сессия, между тем, в таблице появляется новая, с новым логотипом, и при повторном обновлении страницы он загружается. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Vic'er Опубликовано 3 Июня 2005 Жалоба Поделиться Опубликовано 3 Июня 2005 0. Заводим поле logo (int) в таблице ibf_sessions. Совершенно лишнее, достаточно воспользоваться PHP сессиями и соответственно в 3 раза уменьшить кол-во изменений Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
urisoft Опубликовано 3 Июня 2005 Жалоба Поделиться Опубликовано 3 Июня 2005 Dr.Freddy4. Открываем class_sessions.php и ищем три функции: create_bot_session, create_guest_session и create_member_session. Они собственно и занимаются созданием соответствующих сессий на форуме. В каждой из них есть запрос $DB->do_shutdown_insert; добавляем в него такую конструкцию: 'logo' => $std->get_random_variable( $ibforums->vars['logos_count'] ),Модификация вполне корректно работает, за исключеним одного неприятного момента: при попытке стереть все кукисы борды через ссылку на главной странице (это которая act=Login&CODE=06) страница обновляется, но код модификации почему-то не выполняется и выводится 0-е лого (заданное во фрагменте и скрипте по умолчанию). Почему?В пункте 4. заменить код 'logo' => $std->get_random_variable( $ibforums->vars['logos_count'] ),на 'logo' => $this->logo,и в create_X_session, где нибудь перед запросом добавить:$this->logo = $std->get_random_variable( $ibforums->vars['logos_count'] ); Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Dr.Freddy Опубликовано 4 Июня 2005 Автор Жалоба Поделиться Опубликовано 4 Июня 2005 urisoft, верно. Спасибо. Vic'er, я не имею опыта работы с ними. Предлагаешь вместо записи в базу поставить в функцию authorize нечто вроде:session_name("LogoEngine"); if !session_is_registered("logo") { session_start(); session_register("logo");} Как правильно? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
kastrator Опубликовано 4 Июня 2005 Жалоба Поделиться Опубликовано 4 Июня 2005 А как насчет автосмены логотипа: день/ночь? как у Дэккера на форуме =) Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Dr.Freddy Опубликовано 5 Июня 2005 Автор Жалоба Поделиться Опубликовано 5 Июня 2005 А как насчет автосмены логотипа: день/ночь? как у Дэккера на форуме =)Немногим сложнее, по-моему. Анализируй std'шную get_date. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
maninlove13 Опубликовано 21 Июля 2005 Жалоба Поделиться Опубликовано 21 Июля 2005 А может кто-нибудь поподробнее про смену логотипа в зависимости от времени суток? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Dr.Freddy Опубликовано 24 Июля 2005 Автор Жалоба Поделиться Опубликовано 24 Июля 2005 mainlove13, нужно просто определить время юзера и соответственно передать в шаблон шапки форума (global_board_header) имя файла с соответствующим логотипом. Я, например, вот так делал: $welcome_type = gmdate('H', time() + ( $ibforums->member['time_offset']*3600 ) + ( $ibforums->vars['time_adjust'] * 60 ) ); if ($welcome_type >= 0 ) { $welcome_msg = $ibforums->lang['welcome_night']; }; if ($welcome_type >= 6 ) { $welcome_msg = $ibforums->lang['welcome_morning']; }; if ($welcome_type >= 12 ) { $welcome_msg = $ibforums->lang['welcome_day']; }; if ($welcome_type >= 18 ) { $welcome_msg = $ibforums->lang['welcome_evening']; }; welcome_msg .= '<a href="'.$ibforums->script_url.'index.php?showuser='.$ibforums->member['id'].'">'.$ibforums->member['name'].'</a> !';Т.е. определяем час юзера и оцениваем, какое сейчас время суток. Это, впрочем, для приветствий. Ну, чтобы писалось, например, «Добрый вечер» вместо «Привет». P.S. Кстати, оно не совсем корректно работает — с опозданием на час. Коллеги, какой-нибудь глупой ошибки не видите? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
maninlove13 Опубликовано 24 Июля 2005 Жалоба Поделиться Опубликовано 24 Июля 2005 спасибо! респект Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Din2 Опубликовано 24 Июля 2005 Жалоба Поделиться Опубликовано 24 Июля 2005 P.S. Кстати, оно не совсем корректно работает — с опозданием на час. Коллеги, какой-нибудь глупой ошибки не видите?Я, конечно, не "коллега"(т.е. не кодер) - Может дело в "переходе на летнее/зимнее время", в часности в личных настройках у юзера не стоит галочка в соответствующем поле?http://smilies.sofrayt.com/%5E/aiw/blush2.gif Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
xren Опубликовано 24 Июля 2005 Жалоба Поделиться Опубликовано 24 Июля 2005 А если бы еще привязать логотип к разделу форума, была бы вообще лафа Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Dr.Freddy Опубликовано 25 Июля 2005 Автор Жалоба Поделиться Опубликовано 25 Июля 2005 Din, угу, мне это тоже в голову пришло. Галочка, увы, стоит. xren, в смысле? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
GiV Опубликовано 25 Июля 2005 Жалоба Поделиться Опубликовано 25 Июля 2005 Din, угу, мне это тоже в голову пришло. Галочка, увы, стоит. галочка то может и стоит, но вы ее не учитываете в коде. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
wolfoo7 Опубликовано 29 Июля 2005 Жалоба Поделиться Опубликовано 29 Июля 2005 У меня такой вопрос можно ли это все со флешем реализовать Просто тогда надо будет 1 фрагмент точно заменить <img src='style_images/<#IMG_DIR#>/folder_forum_logos/{ipb.member['logo']}.png' style='vertical-align:top' border='0' /> Ток вот как это подставить все не совсем догоняю Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Dr.Freddy Опубликовано 30 Июля 2005 Автор Жалоба Поделиться Опубликовано 30 Июля 2005 В смысле, а в чём проблема? Оформление логотипа можно сменить в global_board_header, там же можно сменить переменные, которые передаются в шаблон, и вписать какое-нибудь своё лого, которое туда передастся из class_display.php Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Dr.Freddy Опубликовано 16 Августа 2005 Автор Жалоба Поделиться Опубликовано 16 Августа 2005 Тьфу! Совсем забыл отпоститься в тему. $welcome_type = gmdate('H', time() + ( $ibforums->member['time_offset']*3600 ) + ( $ibforums->vars['time_adjust'] * 60 ) );Во-первых, неправильно (нет учёта настройки «летнее время» — GiV, спасибо), во-вторых, избыточный код. Сейчас сделал так:$welcome_type = gmdate('H', time() + $std->get_time_offset() ); Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
4iX-Pblx Опубликовано 12 Сентября 2006 Жалоба Поделиться Опубликовано 12 Сентября 2006 а как сделать смену логотипа автоматом при заходе с определенного адреса http?форум доступен по 3 разным адресам, объединились 3 фанклуба, и хотелось бы чтобы определенному адресу выдавался свой логотип а шаблон один для всех, только логотипы разные <img src="<?php echo $mosConfig_live_site; ?>/templates/your template/images/header<?php echo rand(1,5)?>.jpg" />http://support.gorsk.net/content/view/36/48/нашел случайную смену логотипа, но как по http хз Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
wrm Опубликовано 19 Сентября 2006 Жалоба Поделиться Опубликовано 19 Сентября 2006 примерно так$http_host=адрес_форума.ruсоздай разные логотипы forum1.ru.gif forum2.ru.gif и т.д.пропиши < img src=$http_host.gif > Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
4iX-Pblx Опубликовано 19 Сентября 2006 Жалоба Поделиться Опубликовано 19 Сентября 2006 $http_host=адрес_форума.ruа это в какой файл прописать? и в каком синтаксисе? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Рекомендуемые сообщения
Присоединиться к обсуждению
Вы можете ответить сейчас, а зарегистрироваться позже. Если у вас уже есть аккаунт, войдите, чтобы ответить от своего имени.