Легкий шаблонный класс / система на основе PHP5 - PullRequest
9 голосов
/ 10 февраля 2010

Глядя на использование системы шаблонов для нового проекта, это всего лишь небольшой сайт, и он не хочет использовать накладные расходы и «сложность» smarty. Мне не очень нравятся системы шаблонов, которые вынуждают вас использовать другой язык только для того, чтобы облегчить его дизайнерам (очевидно).

как то так http://www.namepros.com/code/517342-php5-template-class.html это то, на что я смотрю, но что-то более надежное и проверенное.

Ответы [ 6 ]

18 голосов
/ 10 февраля 2010

TWIG

Я бы порекомендовал использовать Twig

  • расширяемый синтаксис
  • 1012 * эффективный *
  • компилирует и кэширует ваши шаблоны в классы PHP с очень небольшими издержками
  • режим песочницы для оценки ненадежного кода шаблона
  • проверенный модуль
  • отлично документация
  • несколько наследование шаблонов , блоки шаблонов, автоматическое экранирование выходных данных

Также прочитайте пост в блоге Фабьена Потенциера , где он объясняет потребность в мощном и настраиваемом шаблонизаторе.

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

Также, если вам нужны дополнительные компоненты для веб-разработки, но у вас уже есть определенная база кода, посмотрите Symfony Components , которая включает в себя дополнительный шаблонный компонент (упомянутый в XUE Can answer)

15 голосов
/ 10 февраля 2010

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 к движку шаблонов:

5 голосов
/ 29 марта 2010

Я только что выпустил проект с открытым исходным кодом, который делает это действительно простым. Это «Наследование шаблона», созданное по мотивам Django, которое позволит вам наследовать и переопределять части родительского шаблона из дочернего шаблона. Расположен здесь:

http://arshaw.com/phpti/

3 голосов
/ 06 августа 2010

Я написал Гнездо. Это язык шаблонов, основанный на лучших частях JSP, и он компилируется в код php. Вы пишете свой код в правильно сформированном HTML и можете легко создавать новые теги, чтобы дать вам новые функциональные возможности. Есть несколько стандартных встроенных тегов.

http://nest.sourceforge.net/

выглядит так:

<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>
0 голосов
/ 10 февраля 2010

Я считаю, что сам 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 , если вам нужно полнофункциональное решение.

0 голосов
/ 10 февраля 2010

самое простое ... просто создайте блоки классов, такие как:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...