Главный админ портала захотел определять рекламный блок в шапке для каждого подфорума в отдельности, а не только глобальный. Немного полазив по исходникам 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-сервер. Все изменения внесены. Кеш обновлять не нужно. В админке теперь видим новое поле для ввода (настройки конкретно форума): В настройках категории новое поле тоже есть: