Я хочу сделать разработку на своих новых проектах легче, и я хотел скелет очень простое решение для движка шаблонов. Я озирался в сети, и все или слишком чрезмерно увеличено в размере или заставляет меня съежиться.
Мои файлы HTML будут похожи так:
<html>
<head>
<title>{PAGE_TITLE}</title>
</head>
<body>
<h1>{PAGE_HEADER}</h1>
<p>Some random content that is likely not to be parsed with PHP.</p>
</body>
</html>
Очевидно, я хочу заменить {PAGE_TITLE}
и {PAGE_HEADER}
с чем-то я установил с PHP. Как это:
<?php
$pageElements = array(
'{PAGE_TITLE}' => 'Some random title.',
'{PAGE_HEADER}' => 'A page header!'
);
?>
И я использовал бы что-то как str_replace
и загрузите замененный HTML в строку, затем распечатайте его к странице? Это - то, что я нахожусь на пути к выполнению, в данный момент... у кого-либо есть совет или способ, которым я могу сделать это лучше?
Спасибо.
Возможно, вы интересует mustache.php . Это действительно легкая реализация PHP-класса Mustache
Быстрый пример из README:
<?php
include('Mustache.php');
$m = new Mustache;
echo $m->render('Hello {{planet}}', array('planet' => 'World!'));
// "Hello World!"
?>
И более подробный пример - это канонический шаблон Mustache:
Hello {{name}}
You have just won ${{value}}!
{{#in_ca}}
Well, ${{taxed_value}}, after taxes.
{{/in_ca}}
PHP сам по себе является механизмом шаблонов, если вы хотите быть действительно простым. просто используйте include ()
file.phtml:
<html>
<head>
<title><?=$tpl['PAGE_TITLE']?></title>
</head>
<body>
<h1><?=$tpl['PAGE_HEADER']?></h1>
<p>Some random content that is likely not to be parsed with PHP.</p>
</body>
</html>
code.php:
tpl = Array
(
'PAGE_HEADER' => "This is the lazy way to do it",
'PAGE_TITLE' => "I don't care because i am doing it this way anyways"
)
include("file.phtml")
Ваша текущая стратегия будет работать, и она довольно проста. str_replace ()
эффективен и чист, и вы можете просто зациклить его, чтобы заменить точные совпадения тегов с вашим переменным содержимым. Однако недостатком является то, что вам нужно сначала загрузить все свои шаблоны в строки, а это может быть довольно неэффективно.
Другой очень похожий метод - вы можете просто использовать extract () . Extract возьмет набор пар ключ / значение и создаст из них переменные в локальной области. Если вы include ()
шаблон в той же области видимости, ваши переменные будут готовы к работе.
Примерно так:
function loadTemplate($template,$vars)
{
extract($vars);
include($template);
}
Ваш шаблон может быть обычным PHP.
<html>
<head>
<title><?php echo $PAGE_TITLE ?></title>
</head>
<body>
<h1><?php echo $PAGE_HEADER ?></h1>
<p>Some random content that is likely not to be parsed with PHP.</p>
</body>
</html>
(Очевидно, вы могли бы использовать короткие теги для меньшего количества подробностей в шаблоне, хотя я предпочитаю этого не делать из соображений совместимости.)
Тогда все, что вам нужно сделать, это:
$pageElements = array(
'PAGE_TITLE' => 'Some random title.',
'PAGE_HEADER' => 'A page header!'
);
loadTemplate('file.phtml',$pageElements);