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

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


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

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

 

Код я написал. Есть некоторые проблемы (об этом чуть позже). Хотелось бы уточнить у профессионалов корректность кода и возможные логические ошибки. :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 хз ;)

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

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

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

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

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

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

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

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

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

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

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