Вставка видов (представлений, англ. Views) в документы (ноды, англ. nodes)

Изображение пользователя andyceo.

Если вы используете модуль Views, и, возможно, хотели бы вставлять содержимое из вида в обычный документ (ноду), есть пара модулей, которые могут Вам помочь:

  • Модуль Insert View действует как фильтр, который может быть включен для различных форматов ввода.
  • Модуль Viewfield добавляет CCK-поле для документов (нод), а также позволяет вам выбрать нужный вид для отображения.

Более "продвинутый" вариант заключается в том, чтобы вставлять вид вручную, используя PHP. Это может быть сделано прямо на странице редактирования документа (если вы используете метод ввода со включенным фильтром PHP), или через PHPTemplate в файлах .tpl.php вашей темы.

Во-первых, мы должны использовать функцию views_get_view($view_name) для создания объекта Views, затем мы используем функцию views_build_view($type, &$view, $args = array(), $use_pager = false, $limit = 0, $page = 0), чтобы отобразить вид. Примечание: обе эти функции предоставляются модулем Views (файл views.module), смотрите этот файл для дополнительной документации по использованию.

В принципе, все, что требует функция views_build_view, это тип вида (мы будем использовать тип 'embed') и объекта вида. Дополнительные необязательные переменные включают: массив аргументов вида, флаг просмотра результатов на нескольких страницах или на одной, сколько результатов показывать на странице (или сколько результатов показывать на каждой странице), и с которой страницы начать вывод.

Как простой пример, я могу изменить документ и вставить вид в него с помощью следующего кода:

<?php
//load the view by name
$view = views_get_view('sample_view');
//output the view
print views_build_view('embed', $view);
?>

Как более сложный пример, давайте предположим, что я хочу вставить вид во все документы определённого типа, но так, чтобы иметь разные результаты работы вида, основываясь на заголовке документа. Один из способов это сделать заключается в том, чтобы поставить следующий код в Вашем node-type.tpl.php файле:

<?php
//load the view by name
$view = views_get_view('faq_topics');
//output the top three items in the view with the node title as an argument
print views_build_view('embed', $view, array($title), false, 3);
?>

Вы также можете создать вид различными способами:

  • page: предоставляет вывод вида как страницы, выведенной через Вашу тему оформления сайта. Единственная реальная разница между выводом страницы и выводом блока (смотри ниже) заключается в том, что страница использует функцию drupal_set_title для изменения названия страницы.
  • block: предоставляет вывод вида как блока, выведенного через Вашу тему оформления сайта.
  • embed: используйте этот тип вывода, если хотите вставить вид на другой странице и не хотите, чтобы он оформлялся как блок или страница.
  • result: возвращает массив $info. Массив содержит:
    • query: запрос, который будет выполнен.
    • countquery: запрос с ограничением количества выводимых материалов, который будет выполнен, если требуется просмотр по страницам.
    • summary: TRUE, если аргументы не были предоставлены и потому был подготовлен вид по умолчанию.
    • level: какого уровеня является отсутствующий аргумент.
    • result: объект базы данных, который Вы потом сможете использовать в функции db_fetch_object.
  • items: возвращает массив, такой же как указано выше, за исключением того, что для result возвращается массив объектов, содержащий результаты запроса.
  • queries: возвращает массив, содержащий запросы, но не запускает их.

Комментарии англоязычных авторов к статье

сравнение 3-х методов (комментарий от 4 марта 2007 - 21:46, автор JohnG)

Два модуля обеспечивают несколько различные методы для администратора, разрешая пользователю с правом редактирования материалов, выбирать любой вид с целью включения его в документ, как части содержания.

  1. Модуль Insert View предоставляет определённый тег, который может быть использован в теле любого документа любого типа. (Я всего лишь предполагаю - пожалуйста, поправьте меня, если это неточная информация)
  2. Модуль View Field требует CCK и добавляет поле, которое администраторы могут включить в любой тип документов. Он проявляется на странице редактирования документа как выпадающий список выбора имеющихся видов, и добавляет выбранный вид в тело документа. (Аналогичный эффект - но с более лёгким интерфейсом - с использованием php-кода в поле "ввод PHP" для добавления вида),
  3. PHPtemplate-метод удобен, если администраторы не хотят, чтобы редакторы документов имели возможность изменить отображаемый вид. Когда код вставляется непосредственно в файл node_$type.tpl.php, node.tpl.php, или template.php, вид становится определенным для данного типа материалов, и становится частью структуры этого типа материалов. Вид не может быть изменён пользователем, независимо от того, какие права ему были выданы. Примером этого будет главная страница модулей для drupal (например, http://drupal.org/project/viewfield). Представьте себе, это тип материалов 'project' и таблица есть вид из материалов типа 'issue', связанных с этим проектом

еще один метод (комментарий от 16 января 2008 - 21:34, автор Matt V.)

В блоге "Завтрашние Инновации" был недавно пост по поводу еще одного метода, с использованием функции theme().

Встроенный вид в Drupal 6 (комментарий от 26 июня 2008 - 12:55, автор seaji)

http://drupal.org/node/246742

Источник: Inserting Views

Добавьте страницу в закладки. Перейти к верху страницы
Синдикация материалов