====== Передача данных внутри шаблонов ====== WACT предоставляет средства по перемещению данных внутри шаблона. Допустим, у нас есть контейнер с данными по автору, и нам необходимо вывести список всех книг этого автора (при помощи ). Конечно, можно отдельно передать данные сначала в первый контейнер, а затем во второй, но эти операции можно делать непосредственно в шаблоне. Другой пример: вам нужно вывести одни и те же данные в разных местах шаблона. Конечно, можно выставить данные в эти места явно, но WACT предоставляет способ просто копировать содержимое контейнеров данных. Передача данных внутри шаблонов активно используется в шаблонах при работе с пакетом ACTIVE_RECORD. См. раздел [[limb3_2007_2:ru:usage:active_record:in_wact_templates#peredacha_dannyx_vnutri_shablonov|"Использование ACTIVE_RECORD в шаблонах WACT"]]. ===== Использование атрибута from ===== Самый простой способ - это использование атрибута **from** тега или , в зависимости от того, что нам необходимо - список объектов или только один объект. Допустим, что нам нужно отобразить данные во автору и список его книг: Имя автора: {$full_name}
Все книги автора:
  • {$title}
Обратите внимание на конструкцию . Что бы все работало, нам необходимо подготовить следующие данные для шаблона: $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); ===== Использование тега ===== Если при передаче данных вам необходимо модифицировать передаваемый итератор, например, ограничить его размер, отсортировать, разбить на страницы, можно использовать тег [[limb3_2007_2:ru:usage:wact:tags:iterator_tags:iterator_transfer_tag|]], который находится в пакете WEB_APP. Имя автора: {$full_name} Последние 2 книги автора:
  • {$title}
Для примера потребуются следующие данные: lmb_require('limb/datasource/src/lmbPagedArrayDataset.class.php'); $data = array('full_name' => 'Vasa Pupkin', 'books' => new lmbPagedArrayDataset(array(array('title' => 'Book1'), array('title' => 'Book2')))); $template = new lmbWactTemplate('author.html'); $template->setChildDataSource('author', $data); Обратите внимание на использование класса lmbWactTemplate из пакета WEB_APP. Мы хотели подчеркнуть, что функциональность тега доступна именно при использовании пакета WEB_APP и классов из других пакетов Limb. Например, если бы мы передали в качестве **books** простой массив, атрибуты limit, offset, order - игнорировались бы. Класс **lmbPagedArrayDataset** - содержит необходимые расширения для такого использования. Источник данных указывается атрибутом **from** тега , а контейнер данных, куда пойдут данные - **target**. Значение атрибута from - это такой же [[dbe|DBE]], как и для тегов и . Остальные параметры тега имеют смысл, аналогичный как при [[fetch_tags|использовании тега ]].