Каковы реальные преимущества шаблонной обработки механизмов, законченных просто использование PHP?

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

Я ищу практические вещи, таким образом, я исключаю следующее:

  • присмотр за детьми плохих разработчиков (т.е. использование движок шаблонов, потому что это вынуждает Вас не смешать код в представление),
  • краткость синтаксиса (у меня есть отображения в Vim для вещей как <?php echo $stuff; ?>, использование фигурных скобок не имело бы никакого значения),
  • более легкий синтаксис для не программисты (я разрабатываю один, таким образом, это не проблема),
28
задан Matteo Riva 25 February 2010 в 14:28
поделиться

8 ответов

Разделение проблем.

Подобные вещи становятся стандартными при использовании подхода MVC / MTV - когда представление данных обязательно отделено от отображения данных, но не в том случае, если вы используете простой старый PHP.

Использование механизма шаблонов позволяет легко отделить то, что отображается, от того, как оно отображается.

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

10
ответ дан 28 November 2019 в 03:11
поделиться

Простое переключение между представлениями

При нынешнем состоянии интернета мне нужно предоставлять информацию в разных форматах:

  • Статическая html-страница
  • Динамически загружаемое представление на другой HTML-странице
  • JSON-объект данных
  • XML-лента данных, используемая в моей flash-части

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

8
ответ дан 28 November 2019 в 03:11
поделиться

С помощью шаблонов вы также можете делегировать ответственность за презентацию дизайнерам. Дизайнеры могут создавать шаблоны, а разработчики могут работать в логике. Также легче поддерживать последовательность в презентации.

3
ответ дан 28 November 2019 в 03:11
поделиться

11 в двоичном является 1011

11 >> 1 

означает, что двоичное представление смещается вправо на один шаг.

1011 >> 1 = 101

Тогда у вас есть 101 в двоичном виде, который 1 * 1 + 0 * 2 + 1 * 4 = 5.
Если бы вы сделали 11 > > 2 , вы бы в результате 10 в двоичном, т.е. 2 (1 * 2 + 0 * 1).

Смещение по 1 вправо преобразует сумму (A_i*2^i) [i = 0.. n] в сумму (A_ (i + 1) * 2 ^ i) [i = 0.. n-1] Вот почему, если ваше число четное (т.е. A_0 = 0), оно делится на два. (извините за настроенный синтаксис XX...:))

-121--3866155-

То, что я бы сделал для решения этой проблемы в целом, это сначала написать «выбор».

public static IEnumerable<IEnumerable<T>> Chooser<T>(this IList<T> sequence, int num)
{ ... left as an exercise ... }

Выходной сигнал селектора представляет собой последовательность последовательностей. Каждая подпоследовательность имеет длину num и состоит из элементов, выбранных из исходной последовательности. Таким образом, если бы вы передали {10, 30, 20, 50} в качестве последовательности и 3 для числа, вы бы получили последовательность последовательностей:

{10, 30, 20}, {10, 30, 50}, {10, 20, 50}, {30, 20, 50}

в результате.

После того, как вы написали Chooser, проблема становится легкой:

var results = 
  from subsequence in numbers.Chooser(2)
  where subsequence.Sum() == target
  select subsequence;

И теперь вы можете решить проблему для подпоследовательности других размеров, а не только пар.

Писать Chooser немного сложно, но это не слишком трудно.

-121--3950464-
  1. Я использую свой собственный «шаблонный» движок, достаточно основные вещи, присваиваю значение [ключ] и сортам.
  2. Когда я впервые искал шаблонный движок, я нашел его умным, но у него было так много проблем с безопасностью, что я в итоге написал то, что мне нужно самому.
  3. Вы спрашиваете почему? потому что он имеет много функций, которые могут сделать ваше кодирование быстрее (вещи, о которых вы не думали, и вещи, которые вы можете делегировать шаблонной системе вместо вашего кода)
  4. Большинство кодировщиков выбрали шаблонную систему, и при работе в команде вы должны соблюдать стандарт.
3
ответ дан 28 November 2019 в 03:11
поделиться

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

Но если вашим приложениям просто нужен один шаблон и никогда не меняют сильно макет, то придерживайтесь того, что работает для вас, зачем менять? :)

2
ответ дан 28 November 2019 в 03:11
поделиться

Некоторые механизмы создания шаблонов могут компилировать шаблоны, приводящие к высокооптимизированным преобразованиям. Возьмем, к примеру, XslCompiledTransform в .NET.

1
ответ дан 28 November 2019 в 03:11
поделиться

Попробуйте снова сделать установщики общедоступными в SunHeader.

-121--4076918-

http://github.com/ericflo/twissandra - это клон твиттера в том же ключе, что и ретвис, первоначально для 0,3 и теперь обновляется для 0,6. Поймать erifclo в # кассандра на irc, если у вас есть вопросы.

-121--4407292-

Ваши ответы выглядят как реальные ответы, но сформулированы очень снисходительно. Например:

нянчить плохих разработчиков (т.е. использовать механизм шаблонов, потому что это заставляет вас не смешивать код в презентацию)

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

Ограничения делают языки программирования. PHP не имеет встроенной функции сборки, и это не потому, что Расмус думал, что вы все «дети.»

1
ответ дан 28 November 2019 в 03:11
поделиться

Новый синтаксис


Некоторые люди не согласятся, но, поскольку я использую Twig, «for ... else» кажется правильным. Это может быть немного, но мои шаблоны остаются немного чище.

{% for row in articles %}
 Display articles ...
{% else %}
 No articles.
{% endfor %}

Автоматическое экранирование


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

{% autoescape on %}
  Everything will be automatically escaped in this block
{% endautoescape %}

Наследование шаблонов


Еще одна функция, которая мне нравится, - это возможность расширять базовые шаблоны. Вот базовый пример

base.html template

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html lang="en">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
  {% block head %}
    <link rel="stylesheet" href="style.css" />
    <title>{% block title %}{% endblock %} - My Webpage</title>
  {% endblock %}
</head>
<body>
  <div id="content">{% block content %}{% endblock %}</div>
  <div id="footer">
    {% block footer %}
      &copy; Copyright 2009 by <a href="http://domain.invalid/">you</a>.
    {% endblock %}
  </div>
</body>

child.html template

{% extends "base.html" %}

{% block title %}Index{% endblock %}
{% block head %}
  {% parent %}
  <style type="text/css">
    .important { color: #336699; }
  </style>
{% endblock %}
{% block content %}
  <h1>Index</h1>
  <p class="important">
    Welcome on my awesome homepage.
  </p>
{% endblock %}

Дочерний шаблон может переопределять блоки для определенных стилей страницы, содержимого и т. Д. Вы также можете заметить использование {% parent%} который захватывает родительский контент, чтобы вы не потеряли его при замене.

Я рекомендую вам попробовать Twig . Очень полезно.

22
ответ дан 28 November 2019 в 03:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: