Создать представление (вид) программно для Views 2

26 Фев 2010
Опубликовано VladSavitsky
Задача: 

Нужно создать вид (представление) для Views программно, то есть в своем модуле.

Решение
Чтобы задать вид с помощью кода для Views 2 в Drupal 6 нужно:

  1. Создать вид, используя визуальный интерфейс Viws, как это обычно делается
  2. Сделать экспорт этого вида и получить код
  3. Заменить первую строку ($view = new view;) на $view = views_new_view();
  4. Далее можно показать, выполнить, вставить и всё, чего пожелаете (то есть $view->execute_display('default', array())

Ниже пример, который использует простой Вид, который показывает Заголовки всех опубликованных нод:

//создать новый вид
$view = views_new_view();
//описание вида (этот код был создан через экспорт)
$view->name = 'test_date_view';
$view->description = '';
$view->tag = '';
$view->view_php = '';
$view->base_table = 'node';
$view->is_cacheable = FALSE;
$view->api_version = 2;
$view->disabled = FALSE; /* Edit this to true to make a default view disabled initially */
$handler = $view->new_display('default', 'Defaults', 'default');
$handler->override_option('fields', array(
  'title' => array(
    'label' => 'Title',
    'alter' => array(
      'alter_text' => 0,
      'text' => '',
      'make_link' => 0,
      'path' => '',
      'alt' => '',
      'prefix' => '',
      'suffix' => '',
      'help' => '',
      'trim' => 0,
      'max_length' => '',
      'word_boundary' => 1,
      'ellipsis' => 1,
      'html' => 0,
    ),
    'link_to_node' => 1,
    'exclude' => 0,
    'id' => 'title',
    'table' => 'node',
    'field' => 'title',
    'relationship' => 'none',
  ),
));
$handler->override_option('filters', array(
  'status' => array(
    'operator' => '=',
    'value' => '1',
    'group' => '0',
    'exposed' => FALSE,
    'expose' => array(
      'operator' => FALSE,
      'label' => '',
    ),
    'id' => 'status',
    'table' => 'node',
    'field' => 'status',
    'relationship' => 'none',
  ),
  ),
));
$handler->override_option('access', array(
  'type' => 'none',
));
$handler->override_option('cache', array(
  'type' => 'none',
));
$handler->override_option('row_options', array(
  'inline' => array(),
  'separator' => '',
));
// теперь выводим вид
print $view->execute_display('default', array());

Как это использовать в своем модуле?

/*
 * Implementation of hook_views_api()
 */

function MODULE_NAME_views_api() {
  return array('api' => 2.0);
}

/*
 * Implementation of hook_views_default_views()
 */

function MODULE_NAME_views_default_views(){
  $view = new view;

  // Сюда нужно вставить экспорт вида
 
  $views[$view->name] = $view;
  return $views;
}

Использованные материалы: 
Авторы решений:
Темы:
Версия Drupal:
Модули:
 
 
 

RSS-лента новостей

Dries Buytaert по-русски
]]>Русский поиск Drupal]]>

Перенос сайта из Joomla в Drupal
Перенос сайта из WordPress в Drupal

]]> Drupal - это бесплатная система управления контентом с открытым исходным кодом ]]>