Как программно ввести view в tpl-файл или в контент сайта

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

Аватар пользователя yustos.com yustos.com 12 сентября 2009 в 12:32

Итак, продолжаю выкладывать переводы того, что меня заинтересовало. Здесь приведен перевод статьи Автор: Aaron Hawkins
Источник: http://www.pixelclever.com/how-programmatically-insert-a-view-drupal-6.
В Drupal 6 модуль views был переписан полностью,и теперь сниппет для вставки в tpl-файл или в php выглядить следующим образом:


<?php
  $view_args 
= array();
  
$display_id 'page_1';
  
$view views_get_view('logo_slideshow');
       if (!empty(
$view)) {
        print 
$view->execute_display($display_id $view_args);
  }
?>

Первая проблема возникает в момент, когда вы для вывода используете id. Я нашел два способа определить id вывода (display). Первый – войти в view и экспортировать его. Затем посмотреть в строку кода, которая выглядит примерно так:

<?php
$handler 
$view-&gt;new_display('page''Page''page_1');
?>

Я сказал «выглядит примерно так», поскольку аргументы внутри метода new_display могут отличаться для вашего view, если вы имеете несколько типов показа или вы выводите только версию с блоком. Независимо от типа показа третьим аргументом в этом случае будет ‘page_1’.
Я вставил код для создания view, все работает, но пропал заголовок страницы! Что делать?
Да, это побочный эффект этой техники, но его можно обойти. Когда это впервые случилось со мной, я мучился примерно в течении часа, поскольку одновременно создал новый тип контента и установил новый модуль. Поэтому я был уверен, что это побочный эффект этих действий. Но после того, как я убедился в обратном, мне стало ясно, что вероятно это связано с вызовом drupal_set_title() из view. Для решения проблемы я при помощи нижеприведенного кода перезагрузил заголовок в самом tpl-файле:

<?php
execute_display
($display_id $view_args); 
drupal_set_title($node-&gt;title);
?>

Функция drupal_set_title() перегружает заголовок страницы.
Итак, вы это сделали. Теперь вы сможете включать views в любые ваши tpl-файлы. Счастья вам.
Как всегда, дубль перевода есть на моем сайте. На нем еще остался перевод статьи "Создание ленты пользователя при помощи Views2" (ARCHIVE: Create a user feed using Views 2 http://drupal.org/node/314097). При случае выложу.

Комментарии

Аватар пользователя Ромка Ромка 12 сентября 2009 в 15:58

Вообще-то все что вы описали делается одной строчкой кода, функцией:

<?php
views_embed_view
($name$display_id 'default'$arguments NULL).
?>

"yustos.com" wrote:
Первая проблема возникает в момент, когда вы для вывода используете id. Я нашел два способа определить id вывода (display). Первый – войти в view и экспортировать его. Затем посмотреть в строку кода, которая выглядит примерно так:

В чем проблема? Айдишники так и именуются page_X, block_X и т.п. Все это есть в официальной доке к Вьюс.

Аватар пользователя yustos.com yustos.com 12 сентября 2009 в 17:04

"Ромка" wrote:
В чем проблема? Айдишники так и именуются page_X, block_X и т.п. Все это есть в официальной доке к Вьюс.

Так в статье.

Аватар пользователя glu2006 glu2006 12 сентября 2009 в 18:13

именно так как описал Роман, а в 5-ке это делается функцией

<?php
theme_view
($view_name$limit NULL$use_pager NULL$type 'embed'$view_args = array());
или
theme
('view'$view_name$limit NULL$use_pager NULL$type 'embed'$view_args = array());
?>

Не все что постят пацаны с нерусскими фамилиями есть истина :).