[IPB 3.1.4] Добавляем возможность указания баннера для каждого форума в отдельности
Главный админ портала захотел определять рекламный блок в шапке для каждого подфорума в отдельности, а не только глобальный. Немного полазив по исходникам IPB 3.1.4 было решено сделать такую возможность. На всю реализацию затеи ушло 1,5 часа (вместе с проверкой).
Для начала полазил по Админской Панели и нашёл место, в котором указываются стандартные рекламные блоки:
Выяснил, что код рекламных блоков хранится в таблице core_sys_conf_settings. За рекламные блоки в шапке отвечают следующие записи: ad_code_global_header , ad_code_board_index_header , ad_code_forum_view_header. Именно параметр ad_code_forum_view_header отвечает за отрисовку баннера в форумах.
Руководство к действию.
Через phpMyAdmin добавляем в таблицу forums новое поле banner (тип TEXT, сравнение utf8_general_ci):
Проверьте, что данное поле появилось.
Открываем на редактирование файл /admin/applications/forums/modules_admin/forums/forums.php и ищем следующий код:
'description' => '', 'status' => 0,
который заменяем на такой кодес:
'description' => '', 'banner' => '', 'status' => 0,
Чуть ниже находим кодес такого содержания:
'description' => '', 'status' => 1,
который заменяем на такой кодес:
'description' => '', 'banner' => '', 'status' => 1,
Ещё ниже находм следующий участок:
$form['sub_can_post'] = $this->registry->output->formYesNo( 'sub_can_post', ( isset($_POST['sub_can_post']) AND $_POST['sub_can_post'] ) ? $_POST['sub_can_post'] : ( $forum['sub_can_post'] == 1 ? 0 : 1 ) );
и заменяем его на:
$form['sub_can_post'] = $this->registry->output->formYesNo( 'sub_can_post', ( isset($_POST['sub_can_post']) AND $_POST['sub_can_post'] ) ? $_POST['sub_can_post'] : ( $forum['sub_can_post'] == 1 ? 0 : 1 ) ); $form['banner'] = $this->registry->output->formTextarea("banner" , IPSText::br2nl( ( isset( $_POST['banner']) AND $_POST['banner'] ) ? $_POST['banner'] : $forum['banner'] ) , 120, 5 );
Как раз тут указываются размеры поля ввода кода рекламного баннера в шапке (ширина: 120, высота: 5).
Далее находим кодес:
'description' => IPSText::getTextClass('bbcode')->xssHtmlClean( nl2br( IPSText::stripslashes( $_POST['description'] ) ) ), 'use_ibc' => intval($this->request['use_ibc']),
который меняем на такой:
'description' => IPSText::getTextClass('bbcode')->xssHtmlClean( nl2br( IPSText::stripslashes( $_POST['description'] ) ) ), 'banner' => nl2br( IPSText::stripslashes($_POST['banner']) ), 'use_ibc' => intval($this->request['use_ibc']),
Сохраняем файл /admin/applications/forums/modules_admin/forums/forums.php и копируем его на WEB-сервер.
Открываем на редактирование файл /admin/applications/forums/modules_public/forums/forums.php и ищем следующий код:
/* Set Ad code for the board index */ if( $this->registry->getClass('IPSAdCode')->userCanViewAds() ) { $this->registry->getClass('IPSAdCode')->setGlobalCode( 'header', 'ad_code_forum_view_header' ); $this->registry->getClass('IPSAdCode')->setGlobalCode( 'footer', 'ad_code_forum_view_footer' ); }
заменяем его на ткой кодес:
/* Set Ad code for the board index */ if( $this->registry->getClass('IPSAdCode')->userCanViewAds() ) { if ($this->forum['parent_id'] == 'root') { // category $fbanner = $this->DB->buildAndFetch( array( 'select' => 'banner', 'from' => 'forums', 'where' => "id=".$this->forum['id']) ); if ($fbanner['banner']) $this->forum['banner'] = $fbanner['banner']; } if (strlen($this->forum['banner']) > 3) { $this->registry->getClass('IPSAdCode')->headerCode = $this->forum['banner']; } else { $this->registry->getClass('IPSAdCode')->headerCode = $this->settings['ad_code_forum_view_header']; } $this->registry->getClass('IPSAdCode')->setGlobalCode( 'footer', 'ad_code_forum_view_footer' ); }
Сохраняем файл /admin/applications/forums/modules_public/forums/forums.php и копируем его на WEB-сервер.
Открываем на редактирование файл /admin/applications/forums/modules_public/forums/topics.php и ищем следующий код:
/* Set Ad code for the board index */ if( $this->registry->getClass('IPSAdCode')->userCanViewAds() ) { $this->registry->getClass('IPSAdCode')->setGlobalCode( 'header', 'ad_code_forum_view_header' ); $this->registry->getClass('IPSAdCode')->setGlobalCode( 'footer', 'ad_code_forum_view_footer' ); }
и заменяем его на такой кодес:
/* Set Ad code for the board index */ if( $this->registry->getClass('IPSAdCode')->userCanViewAds() ) { if (strlen($this->forum['banner']) > 3) { $this->registry->getClass('IPSAdCode')->headerCode = $this->forum['banner']; } else { $this->registry->getClass('IPSAdCode')->headerCode = $this->settings['ad_code_topic_view_header']; } $this->registry->getClass('IPSAdCode')->setGlobalCode( 'footer', 'ad_code_topic_view_footer' ); }
Сохраняем файл topics.php и копируем его на WEB-сервер.
Открываем на редактирование файл /admin/applications/forums/skin_cp/cp_skin_forums.php и ищем следующую строчку:
<li><label class='head'>{$this->lang->words['frm_f_basic']}</label></li>
Перед этой строкой нужно вставить следующие строчки:
<li><label class='head'>Header Banner</label></li> <li> {$form['banner']} </li>
Сохраняем файл cp_skin_forums.php и копируем его на WEB-сервер.
Все изменения внесены. Кеш обновлять не нужно.
В админке теперь видим новое поле для ввода (настройки конкретно форума):
В настройках категории новое поле тоже есть:
- 3
0 комментариев
Рекомендованные комментарии
Нет комментариев для отображения
Создайте аккаунт или войдите в него для комментирования
Вы должны быть пользователем, чтобы оставить комментарий
Создать аккаунт
Зарегистрируйтесь для получения аккаунта. Это просто!
Зарегистрировать аккаунтВойти
Уже зарегистрированы? Войдите здесь.
Войти сейчас