PHP-эквивалент для паролей / коллекций шаблонов RoR - PullRequest
1 голос
/ 27 октября 2009

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

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

Ответы [ 2 ]

1 голос
/ 28 октября 2009

Вам нужен шаблонизатор, который может обрабатывать включения самостоятельно, а затем оценивать все сразу. Так же, как работает препроцессор 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);

Таким образом, вы можете избежать накладных расходов при оценке / включая подшаблон на каждом шаге цикла.

0 голосов
/ 27 октября 2009

Вы спрашиваете, как что-то сделать, не прибегая к решению.

Любая система шаблонов, которую вы используете, будет использовать в цикле eval или include, даже если она погружена в абстракцию глубиной 1000 слоев.

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

...