xandeadx.ru Блог музицирующего веб-девелопера

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

Опубликовано в

Получить 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 2.x, Views 3.x
Похожие записи

Комментарии RSS

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

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');

спс, помогло.

На счет views_get_view_result() - спасибо, не знал, мне это как раз пригодится.

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

http://xandeadx.ru/blog/drupal/178#comment-6381
неа, был неправ. автосабмит выведется.
а со слайдшоу, там видимо отдельне проблемы.

А у меня почему-то 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 - но тогда адрес меняется

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

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

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

Нужно сделать это в page.tpl.php

Пробую внутри 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

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

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 по умолчанию обрамляются соответствующими классами - нужно только посмотреть их названия.

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

Спасибо )

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

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

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

Оставить комментарий

Содержимое этого поля является приватным и не будет отображаться публично. Если у вас есть аккаунт в Gravatar, привязанный к этому e-mail адресу, то он будет использован для отображения аватара.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступные HTML теги: <a> <i> <b> <strong> <code> <ul> <ol> <li> <blockquote> <em> <s>
  • Строки и параграфы переносятся автоматически.
  • Подсветка кода осуществляется с помощью тегов: <code>, <css>, <html>, <ini>, <javascript>, <sql>, <php>. Поддерживаемые стили выделения кода: <foo>, [foo].

Подробнее о форматировании