Вывод баннеров между краткими новостями главной странице DataLife Engine

Привет читатель! Это очередная история про задачку которую нужно сделать быстро и безболезненно. И выполнив ее, я решил поделиться.

Одному из моих заказчиков потребовалось выводить баннеры в кратких новостях, причем одни баннеры в десктоп версии сайта, а другие в мобильной. И вариант выводить баннеры стандартным механизмом (смотри настройку при добавлении баннера «Настройки для вывода блока между краткими новостями») ему не подходил. Он хотел выводить баннер после определенной новости…

Немного поискав, готовых и быстрых решений я не нашел. Попытки распробовать тег Custom так же не привели к успеху, так как с навигацией получался какой-то «анал-карнавал»… Поэтому пришлось рассмотреть вариант доработки движка путем редактирования файлов, что я не очень люблю.. Но все оказалось не так страшно…

Предупреждаю сразу, делал я все это на версии «DLE 10.4«, так что будет ли работать мой вариант на версиях выше — хз, не пробовал. Попробуйте — расскажите в комментариях, если не лень..

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

И так, редактировать нам придется только два файла, а именно:

  1. …/engine/modules/banners.php — который отвечает за вывод баннеров
  2. …/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 — отображается в кратких новостях полной и мобильной версиях сайтов. Х — это порядковый номер новости на странице, после которой баннер отображается.

Думаю все понятно, но если будут вопросы — пишите.

Так же если кому то не лень — проверьте на свежих версиях движка, а то обновление конкретно этого сайта заказчика будет не скоро…