Я пытаюсь выяснить наиболее эффективный способ реализации партитур / коллекций в стиле RoR для класса шаблона PHP, который я пишу. Для тех, кто не знаком с рельсами, я хочу перебирать фрагмент шаблона (например, строку таблицы или элемент списка), расположенную в отдельном файле. Я хочу сделать это, не прибегая к eval или помещению включения в цикл .
Я видел аналогичную запись, в которой рассматриваются отдельные частичные элементы, которые тривиальны, но ничего не охватывает реализацию частичных элементов в коллекции. Я думал об этом так долго, когда у меня болит голова, и я боюсь, что я упускаю из виду очевидное решение. Я надеюсь, что кто-то здесь может предложить элегантное решение, которое, опять же, не требует 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 слоев.
Вот как это делается.