====== Плюсы и минусы WACT шаблонизатора ======
===== Плюсы WACT =====
* WACT использует **декларативную логику** описания. То есть WACT-шаблоны - это html-документы с вкраплениями XML-тегов. Никакого дополнительного синтаксиса, обучение происходит очень быстро.
* WACT содержит мощные средства для **компоновки** шаблонов: обворачивание, включение, множественное обворачивание. Мы не знаем ни одного шаблонизатора, который может позволить подобные вещи.
* WACT хорошо подходит **для верстальщиков**, так как все, кроме вывода переменных - это обычные теги, выучить которые очень легко. Легко огранизовать вывод списков, вывод пейджера, оформление форм и списков ошибок валидации, включение другого шаблона и т.д. Кроме этого, композиция шаблонов полностью может быть отдана на откуп верстальщику, он может выделять общие части как ему будет угодно - программист для этой работы не нужен.
* WACT **компилируемый шаблонизатор**, где код первоначального шаблона сначала переводится в готовый к запуску php-скрипт, как например, это происходит в Smarty. Причем шаблон компилируется целиком, поэтому **композиция** (разбиение шаблона на части, обворачивание ит.д. ) никак **не влияет на скорость** исполнения шаблона, так как он собирается в одно целое при компиляции, от отличие, например, от Smarty.
* Компиляция и достаточно чистый php-код откомпилированного шаблона делает WACT весьма **быстрым шаблонизатором**. Падение в производительности по сравнению с чистым php составляет приблизительно 3-4 раза (наши личные замеры) и этот отрыв при увеличении сложности шаблонов только уменьшается, так как WACT - все таки объектный шаблонизатор и на его инициализацию требуется больше ресурсов, чем на обычный php-файл.
* WACT - **расширяемый шаблонизатор**. Можно легко добавлять свои теги и фильтры, создавать целые пакеты со своими тегами или фильтрами, как например, это имеет место в пакете WEB_APP.
* Механизмы поиска шаблонов и система настроек выполнена в виде набора интерфейсов и базовых классов. В простом случае возможностей базовой реализации будет вполне достаточно. Однако при необходомости, можно будет легко внедрить, например, кеширование шаблонов, в зависимости от языка, поиск тегов в каких-то определенных папках, сменить схему хранения шаблонов и т.д. В плане настроек WACT - **очень гибок**.
* WACT - это **компонентый шаблонизатор**. Это значит, что вы можете изменять состояние его компонентов во время исполнения через ООП API. Это также значительно облегчает, например, работу с формами - элементы формы и сама форма - компоненты, однако в первоначальном шаблоне - это обычные html-теги и никакого дополнительного кода не требуется.
* WACT полностью **поддерживает работу с итераторами** и объектными контейрами данных. Все базовые теги реализованы так, как если бы в данные в шаблонизатор приходили только в виде итераторов. Даже обычные массивы WACT обворачивает во внутреннюю форму итератора. Это имеет свой недостаток - несколько снижает скорость (см. ниже), но в целом дает множество удобств (если вы будете изучать Limb3, то эти преимущества станут быстро очевидными).
* WACT позволяет очень свободно **оперировать данными внутри шаблона**. Данные можно не только выводить, но можно также легко передавать данные с одного уровня на другой, использовать одни и те же данные повторно и т.д. Причем вся логика по передаче данных может (не обязательно) находиться прямо в шаблонах и тоже выглядит как обычные теги.
* Внутри WACT-а можно использовать обычные **php-вставки**. Причем в этих вставках вы также можете взаимодействовать с шаблоном через его API.
* Limb3 пакет WEB_APP содержит **большой набор раcширений**, которые позволяет получать данные прямо из шаблона, легко передавать данные с уровня на уровень, сортировать данные, применять ограничения и т.д. Также есть средства, которые позволяют вызывать любые методы определенных объектов с передачей им необходимых параметров. Вы можете реализовать нечто похожее или воспользоваться нашими наработками.
===== Минусы WACT =====
* Все-таки, если скорость для вас - главное и вы ведете борьбу за каждую тысячную секунды, а кеширование невозможно - то Blitz или native-php - это ваш выбор, а не WACT. Дело в том, что Wact работает с данными через дополнительные объекты, плюс требует парсинга небольшого количества базовых классов - эта особенность дает о себе знать в любом случае.
* В настоящий момент WACT требует **обязательной сбалансированности шаблонов**. Каждому тегу должен соответствовать закрывающий тег или же должны быть конструкции вида
. Это, возможно, будет неудобно, так как применить знакомый многим php-программистам способ "header - main - footer" не получится, а придется изучить возможности тега , который, впрочем, предоставляет очень большие возможности.
Почему так много плюсов и так мало минусов? Мы действительно считаем WACT весьма очень удачным продуктом. Если у вас есть возражения на этот счет - пишите в форум!