Просьба помочь разобраться с простеньким рендером шаблона.
Для удобства весь код разместил в одном файле
echo tpl(rootdir.'/tpl/text/text.inc', array('url' => 'yandex'));
function tpl($file, $params = false)
{
ob_start();
include($file);
$inc = ob_get_contents();
ob_end_clean();
foreach($params as $label => $value)
{
$inc = preg_replace("/\{".$label."\}/uis", $value, $inc);
}
return $inc;
}
function replacer($url)
{
$url = preg_replace("/yandex/uis", "google", $url);
return $url;
}
в самом шаблоне text.inc находится следующий код
echo replacer("{url}");
По задумке после того как заинклудился файл шаблона, я думал заменить в нем {url} на свое значение, стартануть функцию replacer с подставленным значением, произвести замену и вернуть результат в echo tpl. Как вы понимаете, ничего такого не произошло - replacer не отрабатывает. Причем указав ручками ему параметр вместо {url} - все ок.
Я понимаю, что как-то надо рендер сделать, но что-то растерялся - не пойму куда копать и как копать!
Ваш вариант заработает после замены include на require.
При этом надо не забыть использовать <?php, иначе, ваш шаблон будет восприниматься как текст, а не код.
Вариант, который мне кажется лучше (чистый PHP). Шаблон:
<div><?=replacer($url)?></div>
Код:
function replacer($url)
{
return str_replace('yandex', 'google', $url);
}
function phptpl($fileName, $params) {
extract($params);
ob_start();
require($fileName);
return ob_get_clean();
}
echo phptpl('tpl.php', ['url' => 'yandex']); // <div>google</div>
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости