Вывод баннеров между краткими новостями главной странице 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 - отображается в кратких новостях полной и мобильной версиях сайтов. Х - это порядковый номер новости на странице, после которой баннер отображается.

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

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