Передача аргументов из Panels2 в Views2

Главные вкладки

Аватар пользователя Dimm Dimm 24 сентября 2008 в 21:20

Нужно вывести в панели несколько views с разными аргументами.

При вставке views в панель есть несколько способов передать аргумент:
Send arguments
(Select this to send all arguments from the panel directly to the view. If checked, the panel arguments will come after any context arguments above and precede any additional arguments passed in through the Arguments field below.)
Arguments:
(Additional arguments to send to the view as if they were part of the URL in the form of arg1/arg2/arg3. You may use %0, %1, ..., %N to grab arguments from the URL. Or use 0, 1, 2, ..., N to use arguments passed into the panel.)
Override URL:
(If this is set, override the View URL; this can sometimes be useful to set to the panel URL)

Но ни один из них не работает.
Пришлось вставлять в панель "Custom PHP content" и выводить views программно:

$myview = views_get_view('taxonomy_type');
$arg[0]='story';//node_type
$arg[1]='1'; //term_id
$block->content= $myview->execute_display('page_1',$arg);

Скажите может всетаки возможно передать аргументы из Panel2 во Views2 стандартными средствами?

Комментарии

Аватар пользователя Dimm Dimm 2 октября 2008 в 22:12

Оказалось удобнее выводить через блок:
<?php
$args[0]=arg(1);
$args[1]=arg(2);
$myview = views_get_view('taxonomy_type');
$viewblock=$myview->execute_display('block_1',$args);
$block->content=$viewblock['content'];
?>

Аватар пользователя iVor iVor 27 января 2009 в 16:00

Столкнулся с аналогичной проблемой. Вид насторен нормально, а панели не передают в вид аргумент как константу, а только при захвате с url.

Опишите пожалуйста, что означают строки

taxonomy_type

block_1

content

Аватар пользователя Dimm Dimm 27 января 2009 в 22:58

Это просто программный вызов views.
taxonomy_type - имя views.
block_1, block_2, block_3, - идентификатор dislay views.
content - так надо: $block->content=$viewblock['content'];.

Аватар пользователя iVor iVor 28 января 2009 в 12:35

Спасибо! буду учиться Smile
************************************
часом позже...

А вот не получается ничего Sad

Название views: news_view
Два вида вывода: "по умолчанию" и "лента"
Тип аргумента: ID термина (вывожу все ноды связанные с термином). Нет аргумента или арг некорректен- показать все (для отладки), проверка по словарю, тип арга - id термина
Поля: заголовок и тизер
Фильтров, сортировки и отношений нету
Предпросмотр работает идеально.

Пишу свой блок "новости для страницы поиска"
Заголовок - "Новости"
Формат вывода - php
текст блока

<?php
$args[0]=1;
$myview = views_get_view('news_view');
$viewblock=$myview->execute_display('block_1',$args);
$block->content=$viewblock['content'];
print 'КВАКВА!!!';  //для проверки выводимости блока
?>

размещаю для проверки в правой колонке. После сохранения в правой колонке выводится заголовок "новости" и моё "кваква". Где собака зарыта?

Аватар пользователя Dimm Dimm 28 января 2009 в 16:58

Если вывод по умолчанию то
$viewblock=$myview->execute_display('default',$args);
или
$viewblock=$myview->execute_display('defaults',$args);
не помню

Аватар пользователя iVor iVor 29 января 2009 в 12:28

неа... все равно аргумент не принимается...

Пробовал сделать новый тип view - pane, в нем предусмотрена передача аргументов. Тоже не получилось...

максимум что удалось добиться - вывод символа <. К чему бы это?

Аватар пользователя iVor iVor 29 января 2009 в 13:38

после многочасовой пляски с бубном Ваш код у меня заработал...

Тип материала - новости. Привязан к словарю "Разделы".

Создал View под названием "news_view" с одним видом - По умолчанию.
Аргумент - ID термина, ограниченный словарем "разделы".
Поля - заголовок и анонс. Заголовок ссылкой на ноду новости. Впоследствие прикручу поле CCK imagefield слева, если получится
Фильтр - тип материала "новости" (в принципе необязателен, но на перспективу пусть будет)

Страница панелей стоит по адресу www.site.ru/<Раздел> (всего 4 раздела).
В нужномй панельке создал Custom PHP Content, в него вписал код

$myview = views_get_view('news_view');
$arg[0]='1'; //номер терма, соответствующий номеру раздела.
$block->content= $myview->execute_display('default',$arg);

После этого часа два игрался с параметрами view, кодом php, в конце вернул все на место, именно в тот вид,что описан выше, и все заработало.

Огромное спасибо за поддержку!

P.S. аргументы из панели в view передаются только через @. У меня пока получается работать только с 1 аргументрм - id терма по адресу taxonomy/term/% Что делать:
0) сделать view с аргументом - ID таксономии. Определить, по каким словарям проверять. Указать поля (Я юзал заголовок материала) и фильтры.
1) Создать panel page. определить в url панели символом % что из строки адреса считать аргументом
2) определить тип аргумнта в разделе context
3) в разделе содержания вставлять в блок нужный view, ставить галку "Send arguments" и в поле ввода без кавычек вписать "0"
4) сохраниться и сходить по адресу, на котором лежит страничка. Всё должно быть Smile

Аватар пользователя andypost@drupal.org andypost@drupal.org 2 февраля 2009 в 5:23

Есть более простая конструкция для выполнения views
<?php
print views_embed_view("taxonomy_term", "page", 123 );
?>
параметры такие: имя view, display, остальные - дополнительные параметры