С помощью Mustache PHP загрузка паролей, но не разбор тегов

У меня есть шаблон Усы, который включает в себя некоторые частичные. Я хочу загрузить частичное в строку в PHP с содержимым частичных элементов, включенных в строку. Но я не хочу, чтобы шаблон был разобран.

например, если у меня есть этот шаблон усов, myTemplate.mustache:

{{> partials/myPartial }}
{{ my_text }}

а это partials/myPartial.mustache:

{{ my_header }}

тогда я хочу загрузить myTemplate.mustache и иметь переменную PHP, содержащую:

{{ my_header }}
{{ my_text }}

Я могу видеть, как получить содержимое шаблона с помощью new Mustache_Loader_Filesystem()->load() но это не включает в себя содержание частичного.

0

Решение

Вы не можете увидеть способ сделать это, потому что это невозможно. Сам по себе усы никогда не имеют дело с шаблонами, слитыми вместе, поэтому нет никаких причин, по которым они могли бы получить API для их получения.

Из-за природы частичных операций это не так просто, как замена частичного тега содержимым этого шаблона. Например, партиалы не наследуют изменения разделителя и прагмы от шаблонов, которые их включают, поэтому их необходимо учитывать. Частицы также имеют отступ к уровню тега, который включает их, поэтому замена частичного тега содержимым частичного также должна сделать это.

Я предположил, что если вы действительно этого хотите, вы можете загрузить шаблон и партиалы, а затем использовать Mustache Tokenizer, чтобы найти теги партиалов в источнике шаблона, а затем заменить их (рекурсивно) содержимым соответствующих партиалов. Затем вам нужно будет выяснить, как изменить разделители в начале и в конце встроенных партиалов (или полностью запретить изменения разделителей, что можно сделать, вызвав исключение, если вы встретите одно при обработке анализируемого шаблона). И я не могу придумать способ удаления прагм после их добавления, поэтому вам придется либо запретить прагмы, либо убедиться, что все встроенные партиалы совместимы с теми прагмами, которые использовались в родительских шаблонах.

Это было бы довольно много работы, если не сказать больше.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]