Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
EMDM45 opened this issue May 31, 2023 · 7 comments
Open

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

EMDM45 opened this issue May 31, 2023 · 7 comments

Comments

@EMDM45
Copy link

EMDM45 commented May 31, 2023

В документации к 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

@Ibochkarev
Copy link
Member

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

@EMDM45
Copy link
Author

EMDM45 commented May 31, 2023

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

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

@EMDM45
Copy link
Author

EMDM45 commented May 31, 2023

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

@sergant210
Copy link
Member

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

@EMDM45
Copy link
Author

EMDM45 commented Jun 14, 2023

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

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

Даже если создать свой провайдер типа {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
Copy link
Author

EMDM45 commented Jun 14, 2023

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

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

@EMDM45
Copy link
Author

EMDM45 commented Jun 14, 2023

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants