php шаблон, как сделать рендер?

269
21 февраля 2018, 11:33

Просьба помочь разобраться с простеньким рендером шаблона.
Для удобства весь код разместил в одном файле

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} - все ок.
Я понимаю, что как-то надо рендер сделать, но что-то растерялся - не пойму куда копать и как копать!

Answer 1

Ваш вариант заработает после замены 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>
READ ALSO
description на google

description на google

ЗдравствуйтеМне просто интересно, каким образом google подставляет описания и ключевые слова

221
Как сделать проверку по времени?

Как сделать проверку по времени?

Нужно сделать проверку по времени, что бы можно было заходить в админку в указное времяНапример можно было заходить с 09 : 00 : 00 и по 18 : 30 : 00, date("H:i:s");...

201
Проблема с сохранением в Mysql

Проблема с сохранением в Mysql

Создал небольшой сайт на openserver на двух языкахНа openserver русский язык сохранялся нормально и все работало без проблем, но когда перенес на хостинг...

227
Не выводится шорткод в js

Не выводится шорткод в js

Есть сайт на WordPressСтоит задача вывести шорткод в нескольких местах в шаблоне

197