Вы уже получили ответ с вашим последним вопросом: если утверждения в шаблонах php с использованием tpl
Но так как вы не уйдете иначе, позвольте мне быстро ответить на него и затем упомянуть, какие из них будутВаши определенные следующие камни преткновения.
// handle {if}...{/if} blocks
$content =
preg_replace_callback('#\{if\s(.+?)}(.+?)\{/if}#s', "tmpl_if", $content);
function tmpl_if ($match) {
list($uu, $if, $inner_content) = $match;
// eval for the lazy!
$if = create_function("", "extract(\$GLOBALS['tvars']); return ($if);");
// a real templating engine would chain to other/central handlers
if ( $if() ) {
return $inner_content;
}
# else return empty content
}
Использование такого регулярного выражения приведет к путанице во вложенном if
.Но вы не спрашивали об этом, поэтому я не буду об этом упоминать.И, как указано в комментарии, вам на самом деле нужно подключиться к центральной функции, которая выполняет дальнейшие замены ({foreach}
/ {include}
/ и т. Д.) Вместо просто return $content
, как здесь.
Это выполнимо, но быстро становится громоздким.И именно поэтому все другие движки шаблонов (которые вы отказываетесь проверять) на самом деле конвертируют .tpl
файлы в .php
скрипты.Это намного проще, потому что PHP уже может обрабатывать все те управляющие структуры, которые вы пытаетесь имитировать с помощью вашего собственного шаблонного класса.