pdoTools
pdoTools copied to clipboard
[Fenom] Не корректно работает $.tpl.name
В документации к Fenom (да и в документации к pdoTools) написано:
$.tpl.nameвозвращает текущее название шаблона.
По факту выводится строка вот такого типа: b767705ef12761f570abcc3ecc302fdd (как понимаю md5-хэш содержимого шаблона).
Но должно выводиться: template:template-name, если шаблон вставляется так: {include 'template:template-name'}
Тоже само и с $.tpl.basename
Выводит: runtime, а должен: template-name.
Если написать {$.fetch('template:template-name')}, тогда всё работает. Видимо в таком случае пропускается обработка на уровне pdoTools.
Было проверено на: MODX 3.0.3-pl pdoTools 3.0.2-pl
и на: MODX 2.8.4-pl pdoTools 2.13.2-pl
@EMDM45 А если шаблон указывать с нижним подчеркиванием в названии?
Так {include 'template:template_name'}
@EMDM45 А если шаблон указывать с нижним подчеркиванием в названии? Так
{include 'template:template_name'}
Без разницы. Даже если вообще одним словом написать. Всё равно хэш и runtime.
Заметил, что хэш всегда один и тот же, даже если написать {$.tpl.name} в чанках, которые внутри шаблона.
Напомню ещё раз. Василий начал прикручивать Fenom в парадигме MODX. Т.е. затачивал его на элементы базы данных. Только позже он с моей подачи добавил возможность работы с файлами. Т.е. вместо того, чтобы с боку прикрутить работу с элементами из БД, он заставил феном работать с базой, а потом с боку прикрутил работу с файлами. Поэтому имеем то, что имеем.
// Должно было быть так
{include 'some/path/to/file.tpl'} - изначально работаем с файлом
{include 'db:chunk_name'} - для работы с базой добавляем модификатор
// А имеем так
{include 'file:some/path/to/file.tpl'} - для работы с файлом нужно добавить модификатор
{include 'chunk_name'} - без модификатора поиск элемента в базе данных
Я об это рассказывал когда объяснял разницу подходов в pdoTools и ZoomX.
П.С. Кстати, даже Коля Ланец в то время сделал свой компонент на шаблонизаторе Smarty подобным образом. Тогда никто не думал о файловых элементах.
Поэтому имеем то, что имеем
Эт понятно. Просто, мне кажется, нужно либо из документации убрать информацию, либо исправить по возможности. Сам я пока не разобрался из-за чего он выводит этот хэш и как всё исправить.
Даже если создать свой провайдер типа {include 'block:test'}, то всё равно хэш лезет из $.tpl.name.
// Должно было быть так {include 'some/path/to/file.tpl'} - изначально работаем с файлом {include 'db:chunk_name'} - для работы с базой добавляем модификатор // А имеем так {include 'file:some/path/to/file.tpl'} - для работы с файлом нужно добавить модификатор {include 'chunk_name'} - без модификатора поиск элемента в базе данных
Насколько смог разобраться и понять, там при создании экземпляра Fenom просто указывается провайдер по умолчанию:
$provider = new modChunkProvider($pdoTools);
parent::__construct($provider);
Т.е. это стандартная возможность Fenom. В итоге Fenom по умолчанию работает с базой и чанками.
А проблема судя по всему где-то в файлах pdoparser.php или pdotools.php, которые и передают этот хэш Феному. И, как я понял, хэш в названии нужен либо когда "@INLINE чанки", т.е. без названия, либо для создания кэша средствами modx.
runtime - это значение по умолчанию у фенома в файле Render.php, видимо поэтому $.tpl.basename и выводит его, т.к. другого не задано...
Даже если создать свой провайдер типа
{include 'block:test'}, то всё равно хэш лезет из $.tpl.name.
А самое главное с моим провайдером block Феном отрабатывает всё отлично! Значит он правильно распознает basename (в данном случае - это test)! ! Но именно в массив {$.tpl} откуда-то попадает хэш и runtime...
Вообщем, либо я не правильно понимаю как должен отрабатываться массив {$.tpl}, либо он работает действительно не правильно. Возможно он и должен брать данные именно от шаблона (от родителя), а не от каждого чанка. А так как у нас первым идёт шаблон modx из базы, соответственно он и берёт хэш.