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 :<!-- BEGIN: PAGE_TAGS_ROW --> <a href="{PAGE_TAGS_ROW_URL}">{PAGE_TAGS_ROW_TAG}</a><!-- IF $GLOBALS['tag'] != $GLOBALS['tags'][count($GLOBALS['tags']) - 1] -->,<!-- ENDIF --> <!-- END: PAGE_TAGS_ROW -->Только вот есть сомнения, правильно ли это - раз уж убирать HTML из кода, IMHO тогда не следует злоупотреблять кодом в шаблонах. А тут при каждом проходе парсера будет вызываться функцища count(). По-хорошему, в plugins/tags/tags.page.php надо добавить флажок, чтобы IF определял по нему последний проход парсера в блоке PAGE_TAGS_ROW. Правильнее будет сформировать в 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(), и шаблон будет распарсен быстрее. |