Я разрабатываю свои веб-приложения с помощью только PHP для файлов представления, и я не чувствую себя ограниченным всегда, но я слышу, что существует последовательное число разработчиков, защищающих "внешние" механизмы шаблонной обработки. Таким образом, тому, что движки шаблонов предлагают тому простому PHP, недостает?
Я ищу практические вещи, таким образом, я исключаю следующее:
<?php echo $stuff; ?>
, использование фигурных скобок не имело бы никакого значения),Разделение проблем.
Подобные вещи становятся стандартными при использовании подхода MVC / MTV - когда представление данных обязательно отделено от отображения данных, но не в том случае, если вы используете простой старый PHP.
Использование механизма шаблонов позволяет легко отделить то, что отображается, от того, как оно отображается.
Я полагаю, вы могли бы возразить, что это подпадает под «присмотр за плохими разработчиками», поскольку хороший разработчик должен это делать в любом случае, но, на мой взгляд, механизм шаблонов облегчает задачу и для хороших разработчиков.
Простое переключение между представлениями
При нынешнем состоянии интернета мне нужно предоставлять информацию в разных форматах:
Информация для этих форматов может быть одинаковой, отличается только представление. Используя некий механизм шаблонов, я могу быстро переключаться между этими представлениями.
С помощью шаблонов вы также можете делегировать ответственность за презентацию дизайнерам. Дизайнеры могут создавать шаблоны, а разработчики могут работать в логике. Также легче поддерживать последовательность в презентации.
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- значение
[ключ]
и сортам. Если вы хотите разрабатывать приложения, которые можно настраивать с помощью множества различных шаблонов и макетов, сохраняя при этом дизайн отдельно от логики, например для разных клиентов вы можете рассмотреть возможность использования системы шаблонов.
Но если вашим приложениям просто нужен один шаблон и никогда не меняют сильно макет, то придерживайтесь того, что работает для вас, зачем менять? :)
Некоторые механизмы создания шаблонов могут компилировать шаблоны, приводящие к высокооптимизированным преобразованиям. Возьмем, к примеру, XslCompiledTransform в .NET.
Попробуйте снова сделать установщики общедоступными в SunHeader.
-121--4076918-http://github.com/ericflo/twissandra - это клон твиттера в том же ключе, что и ретвис, первоначально для 0,3 и теперь обновляется для 0,6. Поймать erifclo в # кассандра на irc, если у вас есть вопросы.
-121--4407292-Ваши ответы выглядят как реальные ответы, но сформулированы очень снисходительно. Например:
нянчить плохих разработчиков (т.е. использовать механизм шаблонов, потому что это заставляет вас не смешивать код в презентацию)
Я бы назвал это приложением Правило наименьшей мощности . Это делает ваш шаблон гораздо более полезным для всех пользователей, а не только «плохих разработчиков».
Ограничения делают языки программирования. PHP не имеет встроенной функции сборки, и это не потому, что Расмус думал, что вы все «дети.»
Некоторые люди не согласятся, но, поскольку я использую 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 %}
© 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 . Очень полезно.