Задача:
Нужно создать вид (представление) для Views программно, то есть в своем модуле.
Решение
Чтобы задать вид с помощью кода для Views 2 в Drupal 6 нужно:
- Создать вид, используя визуальный интерфейс Viws, как это обычно делается
- Сделать экспорт этого вида и получить код
- Заменить первую строку ($view = new view;) на $view = views_new_view();
- Далее можно показать, выполнить, вставить и всё, чего пожелаете (то есть $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());
$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;
}
* 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;
}
Использованные материалы:
Bookmark/Search this post with











