Я пишу простой шаблонный слой в PHP, но я немного застрял. Вот как это работает на данный момент:PHP Templating
Во-первых, я использую fetch_template
для загрузки содержимого шаблона из базы данных - это работает (и я собираю все шаблоны при запуске, если вам интересно).
Я использую PHP переменные в моем шаблоне кода и в логике - например .:
// PHP:
$name = 'Ross';
// Tpl:
<p>Hello, my name is $name.</p>
то я использую output_template
(ниже) для анализа с помощью переменных в шаблоне и заменить их. Раньше я использовал теги шаблонов с прославленным классом шаблонов str_replace
, но он был слишком неэффективным.
/**
* Returns a template after evaluating it
* @param string $template Template contents
* @return string Template output
*/
function output_template($template) {
eval('return "' . $template . '";');
}
Моя проблема, если вы еще не догадались, является то, что переменные не объявляются внутри функции - поэтому функция не может разобрать их в $template
, если я не поставил их в глобальном масштабе - что я Я не уверен, что хочу это сделать. Это или иметь массив переменных в качестве параметра в функции (что звучит еще более утомительно, но возможно).
У кого-нибудь есть какие-либо решения, кроме использования кода из этой функции (это всего лишь однострочный) в моем коде, а не в использовании функции?
Спасибо, Росс
P.S. Я знаю о Smarty и широком спектре шаблонов двигателей там - я не хочу их использовать, поэтому, пожалуйста, не предлагайте их. Благодаря!
Я ожидаю, что в этой системе будет только одно касание кода, основная причина, по которой я не использую строковые вары (например, {VARNAME}), потому что это быстрее. Сначала я был настроен скептически, но друг указал мне, насколько медленным был мой оригинальный компилятор шаблонов. – Ross 2008-11-15 10:48:18