Состояние шаблона PHP - PullRequest
       14

Состояние шаблона PHP

0 голосов
/ 08 ноября 2010
<if a == 5 && b < 4>
    one
<else>
    <if a != 5>
        two
    <else>
        <if a == 5 || $b == 5>
            three
         </if>
     </if>
</if>

Как я могу получить из него некоторые переменные:

[0] = "a == 5 && b < 4"
[1] = "one"
[2] = "a != 5"
[3] = "two"
[4] = "a == 5 || $b == 5"
[5] = "three"

Или как бы вы предложили сделать условия в шаблоне?

Ответы [ 2 ]

5 голосов
/ 08 ноября 2010

Я ничего не имею против шаблонных систем в целом, но почему бы не использовать простой PHP для этого?

<?php if ($a == 5 && ($b < 4)): ?>
    one
<?php elseif ($a != 5): ?>
....

Я не вижу преимущества болезненной перестройки логики синтаксического анализа и оценки в PHP.

Если вам это действительно нужно, я бы использовал Smarty.

2 голосов
/ 08 ноября 2010

Как только вы начинаете вводить конструкции управления потоком (if, loop ...) в свой язык шаблонов, вы теряете возможность применять шаблон просто, применяя поиск и замену к вашим переменным.Вам нужно начать синтаксический анализ шаблона, чтобы извлечь части, зависящие от условия, и заново вставить их отдельно, если это потребуется.

Что вы, вероятно, в конечном итоге сделаете, это примените начальный шаг разбора, который превращается:

Template "main" :  FOO <if a> BAR </if> QUX

В:

Template "main" : FOO {temp-if-a} QUX
Template "temp" : BAR

Затем, если a верно, вы бы применили шаблон temp и сохранили его в переменной {temp-if-a} во время рендеринга шаблона main.Если a равно false, вы не указали бы значение {temp-if-a}.

Другие структуры потока управления могут быть аналогичным образом реализованы с помощью этой последовательности извлекать-применять независимо-заменять , включая вложенные (просто рекурсивно работайте с алгоритмом приложения шаблона).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...