Drupal → Как программно вывести представление Views

07.08.2010

Получить html код представления можно с помощью функции views_embed_view():

views_embed_view($name, $display_id = 'default'[, $argument_1[, $argument_N]])

$name — системное имя представления;
$display_id — системное имя вида;
$argument_1, $argument_N — аргументы (опционально);

Пример вывода встроенного представления comments_recent:

echo views_embed_view('comments_recent', 'page');

Не будет лишним знать о функции views_get_view_result(), которая возвращает результаты представления в виде массива.

Программная работа с представлениями в Views 3

Написанное актуально для
Views 2.x, Views 3.x
Похожие записи

Комментарии

Можете подсказать как решить такую задачу:

views: есть два аргумента типа cck_field
1. кузов (body-1, body-2, body-3 ....)
2. класс (class-1, class-2 ......)

мне нужно вывести материалы которые принадлежат этим двум полям

echo views_embed_view('comments_recent', 'page', body-1+class-3);

выводит пустой лист, в настройках к аргументам указал - Показать все значения

echo views_embed_view('...', '...', 'body-1', 'class-3');
Гость
08.08.2012, 14:44

Да, но.
При таком варианте отваливается js. Например в d7, не будет работать автосубмит. Не будет работать слайдшоу, и прочее. Можно как либо вызвать views с js.

Роман
09.08.2012, 20:01

А у меня почему-то views_get_view_result не выдает результат.

Есть вьюшка view-last-news, которая в своей превьюхе показывает нормальный результат.
Есть блок, где эта вьюшка так же нормально работает.

А вот в файле node--[тип ноды].tpl.php работать отказывается

Пишу код
$wr=views_get_view_result('view-last-news');
print_r($wr);

И возвращает всего лишь следующее:

Array()

А как получить полностью страницу с этим views? То есть грубо говоря у нас выводится по вид по адресу "category/ggg" и нужно программно вывести страницу вида с некими параметрами по этому адресу?
Но чтобы адрес не изменился. Пробовал drupal_goto - но тогда адрес меняется

Гость
11.10.2013, 16:13

а как передать параметр для exposed filter?

Как вывести часть представления ?
Например header или footer ?

Роман
09.12.2013, 12:42

Может быть, попробовать с помощью view_get_view_result получить вьюшку в виде массива, а затем уже вывести с помощью функции render тот элемент массива, в котором хранится header или footer ?

Пробую внутри hook_preprocess_page
Стандартное представление "commerce_cart_block".
В "header" стандартное "Commerce Line Item: Сводка позиций".

$view = views_get_view_result('commerce_cart_block');
kpr($view);

Все 33 одинаковые:
http://awesomescreenshot.com/0b322eda33

Роман
09.12.2013, 14:21

Вот еще две мысли по поводу того, как это можно сделать.

1. Добавляете в это представление еще одно отображение (my_added_page), в котором редактируете tpl-файл таким образом, чтобы тот отображал только $header (или $footer).
Ну и вот так вот его вызываете
print views_embed_view('my_view', 'my_added_page');

2. Можно попробовать сделать так - загрузить в переменную html-представление данного views таким образом
$var = views_embed_view('my_view');
И далее этот код пропарсить и выделить таким образом заголовок или другую часть. Отдельные части views по умолчанию обрамляются соответствующими классами - нужно только посмотреть их названия.

О первом варианте еще вчера думал.
Второй попробую разобрать прямо сейчас.

Спасибо )

Гость
16.09.2014, 15:18

Спасибо. А можно ли отдельно вывести пейджер. Проблема в том что я програмно вывел дважды один блок (второй со смещением даты), а пейджер у каждого свой, а мне надо чтоб они синхронно листались. Подскажите пожалуйста как такое реализовать.

Евгений
01.09.2015, 10:45

а как к выводу views применить <?php if …: ?> <?php endif; ?>?

Как передать аргумент в контекстуальный фильтр? Такая конструкция не работает -
$view = views_get_view_result('catalog', 'page', $tid);
Возвращает 0 результатов при любых значениях $tid

Здравствуйте.
Вызываю программно views на котором есть VBO(Views Bulk Operations).

    $views = views_get_view($view_name);
    $views->set_display($display_name);
    $views->pre_execute();
    $views->execute();
    return $views->render($display_name);

Views отображается нормально все работает корректно, кроме VBO. Подскажите, пожалуйста, что я сделал не так?

Добавить комментарий