Шаблоны В Шаблонизаторе И Как Шаблоны Django Достигли Php (Еще Раз)

В ожидании 23 февраля вы можете даже не заметить, как вечер четверга поговорим о шаблонизаторах для PHP может плавно перетекать в пятничные вечера.

В статье будет рассмотрено несколько тем, начиная с необходимости шаблонизаторов вообще и в PHP в частности, и заканчивая заметками о процессе создания шаблонизатора.

джа (перенос кода с Python на PHP).



О шаблонизаторах

В те давние времена, когда большинство из нас ходили под столом, некий гренландец опубликовал код PHPT. Тогда, кажется, никому и в голову не пришло применить принцип разделения обязанностей в дистиллированной форме MVC к веб-разработке, однако вполне можно было назвать этот «набор скриптов» шаблонизатором из-за суррогатного SSI и работы с формами.

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

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

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

Да, это старая мантра – «подберите инструмент к задаче» – и здесь она тоже работает. Если это проект человека (или нескольких), не обиженного на <? in template code, if it knows what it's doing, for whom, why it's doing it, and understands the possible consequences, then that's great. These are people with an iron will, and often know how to subjugate others to it. Если это проект нескольких команд, когда разделение разных разделов продукта на разных уровнях абстракции жизненно необходимо для поддержания качественных и количественных показателей эффективности, или проект перфекциониста (например, страдающего «шаблонами мозга») особого выбора нет — рано или поздно вам придется начать использовать шаблонизатор.

И потом, выбирая шаблонизатор, вы неизбежно сталкиваетесь с тремя основными критериями выбора:

  • Синтаксис
  • Безопасность
  • Рабочая скорость
*На досуге вы можете придумать еще несколько или перетасовать те, что перечислены по приоритету.

Синтаксис Это важно, поскольку влияет на барьер входа и скорость разработки шаблонов (последняя часто нивелируется при использовании IDE).

Чем проще и логичнее синтаксис, тем быстрее верстальщики (те самые, о которых наши товарищи нигде, кроме России, не слышали) выдадут результат. Безопасность Концепция безопасности в шаблонах тесно связана с концепцией разрешенный уровень логики , что, в свою очередь, связано с понятием расширяемость .

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

Понятно, что большинство людей хотят иметь в своих шаблонах ровно столько логики, сколько нужно и чего уже не нужно.

Проблема только в том, что «сколько надо» у каждого свое — с одной стороны раздаются вопли: «Зачем шаблонизатору еще, если — это уже попахивает бизнес-логикой», — с другой: «А мы необходимо иметь возможность запускать процесс ОС в шаблоне».

Именно здесь в игру вступает концепция «расширяемости».

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

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

Скорость определенно имеет значение.

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

Действительно есть из чего выбрать.



Джа.

О портировании с Python на PHP

Кратко узнать о том, что такое джа, можно вкратце.

объявление ).

Почему и каким образом было сделано портирование, можно узнать из описания.

Джа на GitHub , и в этой главе я расскажу о том, сколько приседаний стоит переноска.

Разбить рамку Прежде всего стоит отметить, что Django — это полноценный фреймворк для разработки веб-приложений на Python, и движок шаблонов — значительная его часть.

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

Вот такие они появились встроенные интерфейсы — предельно упрощенные заменители родственных подсистем Django, которые, однако, могут быть заменены заказными разработками.

Подойдите ближе к источнику В портировании всегда хорошо быть ближе к исходнику.

Это позволяет быстро ориентироваться и вносить соответствующие коррективы в порт в любой момент после изменения сэмпла.

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

Сравните, например, параметры str_split() и ''.

split(), объекты и функции Reflection* модуля проверки или типы данных, возвращаемые функциями регулярных выражений как совпадения.

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

Чтобы быть еще ближе к исходнику в PHP этого было недостаточно:

  • Ключевые слова-аргументы
  • Наконец, ветки обработки исключений
  • __iter__ дескриптор вместо интерфейса Iterator
  • Частичная привязка аргументов, например functools.partial()
Различия в области видимости переменных внутри метода и отсутствие синтаксического сахара в PHP для создания декораторов приходилось компенсировать замыканиями (сравните: джа , Джанго ), в целом вполне успешно.

Упрощение создания библиотек тегов и фильтров.

Вы можете расширить функциональность Django, реализовав собственные теги и фильтры.

Для упрощения их регистрации в коде библиотеки полноценно используются декораторы.

Для dja пришлось придумать альтернативный путь — тут на помощь пришли анонимные функции.

Сравнить (регистрация нижнего фильтра):

  
   

@register.filter(is_safe=True) def lower(value): return value.lower()



$lib->filter('lower', function($value) { return strtolower($value); }, array('is_safe' => True));

Таким образом, анонимные функции можно назвать палочкой-выручалочкой при портировании изобилующего декораторами кода Python на PHP, в частности dja — это триумф анонимных функций.

Я никогда не видел такого количества их ни в одном другом PHP-проекте.

Портовые тесты Django славится своим набором тестов, поэтому было бы обидно не импортировать хотя бы часть этого богатства мудрости.

Я убежден, что читаю как минимум дважды перед сном.

код регрессионного теста сделает вас духовно богаче (осторожнее со скобками, берегите глаза!).

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

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

Это, пожалуй, все, что я хотел сказать.

Спасибо за внимание.

Удачи в портировании.

P.S.: И да, я был удивлен, обнаружив, что джа" набирает обороты " Это неправда %P Теги: #php #движки шаблонов #шаблоны #шаблоны django #python #django #разработка веб-сайтов #php

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.