Простейший пример получения результатов дефолтного дисплея представления foo
:
$view = views_get_view('foo');
$view->execute();
debug($view->result);
Более сложный пример:
$view = views_get_view('foo');
// устанавливаем активный дисплей
$view->set_display('page');
// устанавливаем значения аргументов (контекстных фильтров)
$view->set_arguments(array(123, 456));
// устанавливаем значения раскрытых фильтров (field_category_tid это имя параметра, передающегося в $_GET)
$view->set_exposed_input(array('field_category_tid' => 123));
// изменяем количество записей на страницу
$view->set_items_per_page(10);
// устанавливаем страницу (страницы считаются с нуля)
$view->set_current_page(2);
// добавляем сортировку по node.created (возможно только для таблиц участвующих в выборке)
$view->add_item($view->current_display, 'sort', 'node', 'created', array('order' => 'DESC'));
// добавляем фильтр по node.created (возможно только для таблиц участвующих в выборке)
$view->add_item($view->current_display, 'filter', 'node', 'created', array(
'operator' => '>',
'value' => array(
'value' => '-7 day',
),
));
// изменяем значение фильтра по node.type (при этом фильтр уже должен существовать и иметь значение)
$filter = $view->get_item($view->current_display, 'filter', 'type');
$filter['value']['article'] = 'article';
$view->set_item($view->current_display, 'filter', 'type', $filter);
// отключаем выполнение отдельного запроса на получение общего числа строк в запросе
$view->get_total_rows = FALSE;
$view->execute();
debug($view->result);
// посмотреть получившийся запрос
debug((string)$view->build_info['query']);
По материалам Drupal: calling a view programmatically.
Ещё примеры программной работы с Views:
— Рассылка списка новых материалов с помощью Simplenews
— Программно добавить поле в представление
— Как программно вывести представление Views
Написанное актуально для
Views 3
Похожие записи
- Views сортировка по выражению/условию/формуле
- Необязательное значение одной из дат в раскрытом фильтре с оператором BETWEEN
- Как расширить функционал фильтр-плагина Views? (добавляем возможность фильтровать числовые поля по нескольким значениям)
- Экспорт представления Views в код
- Программно добавить шапку или подвал в представление
Комментарии
Для простых сниппетов есть views_embed_view()
Ch, http://xandeadx.ru/blog/drupal/178 ;)
Как всегда, очень полезно! Постоянно пользуюсь, но возникла такая проблема. Вьюс выводит по 10 записей на страницу (для примера). Как мне вывести програмно скажем 3 страницу?
Спасибо, буду пробовать :)
И еще вопрос. Где об этом можно прочитать, чтобы не дергать вас? По верхней ссылке этого нет, а http://views.doc.logrus.com/ у меня почему-то лежит
откройте includes/view.inc ;)
А как программно переопределить шаблон ?
Допустим с views-view.tpl.php в views-view--MY.tpl.php.
http://xandeadx.ru/blog/drupal/269
Как в последствии сгенерировать html?
Например: commerce_embed_view
А то без этого ошибка php была: Notice: Undefined property: view::$dom_id в функции template_preprocess_views_view()...
Не нашел где все опции посмотреть...
А фасетные фильтры, которые в url видны можно $view указать?
например: /page_view?f[0]=field_term:3265
Я и через
И так:
Не учитывает и все.
Или фасетные фильтры во вьюсе не работают в программном выводе ?
:)
Как передать даты для фильтра от и до, пробовал как в get:
$view->set_exposed_input(array(
'product' => $_POST['selectBlock'],
'dt%5Bmin%5D%5Bdate%5D' => $dfrom.'T00%3A00%3A00',
'dt%5Bmax%5D%5Bdate%5D' => $dto.'T23%3A59%3A59'
));
не работает
dt[min][date] и dt[max][date] - имена полей exposed фильтра
решено:
'dt' => array('min' => array('date' => $dfrom.'T00:00:00'), 'max' => array('date' => $dto.'T23:59:59'))
Спасибо, хорошая статья...
Возможно ли удалить(отменить) фильтр? На пример:
Удалить действие этого фильтра?
// Установить / изменить количество записей на страницу просто
А я вывожу это в блоке и хочу отключить постраничный навигатор - все эти функции есть в файле view.inc И этот $this->query->pager надо как то отключить.
init_pager() - Инициализация пейджер. Как инициализации стиля, инициализация пейджер не проводится до конца. Для обеспечения переопределения. - Но где это переопределение? То что можно сделать другой вьюс без пейджера мне понятно, но вдруг можно отключить его?! ;-)
чем set_items_per_page() не устраивает?
set_items_per_page() - изменяет кол-во элементов на странице, а пейджер остаётся - ( страницы 1 2 3 ...) Вот пейджер из футера вьюса как удалить?
Уважаемый xandeadx!
Ваши статьи очень полезны, тысячу раз выручали...
Вот и на этот раз надеюсь на помощь.
Каким образом можно добавить свой CSS класс в $row вьюсины, используя views_get_view? Как добавить в tpl знаю, но пишу модулек, и желательно без tpl...
в модуле - drupal_add_css();
Немного не то... Мне нужно каждому $row добавить свой класс, а не подключить таблицу CSS в модуле
смотрите как в
template_preprocess_views_view_unformatted()
добавляются классыперепробовал тьму вариантов
$view->style_plugin->options['row_class'] = 'my_class';
$view->style_options['row_class'] = 'my_class';
эти тоже не работают...
Пример покажите, пожалуйста! Это вообще возможно через views_get_view сделать? В Google не нашел ни одного примера
в hook_preprocess_views_view_unformatted добавьте класс, пример есть в template_preprocess_views_view_unformatted
Разобрался! Спасибо огромное... Просто искал функционал для views_get_view, а оказалось только через хук можно сделать...
Доброго времени.
А не подскажете как можно вывести несколько пейджеров для одного views. Пример: включен views_load_more но под ним нужен вывод еще и обычного пейджера.
$view->add_item возможно только для таблиц участвующих в выборке.
как добавить фильтр по полю которого нет в фильтрах выбранного представления?
xandeadx,нааверняка, вы можете подсказать, я буду вам очень благодарен. У меня есть view с раскрытым фильтром (текстовый input), нужно его значение установить в качестве значения по умолчанию ("предоставить аргумент по умолчанию") в контекстном фильтре. Как это можно сделать? Заранее благодарен.
Подскажите, пожалуйста, как можно вывести представления Commerce Line Item? использую Commerce Kickstart.. ни один из найденных и известных мне методов, не помог....
Добрый день.
Как во views сделать переключение между видами отображения (список, таблица, плитка), нужно чтоб выбранный режим сохранялся в браузере, + переключался аяксом сохраняя все фильтры, сортировку, и pager?
Может кто подскажет или ссылки кинет, как это можно реализовать.
Класс! Кажется это то что я искал. НЕ подскажете какой примерно хук списка выбора в фильтре по таксономии должен быть, чтоб в этом списке показывались только те термины у которых в дополнительном поле $term->field_user['und'][0]['uid'] стоит ID текущего авторизованного пользователя?
Отправил запрос на друпалру https://drupal.ru/node/144524 , но пока не нашел ответ
hook_form_alter
Добавить комментарий