Разделение содержимого PHP - PullRequest
1 голос
/ 31 января 2010

Итак, мы все знаем, что вы должны всегда, не только в 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' ) );

Наконец, вопросы:

  • Это хороший способ разделения кода и контента?
  • Как вы это делаете, когда не работаете с фреймворком?
  • Есть ли лучший способ?

Ответы [ 5 ]

3 голосов
/ 31 января 2010

вы должны понимать, что сам PHP - это язык шаблонов . ваш

<div id="blah"><b>%USERNAME%</b>%STUFF% <...>

отличается от

<div id="blah"><b><?php echo $USERNAME; ?></b><?php echo $STUFF; ?> <...>

только очень поверхностно. Разумеется, PHP довольно глуп, с его уведомлениями и ПРЕДУПРЕЖДЕНИЯМИ вместо исключений (точка, которую Python имеет над PHP), и ваша пользовательская реализация может упростить вам e. г. бросить вместо фатальной ошибки (о радости Smarty), если помещение логики в шаблон где-то окажется меньшим из двух зол (циклов). вы можете захотеть выбросить, если шаблон упоминает неопределенную переменную (PHP выдаст NOTICE) и т. д.

2 голосов
/ 31 января 2010

Существует проверенный механизм шаблонов для PHP, который называется Smarty . Это не часть массивной структуры, что является для меня огромным плюсом. Smarty поддерживает кэширование и имеет другие улучшения производительности по сравнению с традиционными шаблонами поиска / замены благодаря «компиляции» файлов шаблонов.

2 голосов
/ 31 января 2010

Я не фанат дополнительных шаблонных языков (которые заменяют символы подстановки), вместо этого я хотел бы сохранить свои шаблоны в чистом 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 - шаблонизатор. Что касается непрограммистов / кодировщиков, то им приходится упростить синтаксис для цикла и переменной, как бы то ни было, поэтому я не вижу, как изменение его на подстановочные знаки или синтаксис {} разумности добавляет что-либо.

0 голосов
/ 31 января 2010

Подход Zend Framework, который использует PHP в качестве языка шаблонов (который не добавляет дополнительных затрат на синтаксический анализ), кажется хорошим помощником

Другой способ, который мне действительно нравится, - это подход, используемый limonade framework , который использует ob_start () и включает в себя фактическую обработку шаблонов

0 голосов
/ 31 января 2010

Большие проекты, такие как phpBB, работают с использованием шаблонов. Это немного сложнее, поскольку они также позволяют (для) списки, в том числе другие шаблоны и другие расширенные функции. Вы определенно хотите разделить код и контент.

В качестве бонуса это позволяет не программистам создавать ваш HTML.

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