Шаблоны, использующие php? - PullRequest
       7

Шаблоны, использующие php?

1 голос
/ 20 августа 2009

Какой лучший способ создать свой собственный шаблонизатор с помощью php, перенести HTML-шаблоны на реальные веб-сайты и заменить заполнители фактическими данными ... ну, позвольте мне решить свой собственный вопрос ...

class Template{

$private $output = '';

public function Load_Template($template){
    ob_start();
    include($template);
    $this->output = ob_get_clean();
}

public function Replace($data){
    $this->output = str_replace(array_keys($data), array_values($data), $this->output);
}
public function Display($add_footer = true){
    echo $this->output;
}

}

Это будет работать для простого шаблона, как ...

<div>{username}</div>

Но что было бы лучшим способом сделать это с помощью циклов в моем шаблоне. Давайте скажем что-то вроде

<ul>
    <li>{username}</li>//Loop this line for each user
</ul>

Кроме того, я не хочу использовать сторонний движок, такой как smarty, я просто хотел бы знать, как это сделать самому. Спасибо

Ответы [ 5 ]

4 голосов
/ 20 августа 2009

Как насчет использовать сам php ?

<div><?php echo $username ?></div>

<ul>
    <?php foreach($users as $user): ?>
    <li><?php echo $user->username ?></li> 
    <?php endforeach ?>
</ul>

* примечание: объясненный синтаксис Funky endforeach здесь .

3 голосов
/ 20 августа 2009

Честно говоря, если бы мне пришлось создать собственный движок шаблонов на PHP, я бы просто использовал PHP. Просто ограничьте себя только использованием переменной интерполяции и циклов внутри «шаблонов».

Написание собственного шаблонизатора - сложная вещь. В конце концов, вы изобретаете совершенно новый язык, хотя и простой. Чтобы он был очень мощным (т. Е. Выходит за рамки простой замены строки), вам, вероятно, придется написать реальный синтаксический анализатор на основе стека, а не полагаться на str_replace.

Вы могли бы делать это с помощью регулярных выражений, точно так же, как вы могли бы анализировать HTML с помощью регулярных выражений, но он не будет очень надежным, простым для чтения, простым для отладки, или легко расширять.

1 голос
/ 20 августа 2009

Вы упоминаете, что не хотите использовать сторонний движок, такой как Smarty, но в основном вы намерены делать то же самое, что и Smarty.

Что часто упускают из виду при обсуждении шаблонов в PHP, так это то, что PHP является языком шаблонов . Нет причин, по которым вы не можете просто использовать обычный старый PHP внутри своих шаблонов. На самом деле это то, для чего он изначально был разработан.

Если вы действительно хотите создать свой собственный движок шаблонов, вам придется сесть и разработать синтаксис для зацикливания и любых других шаблонных структур, которые вы захотите использовать. Что-то вроде [do 5 times] { loop code }. Придумай что хочешь. Затем вам придется проанализировать его с помощью PHP и изменить шаблон, чтобы заменить его зацикленной структурой.

Это большая работа ... с использованием обычного PHP было бы намного проще.

0 голосов
/ 20 августа 2009

Я согласен со всеми в этом обсуждении - я никогда не понимал использование проприетарных языков для шаблонов в PHP - вы знаете PHP, так что просто используйте это.

Если вы дисциплинированы (например, следуйте архитектурному шаблону MVC), соблюдая четкую разницу между PHP-скриптами, которые делают вещи, и PHP, которые отображают вещи, проблем не будет.

Несколько способов, которые могут помочь, это вызов файлов шаблонов PHP .phtml и использование альтернативного синтаксиса PHP, который немного проще поддерживать в шаблонах, содержащих как HTML, так и PHP:

<?php if ( $a == $b ) : ?>
  <strong>True</strong>
<?php else: ?>
  <strong>False</strong>
<?php endif; ?>
0 голосов
/ 20 августа 2009

Ну, большинство ответов на ваш вопрос: preg_replace_callback () .

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