PHP-эквивалент для паролей / коллекций шаблонов RoR
-
06-07-2019 - |
Вопрос
Я пытаюсь найти наиболее эффективный способ реализации партиалов / коллекций в стиле RoR для класса шаблонов PHP, который я пишу. Для тех, кто не знаком с рельсами, я хочу перебрать фрагмент шаблона (скажем, строку таблицы или элемент списка), расположенный в отдельном файле. Я хочу сделать это , не прибегая к eval и не помещая включение в цикл .
Я видел похожий пост это обращается к одиночным частям, которые тривиальны, но ничто не покрывает реализацию частичек в коллекции. Я думал об этом так долго, что у меня болит голова, и я боюсь, что упускаю очевидное решение. Я надеюсь, что кто-то здесь может предложить элегантное решение, которое, опять же, не требует оценки или включения в цикл. ТИА.
Решение
Вам необходим шаблонизатор, который может обрабатывать включения самостоятельно, а затем оценивать все сразу. Так же, как работает препроцессор c.
Шаг 1 (исходный шаблон):
$template = '
foreach($bigarray as $record)
#include "template_for_record.php"
'
Шаг 2 (после предварительной обработки):
$template = '
foreach($bigarray as $record)
// include statement replaced with file contents
echo $record['name'] etc
'
Шаг 3 (окончательный рендеринг)
// eval() only once
eval($template);
Таким образом, вы можете избежать накладных расходов при оценке / включении подшаблона на каждом шаге цикла.
Другие советы
Вы спрашиваете, как что-то сделать, не прибегая к решению.
Любая используемая вами система шаблонов будет использовать в цикле eval или include, даже если она погружена в абстракцию глубиной 1000 слоев.
Вот как это делается.