В шаблонной системе WACT существует несколько основных типов тегов.
Тип тега | Может писать в компилируемый шаблон? | Создает активный компонет фазы исполнения? | Совпадает с каким-нибудь HTML тегом? |
---|---|---|---|
WactCompilerTag | Да | Нет | Нет |
WactSilentCompilerTag | По-умолчанию нет. Только при явных вызовах | Нет | Нет |
WactRuntimeComponentTag | Да | Да | Нет |
WactRuntimeDatasourceComponentTag | Да | Да | Нет |
WactRuntimeDatasourceComponentHTMLTag | Да | Да | Да |
WactRuntimeComponentHTMLTag | Да | Да | Да |
GenericTags (WactGenericHTMLTag, WactGenericContainerHTMLTag) | Нет | Да | Да (на ваш выбор) |
Widgets | Нет | Да | Да (на ваш выбор) |
Базовый класс для тегов, не имеет компонента фазы исполнения, но может писать код в компилируемый шаблон.
Типичный представители - <core:optional> и тег <core:default>, которые используются для вставки условий вида if/else в компилируемый шаблон.
<core:optional for="#user.authenticated">You are logged in</core:optional> <core:default for="#user.authenticated">You are not logged in</core:default>
WactSilentCompilerTag выполняют определенные операции с компилируемым шаблонном только по-требованию других тегов. То есть данные теги в компилируемый шаблон в методе generate() ничего не пишут.
Для того, чтобы эти теги отработали, существует метод generateNow(), который нужно вызывать явно.
В качестве примера такого тега можно назвать <list:default> тег.
WactRuntimeComponentTag уже создают (или содержат) активный компонент фазы исполнения, с котором вы можете работать из своего php-приложения, плюс эти теги могут писать код в компилируемый шаблон.
Это наиболее распространенный тип тегов в шаблонной системе WACT.
В качестве примера можно привести тег <core:block>, который позволяет скрывать или показывать определенный раздел шаблона в зависимости от параметров, существующий во время выполнения приложения:
<core:block hidden="true" id='some_block'>This is invisible</core:block>
Вот, к примеру, код, который позволит управлять видимостью части шаблона, заключенного внутрь тега <core:block>:
$template = new WactTemplate('template.html'); $block = $template->getChild('some_block'); if(someСondition()) $block->show(); else $block->hide(); $template->display();
WactRuntimeDatasourceComponentTag расширяют поведение WactRuntimeComponentTag тем, что они дополнительно являются обычными контейнерами данных.
Примеры WactRuntimeDatasourceComponentTag:
WactRuntimeDatasourceComponentHTMLTag - это WactRuntimeDatasourceComponentTag , однако есть одно очень важное отличие - для тега существует стандартный HTML-тег.Например, есть стандартный HTML тег <form>.
Другими словами данный вид тегов позволяет расширить поведение стандартных тегов (например, HTML тегов) до того, как этот тег будет отправлен браузеру.
WactRuntimeComponentHTMLTag - это расширение WactRuntimeComponentTag для тех тегов, для которых существует HTML-аналог.
Пример такого тега <input>, <text_area> и т.д.
Generic Tags - это теги с активным компонентами, которые рендерят какой-либо текст на этапе выполнения шаблона.
Generic Tags можно использовать в особых случаях, где требуется дополнительные возможности по управлению результатом работы шаблона, например, заменить стиль тега, удалить/добавить тег или текст.
Для того, чтобы указать шаблонизатору WACT, что обычный HTML тег должен интерпретироваться им как Generic Tag, то есть как тег с активным компонентом, необходимо указать специальный атрибут runat равный значению server. Например:
<img id="TheLogo" src="http://ch.php.net/images/php.gif" runat="server"> <h2>Select a Logo</h2> <p><a href="?logo=php">PHP Logo</a> | <a href="?logo=mysql">MySQL Logo</a></p>
В вашем скрипте, который управляет данным шаблоном, на основе параметра GET[«logo»] вы теперь сможете менять любые атрибуты этого <img> тега:
$page = new WactTemplate('/logo.html'); // Is the logo variable set? if (isset ($_GET['logo'])) { // Get the <img /> 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; }
То есть, мы получили возможность модифицировать атрибуты тега <img> во время фазы исполнения.
Существует два типа Generic Tags:
WactGenericContainerTag может содержать дочерние элементы. То есть вы можете в php скрипте при необходимости добавлять дополнительные теги к уже существующим.
Класс WactGenericTag не позволяет иметь дочерние теги, могут быть изменены только его атрибуты.
WACT самостоятельно решает, какой из классов использовать. Это зависит от того, как вы описали тег в шаблоне. Например, вот тег будут преобразован в объект класса WactGenericTag:
<div runat="server" />
В вот здесь уже станет объектом класса WactGenericContainerTag:
<div runat="server"></div>
Есть еще один тип элементов WACT шаблонизатора - Widgets. Widgets - это по сути активные компоненты, которые можно вставлять в откомпилированный шаблон на этапе выполнения.
Существует 3 типа Widgets:
В целом, поведение Widgets схоже с поведением Generic Tags.
Обсуждение