Использование html как шаблона в php

168
03 мая 2019, 09:50

Подскажите, есть ли способ для подстановки значений переменных в загружаемый html ? Допустим, имеет template.html :

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>УХХХХ</title>
<link rel="stylesheet" href="../../template/css/style.css">
</head>
<body>
<?=$html?>
</body>
<script src="../../template/js/print.js"></script>-->
</html>

и необходимо вставить в место $html какой-либо кусок,переданный как аргумент функции, например :

function somefunction($html)
{
echo file_get_contents('template.html');
}

Есть возможность как это реализовать встроенными функциями или всё таки надо писать свой парсер или использовать шаблонизатор?

Answer 1

Примерно так устроена шаблонизация во всех шаблонизаторах на пыхе. Просто выполните код нативно. Ведь пыха сама по себе и есть шаблонизатор. Родилась такой и такой остаётся по сей день.

$tmpl = '
<html><?= $foo ?></html>
';
function render($tmpl, array $params = []): string
{
    ob_start();
    extract($params);
    eval('?>' . $tmpl . '<?php');
    return ob_get_clean();
}
echo render($tmpl, ['foo' => 'bar']);

Результат:

<html>bar</html>

Если будете хранить шаблоны в php файлах, то eval можно будет заменить на require. Что по сути одно и тоже.

Answer 2
function somefunction($html)
{
    $htmlForAdd = '<p>Example</p>'
    $html = str_replace('<?=$html?>', $htmlForAdd, $html )
    echo file_get_contents('template.html');
}
Answer 3

Мне кажется, что вам подойдет банальный include (http://php.net/manual/ru/function.include.php)

function somefunction($html)
{
    include('template.html');
}
READ ALSO
выборка из базы данных с заданными параметрами [закрыт]

выборка из базы данных с заданными параметрами [закрыт]

ребят в общем такая проблема не могу понять как сделать выборку из базы данных чтобы она проходила по определенным параметрам но эти параметры...

198
как узнать порт сайта в open server?

как узнать порт сайта в open server?

Немного опишу ситуациюЯ создал на yii2 REST API и хотел через curl посмотреть что получилось

158
Почему не удаляются данные фикстуры из базы?

Почему не удаляются данные фикстуры из базы?

Разбираюсь с тестированием(Yii2 basic), пока что unit тестыПодключил фикстуру для класса User, пользователи во время работы теста в базу(тестовую)...

167
filter_input и ассоциативный массив

filter_input и ассоциативный массив

Умные дяди сказали получать POST(и GET) с помощью

163