Процесс написания своего style плагина для Views 3:
1. Реализуем хук hook_views_api()
, в котором возвращаем версию Views API:
/**
* Implements hook_views_api().
*/
function views_style_example_views_api() {
return array('api' => 3);
}
2. В файле modulename.views.inc
реализуем хук hook_views_plugins()
, в котором возвращаем информацию о плагине:
/**
* Implementation of hook_views_plugins().
*/
function views_style_example_views_plugins() {
return array(
'module' => 'views_style_example',
'style' => array(
// Системное название стиля.
'example_style' => array(
// Человекопонятное название стиля.
'title' => t('Example style'),
// Имя класса. Классы именуются по шаблону [modulename]_plugin_style_[stylename].
'handler' => 'views_style_example_plugin_style_example_style',
// Путь к папке с файлом класса. Необязательно, если файл лежит в корне модуля.
'path' => drupal_get_path('module', 'views_style_example'),
// Имя хука темизации для вывода контента.
// Необязательно, если переопределён метод views_plugin_style::render().
'theme' => 'views_style_example',
// Список js файлов, которые необходимо подключить при выводе представления.
// Пути указываются относительно корня Drupal. Необязательно.
'js' => array(),
// Тип плагина.
'type' => 'normal',
// TRUE если для этого стиля можно выбирать row plugin (Content, Fields и т.д.).
'uses row plugin' => FALSE,
// TRUE если можно использовать поля.
'uses fields' => TRUE,
// TRUE если у стиля есть настройки.
'uses options' => TRUE,
// TRUE если строки можно группировать.
'uses grouping' => FALSE,
// TRUE если нужно рендерить представление, даже при отсутствии данных.
'even empty' => FALSE,
),
),
);
}
3. В файле с именем, указанным в параметре handler
и расширением .inc
, реализуем логику хэндлера:
class views_style_example_plugin_style_example_style extends views_plugin_style {
/**
* Дефолтные настройки.
*/
function option_definition() {
$options = parent::option_definition();
$options['example_option'] = array('default' => '');
return $options;
}
/**
* Форма настроек.
*/
function options_form(&$form, &$form_state) {
parent::options_form($form, $form_state);
$form['example_option'] = array(
'#title' => t('Example option'),
'#type' => 'textfield',
'#default_value' => $this->options['example_option'],
);
}
}
4. Добавляем в файл .info
информацию о новом хэндлере:
files[] = views_style_example_plugin_style_example_style.inc
5. Создаём файл шаблона с именем, указанным в параметр theme
и расширением .tpl.php
(нижние подчёркивания заменяются на тире), и выводим в нём данные задуманным способом:
<?php dsm($options['example_option'], 'example_option'); ?>
<?php dsm($rows, 'raw rows'); ?>
<?php dsm($view->style_plugin->render_fields($rows), 'rendered rows'); ?>
Исходники.
Пример плагина для вывода маркеров на карте Google.
Написанное актуально для
Views 3
Похожие записи
- Views сортировка по выражению/условию/формуле
- Необязательное значение одной из дат в раскрытом фильтре с оператором BETWEEN
- Как расширить функционал фильтр-плагина Views? (добавляем возможность фильтровать числовые поля по нескольким значениям)
- Экспорт представления Views в код
- Программно добавить шапку или подвал в представление
Комментарии
Очень полезная статья! Спасибо!
Скажите, как у вас отображены на главной страницы материалы, этим способом ?
нет
Спасибо!
Скажите как у вас на главной странице выведены node без views ?
стандартным способом - promote to frontpage
Хотелось вывести новости в левой части моего сайта в чистом виде, а не так как выводит в стандарте views, тут без снипета не обойтись верно ? было бы удобно иметь шаблон, в нем создать свою html разметку для этого вывода и вывести переменной этот шаблон, но я не видел решения этого способа, может подскажите что то ?
делаете запрос к базе, результат выводите любым способом
Здравствуйте! А можно ли в файле темизации как то вывести раскрытые фильтры представления ?
style-плагины не имеют никакого отношения к раскрытым фильтрам
Добрый день
Есть представление с сеткой.
Хотелось бы узнать, можно ли переопределить функцию template_preprocess_views_view_grid или правильнее будет создать свой style plugin ?
Спасибо
https://api.drupal.org/api/drupal/modules%21system%21system.api.php/fun…
Схожих примеров не нашел, но что-то похожее уже приходилось делать.
Это должно быть что-то вроде этого или совсем не то ?
Добрый день
Можете продемонстрировать пример, возможно у вас есть какие-то материалы на эту тему ?
Если это не очень трудно, можно было бы опубликовать решение.
А лучше всего отдельный материал, разом все стили views зацепит и для блога профит будет =)
Спасибо
по ссылке есть примеры
Изначально пробовал имя_модуля_preprocess_views_view_grid
Вместо представления получал 'Array' внутри первого td
Получается что до определенного момента функция отрабатывает.
Также видел эту тему http://xandeadx.ru/blog/drupal/414
А что касается вашего предложения зарегистрировать функцию,
пробовал так
Все равно 'Array' внутри первого td
Содержимое template_preprocess_views_view_grid() было скопировано из оригинала, без правок.
Возможно вы знаете в чем может быть проблема ?
Спасибо
Проблема была из-за отладочных функций.
Тем не менее спасибо за напоминание функции регистрации =)
Рано обрадовался )
Там снова 'Array'
Почему-то вместо отдельных $item , внутрь td попадает весь массив со всеми результатами.
Скопировано все с оригинальной функции.
Наверное такой вариант переопределения не был предусмотрен, чтобы не приходилось править шаблон.
Если вставить
в файл theme.inc внутри модуля views, тогда все работает как и задумывалось.
Классы присваиваются каждому товару.
А переопределить через отдельную функцию не получается.
Как программно добавить options в настройки views style?
Уточню программно в уже существующий style , то есть что то типа alter есть?
есть конечно хук https://api.drupal.org/api/views/views.api.php/function/hook_views_plug…
но лучше свой хэндлер написать)
Добавить комментарий