| dervan |
|
|---|---|
# Trustmaster : Ещё бы сделали ... разбор условий без eval'а Хорошая мысль. :) Пожалуй, совсем от варианта с eval() отказываться не надо - может потребоваться сложное условие. Но для простейших вариантов, когда в IF проверяется значение переменной bool или int, несложно сделать вариант без eval(). Мы с Dayver'ом, когда обсуждали разные варианты условий для IF (с вызовом функцищ, с использованием $GLOBALS для передачи аргументов функцищам), решили по возможности использовать в шаблонах для IF'ов не код PHP, а сформированные специально для шаблонов переменные bool. Именно такой подход использовал Dayver в выложенных им файлах, которые демонстрируют использование IF'ов в шаблонах. Если придерживаться такого подхода и использовать в условиях IF шаблона только значения переменных bool или int, то эти условия будут проверяться без вызова eval(). Предлагаем улучшенный вариант XTemplate, проверяющий простые условия без eval(): xtemplate.class.php_57.zip Остальные условия, которые не сводятся к простой проверке значения bool или int, как и прежде будут обрабатываться вызовом eval(). Все условия в выложенных Dayver'ом файлах этим вариантом XTemplate будут проверяться без eval(), т.е. будут обработаны быстрее. Пример. # Sergeich : В шаблоне page.tpl мне нужно разделять теги запятой (или любым другим разделителем), сейчас я это реализовал так: Если решать эту задачу, исходя из существующего кода плагина tags, получится вот что. # dervan : Правильнее будет сформировать в plugins/tags/tags.page.php переменную для шаблона:
$tags_cntdwn = count($tags);
if($tags_cntdwn > 0)
{
foreach($tags as $tag)
{
$tags_cntdwn--;
и использовать в шаблоне простое условие:
<!-- BEGIN: PAGE_TAGS_ROW -->
<a href="{PAGE_TAGS_ROW_URL}">{PAGE_TAGS_ROW_TAG}</a><!-- IF {PHP.tags_cntdwn} -->,<!-- ENDIF -->
<!-- END: PAGE_TAGS_ROW -->
При таком решении условие IF будет проверяться без eval(), и шаблон будет распарсен быстрее. |