Не нравятся результаты поиска? Попробуйте другой поиск!
DLE FAQ » Все вопросы » Хаки » Ошибка include: Template not found, как исправить!?

Ошибка include: Template not found, как исправить!?


     10.02.2017    Все вопросы » Хаки    646

вопрос
Хочу вывести в каждой категории seo-текст. Для этого создал в шаблоне новую папку (specific) и закинул туда пронумерованные tpl файлы (1.tpl, 2.tpl, 3.tpl ... 20.tpl) с текстами, где номер - это id категории, которой принадлежит это описание. Нужный tpl файл пытаюсь подтягивать в общий шаблон инклудом, в текущей просматриваемой категории.

Для этого в main.php я добавил:
$tpl->set("category-id",$category_id);

А в main.tpl:
{include file="specific/category-id.tpl"}

Теперь, перехожу в категорию с ID-1 и вижу надпись: "Template not found: /templates/Default/specific/1.tpl"
Хотя сам файл с таким именем по этому адресу существует.

В качестве решения проблемы пробовал в template.class.php удалить эту строчку:
$this->template = preg_replace_callback( "#\\{include file=['\"](.+?)['\"]\\}#i", array( &$this, 'load_file'), $this->template );

Тогда вроде как заработало, да не все. В подтягиваемом инклудом файле (1.tpl) теперь отказываются работать стандартные теги вывода, типа {custom}.
И вот тут я подвис...

[category=] использовать не хочу, потому что получиться километр текста в шаблоне
Модули тоже не хочу юзать, поэтому не предлагать.

9 комментариев

dj-avtosh
шашлычник

dj-avtosh - 10 февраля 2017 15:33 -

Может в методе load_file попробовать сделать определенные исключения, на которые не выбрасывать этот exception?

skype: elhan.isaev

coolteams
Юзер

coolteams - 10 февраля 2017 17:26 -

Дописал category-id, шаблон начал подгружаться
if( strpos( $this->template, "{include file=" ) !== false ) {
	$this->include_mode = 'tpl';
	$this->template = preg_replace_callback( "#\\{include file=['\"](.+?)['\"]\\}#i", array( &$this, 'load_file', 'category-id'), $this->template );
}

Но, как заставить работать {custom} в подгружаемом инклудом tpl?

dj-avtosh
шашлычник

dj-avtosh - 10 февраля 2017 17:34 -

Как вариант найти:

$this->template = $this->check_module($this->template);


ниже вставить


if( strpos( $this->template, "{custom" ) !== false ) {	
$this->template = preg_replace_callback( "#\\{custom(.+?)\\}#i", "custom_print", $this->template ); 
}


Не тестировал. Навскидку.

skype: elhan.isaev

coolteams
Юзер

coolteams - 10 февраля 2017 17:53 -

Тогда так правильнее будет, но не хочет никак.
if( strpos( $this->template, "{custom" ) !== false ) {	
$this->template = preg_replace_callback( "#\\{custom(.+?)\\}#i", array( &$this, 'custom_print'), $this->template );
}

dj-avtosh
шашлычник

dj-avtosh - 10 февраля 2017 17:56 -

array( &$this, 'custom_print')


не, custom_print не принадлежит к классу текущему, верно:

'custom_print'

skype: elhan.isaev

coolteams
Юзер

coolteams - 10 февраля 2017 18:09 -

Цитата: dj-avtosh
не, custom_print не принадлежит к классу текущему, верно:

короче, не работает

dj-avtosh
шашлычник

dj-avtosh - 10 февраля 2017 18:19 -

до функции custom_print хоть доходит? Как выглядит custom? Что получается в результате?

skype: elhan.isaev

coolteams
Юзер

coolteams - 10 февраля 2017 18:21 -

О, заработало:
еще после вот этого:
$template = $this->check_module($template);

надо было добавить:
if( strpos( $template, "{custom" ) !== false ) {		
$template = preg_replace_callback( "#\\{custom(.+?)\\}#i", "custom_print", $template ); 
}

Спасибо!

dj-avtosh
шашлычник

dj-avtosh - 10 февраля 2017 18:23 -

Скорее всего, я просто взглянул в код, движок у меня не стоит.

skype: elhan.isaev

Чтобы комментировать - войдите или зарегистрируйтесь на сайте

Похожие вопросы

наверх