Инструменты пользователя

Инструменты сайта


limb3:ru:packages:wact:tag_types

Типы тегов шаблонной системы WACT

В шаблонной системе WACT существует несколько основных типов тегов.

Сравнительная таблица типов тегов

Тип тега Может писать в компилируемый шаблон? Создает активный компонет фазы исполнения? Совпадает с каким-нибудь HTML тегом?
WactCompilerTag Да Нет Нет
WactSilentCompilerTag По-умолчанию нет. Только при явных вызовах Нет Нет
WactRuntimeComponentTag Да Да Нет
WactRuntimeDatasourceComponentTag Да Да Нет
WactRuntimeDatasourceComponentHTMLTag Да Да Да
WactRuntimeComponentHTMLTag Да Да Да
GenericTags (WactGenericHTMLTag, WactGenericContainerHTMLTag) Нет Да Да (на ваш выбор)
Widgets Нет Да Да (на ваш выбор)

WactCompilerTag

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

Типичный представители - <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

WactSilentCompilerTag выполняют определенные операции с компилируемым шаблонном только по-требованию других тегов. То есть данные теги в компилируемый шаблон в методе generate() ничего не пишут.

Для того, чтобы эти теги отработали, существует метод generateNow(), который нужно вызывать явно.

В качестве примера такого тега можно назвать <list:default> тег.

WactRuntimeComponentTag

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

WactRuntimeDatasourceComponentTag расширяют поведение WactRuntimeComponentTag тем, что они дополнительно являются обычными контейнерами данных.

Примеры WactRuntimeDatasourceComponentTag:

  • <list:item> тег - повторяет часть шаблона при выводе списков. Является контейнером данных, который последовательно заполняется каждым элементов массива данных в компоненте тега <list:list>
  • <core:datasource> - вставляет контейнер данных в шаблон, к которому другие могут обращаться.

WactRuntimeDatasourceComponentHTMLTag

WactRuntimeDatasourceComponentHTMLTag - это WactRuntimeDatasourceComponentTag , однако есть одно очень важное отличие - для тега существует стандартный HTML-тег.Например, есть стандартный HTML тег <form>.

Другими словами данный вид тегов позволяет расширить поведение стандартных тегов (например, HTML тегов) до того, как этот тег будет отправлен браузеру.

WactRuntimeComponentHTMLTag

WactRuntimeComponentHTMLTag - это расширение WactRuntimeComponentTag для тех тегов, для которых существует HTML-аналог.

Пример такого тега <input>, <text_area> и т.д.

Generic Tag

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:

  • WactGenericTag
  • WactGenericContainerTag.

WactGenericContainerTag может содержать дочерние элементы. То есть вы можете в php скрипте при необходимости добавлять дополнительные теги к уже существующим.

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

WACT самостоятельно решает, какой из классов использовать. Это зависит от того, как вы описали тег в шаблоне. Например, вот тег будут преобразован в объект класса WactGenericTag:

<div runat="server" />

В вот здесь уже станет объектом класса WactGenericContainerTag:

<div runat="server"></div>

Widgets

Есть еще один тип элементов WACT шаблонизатора - Widgets. Widgets - это по сути активные компоненты, которые можно вставлять в откомпилированный шаблон на этапе выполнения.

Существует 3 типа Widgets:

  • WactTextWidget - позволяет вывести текст.
  • WactTagWidget - позволяет вывести тег. Не может иметь дочерний элемент.
  • WactTagContainerWidget - позволяет создать компонент, выводящий тег, и содержащий дочерние элементы.

В целом, поведение Widgets схоже с поведением Generic Tags.

Обсуждение

Ваш комментарий. Вики-синтаксис разрешён:
  ____   _      __  ____    __ __  _____
 / __ \ | | /| / / / __ \  / //_/ / ___/
/ /_/ / | |/ |/ / / /_/ / / ,<   / (_ / 
\___\_\ |__/|__/  \____/ /_/|_|  \___/
 
limb3/ru/packages/wact/tag_types.txt · Последние изменения: 2010/11/10 10:02 (внешнее изменение)