Предопределенные св-ва - это образно говоря переменные, которые определены на этапе выполнения шаблона только в рамках (внутри) определенных тегов.
Предопределенные св-ва это классы, дочерние от 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).
<?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(), который генерит уникальное название, которое можно использовать в качестве имени переменной в компилированном шаблоне.
Обсуждение