PHP-эквивалент для паролей / коллекций шаблонов RoR

StackOverflow https://stackoverflow.com/questions/1633494

  •  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 слоев.

Вот как это делается.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top