Смотря на использование шаблонной системы для нового проекта, это - только небольшой сайт, и не хотят использовать издержки и 'сложность' присяжного острослова. Мне действительно не нравятся шаблонные системы, которые вынуждают Вас использовать другой язык только для помощи разработчикам (по-видимому).
Что-то вроде этого http://www.namepros.com/code/517342-php5-template-class.html - то, на что я смотрю, но что-то, что более устойчиво и доказано.
PHP сам по себе уже является шаблонизатором. Так почему бы не избавиться от накладных расходов, которые несет с собой шаблонизатор, написанный на шаблонизаторе, и просто использовать PHP?
<h1><?php echo $pageTitle ?></h1>
<div>
<ul>
<?php foreach($items as $item): ?>
<li><?php echo htmlentities($item); ?></li>
<?php endforeach; ?>
</ul>
</div>
Если вам нужна дополнительная функциональность, используйте ViewHelper, например, небольшие функции, которые инкапсулируют такие вещи, как добавление имен ссылок или перевод, например,
<table>
<?php foreach($items as $key => $item): ?>
<tr class="<?php echo oddEven($key)?>">
<td><?php echo productLink($item->id); ?></td>
<td><?php echo translate($item->description); ?></td>
</tr>
<?php endforeach; ?>
</table>
Если это слишком многословно, посмотрите на синтаксис HEREDOC и NOWDOC, и если это все еще не то, что вы ищете, вот список некоторых шаблонизаторов:
Или, если вы чувствуете себя экспериментатором, взгляните на XHP, подход Facebook к расширению шаблонов:
Я считаю, что PHP сам по себе является очень мощным механизмом шаблонов.
Если вам просто нужен очень простой шаблонизатор, вы можете обернуть str_replace (), например:
function template($source, array $vars, $return=false) {
foreach ($vars as $key=>$value) {
$source = str_replace('{'.$key.'}', $value, $source);
}
if ($return) {
return $source;
} else {
echo $source;
}
}
И есть простой, но гибкий шаблонизатор от symfony , если вам нужен полнофункциональный решение.
Это позволяет иметь локальные переменные и операции внутри функции, вместо того, чтобы преобразовывать их в глобальные.
-121--3348357-С помощью анонимной функции самовыдвижения создается локальная область, она очень эффективна и непосредственно вызывает себя.
Вы можете прочитать об этом здесь
-121--3348355-простейший... просто создайте блоки классов, такие как
class MyBlock implements IHtmlRenderizable{
private $_vars = array();
public function addVar($name, $value) {
$this->_vars[$name] = $value; return $this;
}
public function toHtml(){
extract($this->_vars);
include('/the/template.phtml');
}
}
, и используйте $ this- > что угодно в шаблоне. или используйте:
$block->addVar('myvar', 'myvalue')->toHtml();
и на шаблоне вы можете получить доступ к нему с помощью $ myvar
Я бы рекомендовал использовать Twig
Читайте также запись в блоге Фабьена Потенсье, где он объясняет потребности в мощном и настраиваемом шаблонизаторе.
{% extends "layout.html" %}
{% block title %}
{{ page.title|escape|title }}
{% endblock %}
{% block content %}
Content of the page...
{% for user in users %}
* {{ user.name }}
{% else %}
No user has been found.
{% endfor %}
{% endblock %}
{# this is a comment in twig syntax #}
Также если вам нужны дополнительные компоненты для веб-разработки, но у вас уже есть определенная база кода, посмотрите на Symfony Components, который включает дополнительный компонент шаблонизации (упомянутый в ответе XUE Can)
Я только что выпустил проект с открытым исходным кодом, который очень упрощает эту задачу. Это «Наследование шаблонов», вдохновленное Django, и позволяет вам наследовать и переопределять части родительского шаблона из дочернего шаблона. Находится здесь:
Я написал Nest. Это язык шаблонов, основанный на лучших частях JSP, и он компилируется в php-код. Вы пишете свой код в правильно сформированном HTML и можете легко создавать новые теги, чтобы предоставить вам новую функциональность. Есть несколько встроенных стандартных тегов.
Выглядит так:
<html xmlns:c="urn:nsttl:HTML_Template_Nest_Taglib_Standard">
<body>
<ul>
<c:foreach items="posts" var="post">
<li>${post->title}</li>
</c:foreach>
</ul>
</body>