pdoTools icon indicating copy to clipboard operation
pdoTools copied to clipboard

[Fenom] Не корректно работает $.tpl.name

Open EMDM45 opened this issue 2 years ago • 7 comments

В документации к 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 avatar May 31 '23 07:05 EMDM45

@EMDM45 А если шаблон указывать с нижним подчеркиванием в названии? Так {include 'template:template_name'}

Ibochkarev avatar May 31 '23 08:05 Ibochkarev

@EMDM45 А если шаблон указывать с нижним подчеркиванием в названии? Так {include 'template:template_name'}

Без разницы. Даже если вообще одним словом написать. Всё равно хэш и runtime.

EMDM45 avatar May 31 '23 09:05 EMDM45

Заметил, что хэш всегда один и тот же, даже если написать {$.tpl.name} в чанках, которые внутри шаблона.

EMDM45 avatar May 31 '23 09:05 EMDM45

Напомню ещё раз. Василий начал прикручивать 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 подобным образом. Тогда никто не думал о файловых элементах.

sergant210 avatar Jun 14 '23 04:06 sergant210

Поэтому имеем то, что имеем

Эт понятно. Просто, мне кажется, нужно либо из документации убрать информацию, либо исправить по возможности. Сам я пока не разобрался из-за чего он выводит этот хэш и как всё исправить.

Даже если создать свой провайдер типа {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 и выводит его, т.к. другого не задано...

EMDM45 avatar Jun 14 '23 12:06 EMDM45

Даже если создать свой провайдер типа {include 'block:test'}, то всё равно хэш лезет из $.tpl.name.

А самое главное с моим провайдером block Феном отрабатывает всё отлично! Значит он правильно распознает basename (в данном случае - это test)! ! Но именно в массив {$.tpl} откуда-то попадает хэш и runtime...

EMDM45 avatar Jun 14 '23 15:06 EMDM45

Вообщем, либо я не правильно понимаю как должен отрабатываться массив {$.tpl}, либо он работает действительно не правильно. Возможно он и должен брать данные именно от шаблона (от родителя), а не от каждого чанка. А так как у нас первым идёт шаблон modx из базы, соответственно он и берёт хэш.

EMDM45 avatar Jun 14 '23 17:06 EMDM45