Мощный, всепоглощающий, великий и ужасный модуль VIEWS. Очень коварный, он толкает программиста с пути «только хардкор» и разработки на PHP на скользкую дорожку программирования без программирования. :)
Попробую показать работу с модулем VIEWS, что называется из кода. Здесь показаны примеры с использованием версии модуля Views 7.x — 3.14.
Объект Views
Пусть к нас есть какое то представление (объект views). Получить его объект можно вот так:
1 2 |
//берем вьюху $view = views_get_view('machine-name'); |
Нужно знать лишь машинное имя представления. Далее все в вашей власти.
Подстановка значений открытых фильтров
Если представление содержит exposed filters, а вам необходимо задать их значения, то делается это следующим образом:
1 2 3 4 5 6 |
//подключаем фильтры $filters = array(); $filters['field_name1'] = 'значение 1'; $filters['field_name2'] = 'значение 2'; $filters['field_name3'] = 'значение 3'; $view->set_exposed_input($filters); |
Названия фильтров можно подсматривать в HTML коде преставления или в редакторе.
В редакторе наведите курсор на название критерия фильтрации, и последний элемент пути будет содержать правильное машинное имя параметра фильтра. Opera, к примеру, показывает подсказку внизу экрана.
Выбор отображения
Если в вашем представлении используется несколько отображений, выбрать нужное можно вот так:
1 |
$view->set_display('default'); |
Выполняем запрос VIEW
Фильтры установлены, тип отображения выбран. Пора выполнить запрос.
1 |
$view->execute(); |
Далее готовимся к выводу данных в шаблон.
Отключаем вывод фильтра во VIEWS
Если его не надо показывать пользователю, то фильтр нам уже не нужен (вьюха была запущена, данные запрошены).
1 |
unset($view->exposed_widgets); |
Просто удалим виджеты фильтра.
Вывод представления в шаблон
В большинстве случаев остается только получить HTML код путем запуска рендеринга объекта представления.
1 2 |
$view_content = $view->render(); echo $view_content; |
Вставка HTML кода перед футером VIEWS
Это что то из разряда частных задач. Пример, возможно, простимулирует вас самостоятельно покопаться в объекте VIEWs.
Я хочу вклинить HTML код во внутрь представления, чтобы он (код) был показан сразу после вывода элементов списка, но до футера (views footer).
Тут придется анализировать есть ли вообще футер у views, а также смотреть не пустой ли список возвращает запрос производимый представлением.
1 2 3 4 5 6 7 8 9 10 11 12 |
$injected_code = 'какой то HTML'; //вставим код под список во view if (!empty($view->footer['area_text_custom']->options['content'])) { $view->footer['area_text_custom']->options['content'] = $injected_code; . $view->footer['area_text_custom']->options['content']; } else { $view->footer['area_text_custom']->options['content'] = $injected_code; } echo $view->render(); //если вьюха пуста, а внедряемый код всё равно надо вывести if (empty($view->result)) echo $injected_code; |