====== Передача данных внутри шаблонов ====== WACT предоставляет средства по перемещению данных внутри шаблона. Допустим, у нас есть контейнер с данными по автору, и нам необходимо вывести список всех книг этого автора (при помощи ). Конечно, можно отдельно передать данные сначала в первый контейнер, а затем во второй, но эти операции можно делать непосредственно в шаблоне. Другой пример: вам нужно вывести одни и те же данные в разных местах шаблона. Конечно, можно выставить данные в эти места явно, но WACT предоставляет способ просто копировать содержимое контейнеров данных. Передача данных внутри шаблонов активно используется в шаблонах при работе с пакетом ACTIVE_RECORD. См. раздел [[limb3:ru:packages:active_record:in_wact_templates#peredacha_dannyx_vnutri_shablonov|"Использование ACTIVE_RECORD в шаблонах WACT"]]. ===== Использование атрибута from ===== Самый простой способ - это использование атрибута **from** тега или , в зависимости от того, что нам необходимо - список объектов или только один объект. Допустим, что нам нужно отобразить данные во автору и список его книг: Имя автора: {$full_name}
Все книги автора:
  • {$title}
Обратите внимание на конструкцию . {$books} - это выражение, которое указывает на поле "books" внутри текущего контекста, которым является тег Что бы все работало, нам необходимо подготовить следующие данные для шаблона: $data = array('full_name' => 'Vasa Pupkin', 'books' => array(array('title' => 'Book1'), array('title' => 'Book2'))); $template = new WactTemplate('author.html'); $template->setChildDataSource('author', $data); Значение атрибута **from** - это [[dbe|DBE (Data Binding Expression)]], другими словами - путь до переменной. В нашем примене мы использовали переменную books из текущего контейнера данных, которым являлся для нас тег . Начиная с версии WACT 0.3 DBE поддерживают точное указание источника данных из любого места (до этого поддерживалось только указание какого-либо родительского контейнера). Поэтому мы могли бы, в принципе, вынести тег из-под вот так: Имя автора: {$full_name}
list:list from='{$#[author]books}'> Все книги автора:
  • {$title}
Возможно, что в данном примере это и не совсем правильно делать, но мы решили продемонстрировать эту возможность DBE. Атрибут from можно использовать и в теге, например: Статья: {$title} Имя автора : {$full_name}
Правда мы могли бы написать данный пример немного короче: Статья: {$title} Имя автора : {$author.full_name}
Эти два примера требуют следующих данных: $data = array('title' => 'Super Article', 'author' => array('full_name' => 'Vasa Pupkin')); $template = new WactTemplate('article.html'); $template->setChildDataSource('article', $data); :!: Атрибут **from** тегов , , и других, где он может использовать поддерживает **краткую форму**, когда знак выражения можно убрать, то есть вместо можно записать просто . В версиях до 0.5 использование атрибута from был именно таким, и мы его будем в дальшейшем. ===== Использование тега ===== Если при передаче данных вам необходимо модифицировать передаваемый итератор, например, ограничить его размер, отсортировать, разбить на страницы, можно использовать тег [[limb3:ru:packages:wact:tags:iterator_tags:iterator_transfer_tag|]], который находится в пакете WEB_APP. Имя автора: {$full_name} Последние 2 книги автора:
  • {$title}
Для примера потребуются следующие данные: $data = array('full_name' => 'Vasa Pupkin', 'books' => array(array('title' => 'Book1'), array('title' => 'Book2'), array('title' => 'Book3'))); $template = new WactTemplate('author.html'); $template->setChildDataSource('author', $data); WACT по-умолчанию поддерживает лимитирование для массивов. Источник данных указывается атрибутом **from** тега (кстати, здесь мы использовали краткую форму записи атрибута from), а компонент, куда пойдут данные - **target**. Значение атрибута from - это такой же [[dbe|DBE]], как и для тегов и . Остальные параметры тега имеют смысл, аналогичный как при [[fetch_tags|использовании тега ]].