Перейти к контенту

Автоматическая смена логотипов


Рекомендуемые сообщения

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

 

Код я написал. Есть некоторые проблемы (об этом чуть позже). Хотелось бы уточнить у профессионалов корректность кода и возможные логические ошибки. :D

 

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-е лого (заданное во фрагменте и скрипте по умолчанию). Почему? Сессия, между тем, в таблице появляется новая, с новым логотипом, и при повторном обновлении страницы он загружается.

Ссылка на комментарий
Поделиться на других сайтах

0. Заводим поле logo (int) в таблице ibf_sessions.
Совершенно лишнее, достаточно воспользоваться PHP сессиями :D и соответственно в 3 раза уменьшить кол-во изменений ;)
Ссылка на комментарий
Поделиться на других сайтах

Dr.Freddy

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'] ),

Модификация вполне корректно работает, за исключеним одного неприятного момента: при попытке стереть все кукисы борды через ссылку на главной странице (это которая 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'] );

Ссылка на комментарий
Поделиться на других сайтах

urisoft, верно. Спасибо. :D

 

Vic'er, я не имею опыта работы с ними. Предлагаешь вместо записи в базу поставить в функцию authorize нечто вроде:

session_name("LogoEngine");
if !session_is_registered("logo") {
session_start();
session_register("logo");}

 

Как правильно?

Ссылка на комментарий
Поделиться на других сайтах

А как насчет автосмены логотипа: день/ночь? как у Дэккера на форуме =)
Немногим сложнее, по-моему. Анализируй std'шную get_date.
Ссылка на комментарий
Поделиться на других сайтах

  • 1 месяц спустя...

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> !';

Т.е. определяем час юзера и оцениваем, какое сейчас время суток.

 

Это, впрочем, для приветствий. Ну, чтобы писалось, например, «Добрый вечер» вместо «Привет». :D

 

P.S. Кстати, оно не совсем корректно работает — с опозданием на час. Коллеги, какой-нибудь глупой ошибки не видите?

Ссылка на комментарий
Поделиться на других сайтах

P.S. Кстати, оно не совсем корректно работает — с опозданием на час. Коллеги, какой-нибудь глупой ошибки не видите?

Я, конечно, не "коллега"(т.е. не кодер) - Может дело в "переходе на летнее/зимнее время", в часности в личных настройках у юзера не стоит галочка в соответствующем поле?http://smilies.sofrayt.com/%5E/aiw/blush2.gif

Ссылка на комментарий
Поделиться на других сайтах

Din, угу, мне это тоже в голову пришло. Галочка, увы, стоит. :D

 

xren, в смысле?

Ссылка на комментарий
Поделиться на других сайтах

Din, угу, мне это тоже в голову пришло. Галочка, увы, стоит. :D

галочка то может и стоит, но вы ее не учитываете в коде.

Ссылка на комментарий
Поделиться на других сайтах

У меня такой вопрос можно ли это все со флешем реализовать

 

 

Просто тогда надо будет 1 фрагмент точно заменить

 

<img src='style_images/<#IMG_DIR#>/folder_forum_logos/{ipb.member['logo']}.png' style='vertical-align:top' border='0' />

 

Ток вот как это подставить все не совсем догоняю

Ссылка на комментарий
Поделиться на других сайтах

В смысле, а в чём проблема? Оформление логотипа можно сменить в global_board_header, там же можно сменить переменные, которые передаются в шаблон, и вписать какое-нибудь своё лого, которое туда передастся из class_display.php
Ссылка на комментарий
Поделиться на других сайтах

  • 3 недели спустя...

Тьфу! Совсем забыл отпоститься в тему.

 

$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() );

Ссылка на комментарий
Поделиться на других сайтах

  • 1 год спустя...

а как сделать смену логотипа автоматом при заходе с определенного адреса http?

форум доступен по 3 разным адресам, объединились 3 фанклуба, и хотелось бы чтобы определенному адресу выдавался свой логотип :D

а шаблон один для всех, только логотипы разные

 

<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 хз ;)

Ссылка на комментарий
Поделиться на других сайтах

Присоединиться к обсуждению

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

Гость
Ответить в этой теме...

×   Вы вставили отформатированный текст.   Удалить форматирование

  Допустимо не более 75 смайлов.

×   Ваша ссылка была автоматически заменена на медиа-контент.   Отображать как ссылку

×   Ваши публикации восстановлены.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Зарузка...
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, вы соглашаетесь на использование файлов cookie, а также с нашим положением о конфиденциальности Политика конфиденциальности и пользовательским соглашением Условия использования.