<fetch>
Описание
<fetch> тег позволяет шаблонам самостоятельно получать данные, например, делать запросы к базе данных (естественно при помощи дополнительных helper-классов). Иногда это называют PullView или ActiveView.
Вытягивание данных происходит при помощи классов, которые мы называем fetcher-ы (фетчеры). В WACT-е для таких классов определен только интерфейс WactFetcher (limb/wact/src/components/fetch/WactFetcher.interface.php). В пакете WEB_APP есть базовый класс для fetcher-ов - это класс lmbFetcher.
fetcher-ы возвращают данные в виде итераторов или массивов (потом массивы автоматически преобразуются в итераторы в шаблоне), а затем эти данные тег <fetch> передает одному или некоторым target компонентам шаблона.
см. также раздел "Использование тегов <fetch> и <active_record:fetch>", где есть подробное описание как используются <fetch> теги в WACT шаблонах.
<fetch> тег является WactRuntimeComponentTag и создает активный компонент класса WactFetchComponent.
Синтаксис
<fetch using='fetcher_class_name' target='target1[,target2...]' [to='target1_dbe,target2_dbe'] [navigator='pager_name'] [first='true'|one='true'] [order='order_params'] [offset='offset'] [limit='limit'] [include='fetcher_class_file_path']/>
Область применения
В любом месте WACT шаблона.
Атрибуты
using - путь до класса или просто имя класса, реализующего интерфейс WactFetcher. Если указано только имя класса - то класс должен быть включен (определен) до активации шаблона или должна быть возможность получить расположение класса при помощи __autoload(). Можно также использовать укороченный путь до класса, например, src/fetch/MyFetcher (без .class.php), если путь до папки, где находится src/fetcher находится в php include_path.
to - базовый атрибут, который указывает, куда нужно отправить данные из fetcher-а. Конечный компонент должны поддерживать метод
registerDataset (обычно это тег <list:list>) или же метод
registerDatasource (обычно это тег <core:datasource>), если используется так атрибут first или one. В качестве значения to можно использовать любой
DBE.
target - упрощенный вариант атрибута to, который не поддерживает DBE, но который удобно использовать в шаблоне. Значение target преобразуетя по схеме «(value)» и передается в качестве значения атрибута to.
navigator - если результат запроса нужно ограничить или разбить на страницы, то можно использовать данный атрибут. Должен указывать на идентификатор pager-а, при помощи которого осуществляется разделение результата запроса на страницы.
first - при использовании этого атрибута <fetch> возьмет из полученного итератора только первую запись и отдаст ее в компонент, поддерживающий метод registerDatasource.
one - тоже, что и first.
offset - позволяет задат offset - количест элементов, которые нужно пропустить с начала списка.
limit - ограничение на количество получаемых данных.
include - позволяет указать, какой файл следует подключить, чтобы класс fetcher-а в атрибуте using был определен.
Внимание:
для работы с атрибутами offset и limit необходимо, чтобы итератор, получаемый из fetcher-а поддерживал метод paginate(). Если fetcher возвращает массив, тогда WACT автоматически обернет массив в итератор класса WactArrayIterator, который поддерживает эти методы.
для работы с атрибутом order необходимо, чтобы итератор поддерживал метод sort($order_params = array())
Это важно, если вы создаете свои собственные итераторы, а не используете те, что есть в Limb3, например, в пакете DATASOURCE.
Содержимое
Пример использования
<fetch using="NewsFetcher" target="news" order='date' include='/src/fetcher/my_fetchers.inc.php'>
<fetch:param limit='5'/>
<fetch:decorate using='/src/datasource/JipAssigner' group_name='all' />
</fetch>
<fetch using="NewsFetcher" to="#(news)" order='date' include='/src/fetcher/my_fetchers.inc.php'>
<fetch:param limit='10' offer='10'/>
</fetch>
см. также раздел "Использование тегов <fetch> и <active_record:fetch>", где есть различные примеры использования атрибутов offset, limit, first и других.
Обсуждение