====== Типы тегов шаблонной системы WACT ====== В шаблонной системе WACT существует несколько основных типов тегов. ===== Сравнительная таблица типов тегов ===== ^Тип тега ^ Может писать в компилируемый шаблон? ^ Создает активный компонет фазы исполнения? ^ Совпадает с каким-нибудь HTML тегом? ^ | WactCompilerTag | Да | Нет | Нет | | WactSilentCompilerTag | По-умолчанию нет. Только при явных вызовах | Нет | Нет | | WactRuntimeComponentTag| Да | Да | Нет | | WactRuntimeDatasourceComponentTag| Да | Да | Нет | | WactRuntimeDatasourceComponentHTMLTag| Да | Да | Да | | WactRuntimeComponentHTMLTag| Да | Да | Да | | GenericTags (WactGenericHTMLTag, WactGenericContainerHTMLTag)| Нет | Да | Да (на ваш выбор)| | Widgets| Нет | Да | Да (на ваш выбор)| ===== WactCompilerTag ===== Базовый класс для тегов, не имеет компонента фазы исполнения, но может писать код в компилируемый шаблон. Типичный представители - [[.tags:core_tags:core_optional_tag|]] и тег [[.tags:core_tags:core_default_tag|]], которые используются для вставки условий вида if/else в компилируемый шаблон. You are logged in You are not logged in ===== WactSilentCompilerTag ===== WactSilentCompilerTag выполняют определенные операции с компилируемым шаблонном только по-требованию других тегов. То есть данные теги в компилируемый шаблон в методе **generate()** ничего не пишут. Для того, чтобы эти теги отработали, существует метод **generateNow()**, который нужно вызывать явно. В качестве примера такого тега можно назвать тег. ===== WactRuntimeComponentTag ===== WactRuntimeComponentTag уже создают (или содержат) активный компонент фазы исполнения, с котором вы можете работать из своего php-приложения, плюс эти теги могут писать код в компилируемый шаблон. Это наиболее распространенный тип тегов в шаблонной системе WACT. В качестве примера можно привести тег [[.tags:core_tags:core_block_tag|]], который позволяет скрывать или показывать определенный раздел шаблона в зависимости от параметров, существующий во время выполнения приложения: Вот, к примеру, код, который позволит управлять видимостью части шаблона, заключенного внутрь тега : $template = new WactTemplate('template.html'); $block = $template->getChild('some_block'); if(someСondition()) $block->show(); else $block->hide(); $template->display(); ===== WactRuntimeDatasourceComponentTag ===== WactRuntimeDatasourceComponentTag расширяют поведение WactRuntimeComponentTag тем, что они дополнительно являются обычными контейнерами данных. Примеры WactRuntimeDatasourceComponentTag: * тег - повторяет часть шаблона при выводе списков. Является контейнером данных, который последовательно заполняется каждым элементов массива данных в компоненте тега * [[.tags:core_tags:core_datasource_tag|]] - вставляет контейнер данных в шаблон, к которому другие могут обращаться. ===== WactRuntimeDatasourceComponentHTMLTag ===== WactRuntimeDatasourceComponentHTMLTag - это WactRuntimeDatasourceComponentTag , однако есть одно очень важное отличие - для тега существует стандартный HTML-тег.Например, есть стандартный HTML тег
. Другими словами данный вид тегов позволяет расширить поведение стандартных тегов (например, HTML тегов) до того, как этот тег будет отправлен браузеру. ===== WactRuntimeComponentHTMLTag ===== WactRuntimeComponentHTMLTag - это расширение WactRuntimeComponentTag для тех тегов, для которых существует HTML-аналог. Пример такого тега , и т.д. ===== Generic Tag ===== Generic Tags - это теги с активным компонентами, которые рендерят какой-либо текст на этапе выполнения шаблона. Generic Tags можно использовать в особых случаях, где требуется дополнительные возможности по управлению результатом работы шаблона, например, заменить стиль тега, удалить/добавить тег или текст. Для того, чтобы указать шаблонизатору WACT, что обычный HTML тег должен интерпретироваться им как Generic Tag, то есть как тег с активным компонентом, необходимо указать специальный атрибут **runat** равный значению **server**. Например:

Select a Logo

PHP Logo | MySQL Logo

В вашем скрипте, который управляет данным шаблоном, на основе параметра GET["logo"] вы теперь сможете менять любые атрибуты этого тега: $page = new WactTemplate('/logo.html'); // Is the logo variable set? if (isset ($_GET['logo'])) { // Get the component $img = $page->getChild('TheLogo'); // Modify the src attribte, depending on the value of $_GET['logo'] switch (strtolower($_GET['logo'])) { case 'php': $img->setAttribute('src','http://ch.php.net/images/php.gif'); break; case 'mysql': $img->setAttribute('src','http://www.mysql.com/images/poweredbymysql-125.png'); break; } То есть, мы получили возможность модифицировать атрибуты тега во время фазы исполнения. Существует два типа Generic Tags: * WactGenericTag * WactGenericContainerTag. WactGenericContainerTag может содержать дочерние элементы. То есть вы можете в php скрипте при необходимости добавлять дополнительные теги к уже существующим. Класс WactGenericTag не позволяет иметь дочерние теги, могут быть изменены только его атрибуты. WACT самостоятельно решает, какой из классов использовать. Это зависит от того, как вы описали тег в шаблоне. Например, вот тег будут преобразован в объект класса WactGenericTag:
В вот здесь уже станет объектом класса WactGenericContainerTag:
===== Widgets ===== Есть еще один тип элементов WACT шаблонизатора - Widgets. Widgets - это по сути активные компоненты, которые можно вставлять в откомпилированный шаблон на этапе выполнения. Существует 3 типа Widgets: * WactTextWidget - позволяет вывести текст. * WactTagWidget - позволяет вывести тег. Не может иметь дочерний элемент. * WactTagContainerWidget - позволяет создать компонент, выводящий тег, и содержащий дочерние элементы. В целом, поведение Widgets схоже с поведением Generic Tags.