
Привет читатель! Это очередная история про задачку которую нужно сделать быстро и безболезненно. И выполнив ее, я решил поделиться.
Одному из моих заказчиков потребовалось выводить баннеры в кратких новостях, причем одни баннеры в десктоп версии сайта, а другие в мобильной. И вариант выводить баннеры стандартным механизмом (смотри настройку при добавлении баннера "Настройки для вывода блока между краткими новостями") ему не подходил. Он хотел выводить баннер после определенной новости...
Немного поискав, готовых и быстрых решений я не нашел. Попытки распробовать тег Custom так же не привели к успеху, так как с навигацией получался какой-то "анал-карнавал"... Поэтому пришлось рассмотреть вариант доработки движка путем редактирования файлов, что я не очень люблю.. Но все оказалось не так страшно...
Предупреждаю сразу, делал я все это на версии "DLE 10.4", так что будет ли работать мой вариант на версиях выше - хз, не пробовал. Попробуйте - расскажите в комментариях, если не лень..
Вдаваться в подробности я не буду,
если вы знаете php и в состоянии понять какие файлы за что отвечают, то вопросов у вас не возникнет.
Если вы ничего не понимаете в php, то можете просто включить copy-past мастера...
И так, редактировать нам придется только два файла, а именно:
- .../engine/modules/banners.php - который отвечает за вывод баннеров
- .../engine/modules/show.short.php - который отвечает за вывод новостей на главной
Открываем первый файл в любимом редакторе (/engine/modules/banners.php) и ищем следующую строчки:
if( $value['grouplevel'][0] != "all" and ! in_array( $member_id['user_group'], $value['grouplevel'] ) ) {
$value['code'] = "";
}
После них смело добавляем следующие строки:
// Баннер который назван на short_X - отображается в кратких новостях полной версии сайта.
// Х - это порядковый номер новости на странице, после которой баннер отображается.
if (strpos($value['banner_tag'], 'short') !== false) {
$numnews = preg_replace("/short_/", '', $value['banner_tag']);
$ban_short['numnews'][$numnews] = array ("text" => $value['code'], "zakr" => $value['bstick'], "numnews" => $numnews );
}
// Баннер который назван на shortm_X - отображается в кратких новостях мобильной версии сайта.
// Х - это порядковый номер новости на странице, после которой баннер отображается.
if (strpos($value['banner_tag'], 'shortm') !== false) {
$numnews = preg_replace("/shortm_/", '', $value['banner_tag']);
$ban_short['numnewsmob'][$numnews] = array ("text" => $value['code'], "zakr" => $value['bstick'], "numnews" => $numnews );
}
// Баннер который назван на shortall_X - отображается в кратких новостях полной и мобильной версиях сайтов.
// Х - это порядковый номер новости на странице, после которой баннер отображается.
if (strpos($value['banner_tag'], 'shortall') !== false) {
$numnews = preg_replace("/shortall_/", '', $value['banner_tag']);
$ban_short['numnewsall'][$numnews] = array ("text" => $value['code'], "zakr" => $value['bstick'], "numnews" => $numnews );
}
Сохраняем файл. Далее открываем второй файл (/engine/modules/show.short.php) и ищем следующую строчку:
if( count( $banners ) AND $config['allow_banner'] AND !$smartphone_detected) {
заменяем на
if( count( $banners ) AND $config['allow_banner']) {
Таким образом в мобильной версии будут отображаться баннеры включенные в кратких новостях. Далее ищем строчки:
$tpl->set_block( "'{banner_(.*?)}'si", "" );
$tpl->set_block ( "'\\[banner_(.*?)\\](.*?)\\[/banner_(.*?)\\]'si", "" );
После них, вставляем этот код:
// Баннер который назван на short_X - отображается в кратких новостях полной версии сайта.
// Х - это порядковый номер новости на странице, после которой баннер отображается.
if (isset($ban_short['numnews']) && $ban_short['numnews'][$news_c]['numnews'] == $news_c && !$smartphone_detected) {
$tpl->copy_template .= bannermass( $ban_short['numnews'][$news_c]['text'] );
}
// Баннер который назван на shortm_X - отображается в кратких новостях мобильной версии сайта.
// Х - это порядковый номер новости на странице, после которой баннер отображается.
if (isset($ban_short['numnewsmob']) && $ban_short['numnewsmob'][$news_c]['numnews'] == $news_c && $smartphone_detected) {
$tpl->copy_template .= bannermass( $ban_short['numnewsmob'][$news_c]['text'] );
}
// Баннер который назван на shortall_X - отображается в кратких новостях полной версии сайта
// Х - это порядковый номер новости на странице, после которой баннер отображается.
if (isset($ban_short['numnewsall']) && $ban_short['numnewsall'][$news_c]['numnews'] == $news_c ) {
$tpl->copy_template .= bannermass( $ban_short['numnewsall'][$news_c]['text'] );
}
Сохраняем файл.
Теперь, как вы догадались по комментариям,
- Баннер который назван на short_X - отображается в кратких новостях полной версии сайта. Х - это порядковый номер новости на странице, после которой баннер отображается;
- Баннер который назван на shortm_X - отображается в кратких новостях мобильной версии сайта. Х - это порядковый номер новости на странице, после которой баннер отображается;
- Баннер который назван на shortall_X - отображается в кратких новостях полной и мобильной версиях сайтов. Х - это порядковый номер новости на странице, после которой баннер отображается.
Думаю все понятно, но если будут вопросы - пишите.
Так же если кому то не лень - проверьте на свежих версиях движка, а то обновление конкретно этого сайта заказчика будет не скоро...