Сегодня я расскажу о том как можно подсоединить 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 ); } }