Таким образом, мы все знаем, что вы всегда должны, не только в PHP, отделять код от content / design / html. (Я видел людей, которые сегодня говорят об обратном)
Я имею в виду, вы не хотите, чтобы один из них был в больших проектах, не так ли?
<?php echo '<div id="blah"><b>' . $username . '</b>' . $stuff . '<more HTML mixed with PHP...>'; ?>
Но: Что такое хороший подход к отдельным кодам из контента?
Я использовал простую систему шаблонов, которая в основном заменяет шаблоны в шаблонах.
например:
<div id="blah"><b>%USERNAME%</b>%STUFF% <...>
(находится в одном файле)
Позже вы можете просто вызвать функцию, похожую на GetTemplate( 'myTemplate', array ( 'USERNAME' => 'Stranger' ) );
Наконец, вопросы:
Я не поклонник дополнительных языков шаблонов (которые заменяют подстановочные знаки), вместо этого мне нравится сохранять мои шаблоны в чистом php, поэтому моя верность тому, что вы сделали, будет:
<div id="blah"><b><?php echo $username ?></b><?php echo $stuff ?><...>
echo GetTemplate( 'myTemplate.php', array ( 'username' => 'Stranger', 'stuff' => 'Stuff' ) );
function GetTemplate($templatePath, array $vars = array()) { extract($vars); ob_start(); include($templatePath); return ob_get_clean(); }
Я также комбинирую это с вспомогательными функциями / объектами-> методами, например:
<?php echo link_to($name, $url); ?>
function link_to($name, $url, array $attributes = array()) { $attributes['href'] = urlencode($url); foreach($attributes as $attrib => $value) { $attributes[$attrib] = $attrib."=\"$value\""; } return sprintf('<a %s>%s</a>', implode(" ",$attributes), $name); }
Обычно я применяю такие помощники к обычно используемым тэгам / структурам, а также к тегу html общего назначения, который выглядит примерно как content_tag($tag, $content, $attributes);
Это помогает мне избежать php-эха для тонны атрибутов для случайных меток. Я, очевидно, не использую его для каждого html-тега, который я использую только для тех, где он обеспечивает лучшую читаемость, чем тонна эха.
Что касается шаблонов двигателей, я действительно не вижу преимущества, поскольку php является языком шаблонов. Что касается не-программистов / кодировщиков, они должны использовать синтаксис для цикла и переменной, так как я не вижу, как изменение его на подстановочные знаки или синтаксис {} smarty добавляет что-либо.
вы должны понимать, что сам PHP является языком шаблонов . ваш
<div id="blah"><b>%USERNAME%</b>%STUFF% <...>
отличается от
<div id="blah"><b><?php echo $USERNAME; ?></b><?php echo $STUFF; ?> <...>
только очень поверхностно. php, довольно глупо с его комментариями и предупреждениями вместо исключений (точка Python имеет более PHP), и ваша пользовательская реализация может с большей легкостью позволить вам, например, бросить вместо того, чтобы генерировать фатальную ошибку (о радости Smarty), если положить логика в шаблон где-то оказывается меньшим из двух зол (циклов). вы можете захотеть выбросить, если в шаблоне упоминается неопределенная переменная (PHP выдаст УВЕДОМЛЕНИЕ) и т. д.
Существует проверенный и надежный механизм создания шаблонов для PHP под названием Smarty . Это не часть массивной структуры, которая является огромным плюсом для меня. Smarty поддерживает кеширование и имеет другие повышения производительности по сравнению с традиционным шаблоном поиска / замены из-за его «компиляции» файлов шаблонов.
Большие проекты вроде phpBB работают с использованием шаблонов. Это немного сложнее, поскольку они также позволяют (для) списки, в том числе другие шаблоны и другие расширенные функции. Вы определенно хотите разделить код и контент.
В качестве бонуса это позволяет не программистам создавать ваш html.
Подход Zend Framework, который использует PHP в качестве языка шаблонов (который не добавляет дополнительные служебные данные синтаксического анализа), кажется хорошим дополнением
Другим способом, который мне очень нравится, является подход, используемый платформой limonade, которая использует ob_start () и включает в себя, чтобы фактически обрабатывать шаблоны