Содержание

Создание собственных предопределенных св-в

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

Предопределенные св-ва это классы, дочерние от WactCompilerProperty (limb/wact/src/compiler/property/WactCompilerProperty.class.php).

Предопределенные св-ва хранятся в файлах с именем some_property_name.prop.php, который должен быть расположен в одной из директорий вида src/template/tags (при использовании WEB_APP пакета). Обратите внимание на окончание .prop.php.

Рассмотрим в качестве примера предопределенное св-во WactParityProperty (limb/wact/src/tags/list/parity.prop.php).

Код класса WactParityProperty

<?php
/**
 * @property Parity
 * @tag_class WactListItemTag
 */
class WactParityProperty extends WactCompilerProperty
{
  protected $temp_var;
  protected $has_increment = FALSE;
 
  function generateScopeEntry($code_writer)
  {
    $this->temp_var = $code_writer->getTempVariable();
    $code_writer->writePHP('$' . $this->temp_var . ' = 0;');
  }
 
  function generatePreStatement($code_writer)
  {
    if (!$this->has_increment)
    {
      $this->hasIncrement = TRUE;
      $code_writer->writePHP('$' . $this->temp_var . '++;');
    }
  }
 
  function generateExpression($code_writer)
  {
    $code_writer->writePHP('(( $' . $this->temp_var . ' % 2) ? "odd" : "even")');
  }
}
?>

Аннотации предопределенных св-в

Обратите внимание на использование следующего фрагмента кода в файле WactParityProperty:

/**
 * @property Parity
 * @tag_class WactListItemTag
 */

Это аннотации. По этим аннотациям словарь предопределенных свойств формирует свое содержимое. Подробнее о словарях в разделе "Словари элементов WACT-шаблона".

Полный список аннотация для фильтров:

В нашем случае св-во WactParityProperty можно применять внутри тега <list:item>, например, в виде выражения {$Parity}.

Методы, которые можно перекрывать

Предопределенные св-ва по определению имеют динамический характер.

Список методов, которые обычно перекрывают в своих предопределенных св-вах:

Остальные методы перекрываются крайне редко, чаще всего это только один generateExpression().

$code_writer - это экземпляр класса WactCodeWriter, который описан в разделе "Как работает компилятор WACT-шаблонов". Здесь лишь отметим метод WactCodeWriter :: getTempVariable(), который генерит уникальное название, которое можно использовать в качестве имени переменной в компилированном шаблоне.