DLE: Include tpl файла с обработкой полей новости

Сегодня я расскажу о том как можно подсоединить tpl файл в шаблоне DLE так чтобы используемые спец теги обработались системой.

Сейчас речь пойдет именно о полной новости в DLE, однако по аналогии данный хак можно провести и с другими обработчиками.
В чем суть проблемы? Допустим у Вам есть несколько шаблонов полной новости. Они имеют различая, однако, некоторые блоки (например popup окна) одинаковы для всех полных новостей. Повторяющийся код правильней вынести в отдельные файл шаблона (например popup.tpl). Если в данном шаблоне не используются никакие системные вставки системы DLE. То проблем никаких нет. Используйте стандартную конструкцию include. Однако если Вам нужно например использовать в данных окнах значения дополнительных полей или другие данные о новости, то стандартный {include} не подойдет. DLE просто не обработает Ваши системные вставки и выведет служебные теги.
Для того чтобы заставить DLE обрабатывать теги в подключаемых шаблонах делаем следующее:

1) в нужном месте шаблона полной новости (где нужно произвести вставку другого шаблона). Вставляем код:

{includestatic file="ПУТЬ К ШАБЛОНУ ОТНОСИТЕЛЬНО КОРНЯ САЙТА"}

2) Открыть файл /engine/modules/show.full.php и найти строчки

if( isset( $view_template ) and $view_template == "print" ) $tpl->load_template( 'print.tpl' );
elseif( in_array(16, $category_ids)) $tpl->load_template( $cat_info[16]['full_tpl'] . '.tpl' );
elseif( $category_id and $cat_info[$category_id]['full_tpl'] != '' ) $tpl->load_template( $cat_info[$category_id]['full_tpl'] . '.tpl' );
else $tpl->load_template( 'fullstory.tpl' );

3) Сразу после них вставить код

if ( preg_match_all( "#\\{includestatic file=\"([^\"]+)\"\\}#i", $tpl->copy_template, $matches ) ) {
   for($i = 0; $i < count($matches[0]); ++$i) {
      $tpl->copy_template = str_replace( $matches[0][$i], file_get_contents(ROOT_DIR.$matches[1][$i]), $tpl->copy_template );
    }
}
Запись опубликована в рубрике HTML, PHP с метками , , , , , , , . Добавьте в закладки постоянную ссылку.