Создание плагина "Display extender" для Views

06.06.2012
Share on FacebookShare on TwitterShare on GooglePlusShare on Linkedin
Автор:

Не все знают, что модуль Views предоставляет довольно мощный API. В добавок к обширной системе хуков, функционал views можно расширять за счет дополнительных плагинов. Их, плагинов для views, существует 10 типов. В данной статье будет рассмотрено создание плагина типа Display extender, который позволяет добавлять собственные настройки для дисплеев. При разработке сайтов такую настройку потом можно применить в любом месте, где вызывается дисплей.

Для реализации плагина создаем модуль и объявляем в нем hook_views_api():

php
/** 
 * Implements hook_views_api(). 
 */ 
function extender_example_views_api() { 
  return array( 
    'api' => 3, 
  ); 
} 

Далее, согласно мануалу, нам нужно вызвать hook_views_plugins() в файле extender_example.views.inc:

php
/** 
 * Implements hook_views_plugins(). 
 */ 
function extender_example_views_plugins() { 
  $path = drupal_get_path('module', 'extender_example');
  $plugins = array(); 
  $plugins['display_extender']['extender_example'] = array( 
    'title' => t('Extender example textarea'), 
    'help' => t('Add textarea.'), 
    'path' => $path, 
    'handler' => 'extender_example_plugin_display_extender_code',
  ); 
  return $plugins; 
} 

Ну и, собственно, сам класс плагина, который расширяет класс views_plugin_display_extender:

php
/** 
 * The plugin that added additional setting to views edit form.
 * 
 * @ingroup views_display_plugins 
 */ 
class extender_example_plugin_display_extender_code extends views_plugin_display_extender {
  /** 
   * Provide a form to edit options for this plugin. 
   */ 
  function option_definition(&$options) { 
    $options['extender_example'] = array('default' => '');
  } 

  /** 
   * Provide the form to set new option. 
   */ 
  function options_form(&$form, &$form_state) { 
    switch ($form_state['section']) { 
      case 'extender_example': 
        $form['#title'] .= t('Example setting'); 
        $form['extender_example'] = array( 
          '#type' => 'textarea', 
          '#description' => t('Custom text which will display whenever you want'),
          '#default_value' => $this->display->get_option('extender_example'), 
        ); 
        break; 
    } 
  } 
   
  /** 
   * Inserts the code into the view display. 
   */ 
  function options_submit(&$form, &$form_state) { 
    $new_option  = $form_state['values']['extender_example']; 
    switch ($form_state['section']) { 
      case 'extender_example': 
        $this->display->set_option('extender_example', $new_option); 
        $empty = trim($new_option); 
        $empty = empty($empty); 
        break; 
    } 
  } 

  /** 
   * Summarizes new option. 
   * 
   * Lists the fields as either 'Yes' if there is text or 'None' otherwise and
   * categorizes the fields under the 'Other' category. 
   */ 
  function options_summary(&$categories, &$options) { 
    $new_option = check_plain(trim($this->display->get_option('extender_example'))); 
    if ($new_option) { 
      $new_option = t('Yes'); 
    } 
    else { 
      $new_option = t('None'); 
    } 
    $options['extender_example'] = array( 
      'category' => 'other', 
      'title'    => t('Extender example'), 
      'value'    => $new_option, 
      'desc'     => t('Add some option.'), 
    ); 
  } 
} 

Вот, пожалуй, и всё, что нам требуется для написания простого плагина для views. Новую настройку можно извлечь из объекта вьюшки: 

$view->display['page']->display_options['extender_example']

в любом месте, где он доступен (препроцесс, хуки). 

Более детально имплементация подобного плагина описана в модуле Code per Views Display (из этого источника и черпалось вдохновение автором).

Спасибо за внимание.

extender_example.tar_.gz
1 vote, Rating: 5
Share on FacebookShare on TwitterShare on GooglePlusShare on Linkedin

Также по теме

1

В продолжение двух предыдущих статьей (тыцьтыць) о профайлерах и, в...

2

Иногда возникает необходимость для удобства ввода данных создавать поля с автозаполнением (autocomplete field). Примерами таких полей могут быть виджеты для cck-полей Node reference и User...

3

CCK-форматтеры - это куски кода, позволяющие выводить поля так, как мы пожелаем. Часто возникает ситуация, когда существующих форматтеров для...

4

В унисон с новыми веяниями моды, попапы оказались не на шутку популярны среди заказчиков, при этом у последних сформировалось устойчивое убеждение, что мол сайт, в идеале, должен быть в попапе.

5

В предыдущем посте я приводил пример использования Ctools modal API с помощью одной формы. В этом же я рассмотрю использование еще одного мощного инструмента,...

Need a quote? Let's discuss the project

Are you looking for someone to help you with your Drupal Web Development needs? Let’s get in touch and discuss the requirements of your project. We would love to hear from you.

Join the people who have already subscribed!

Want to be aware of important and interesting things happening? We will inform you about new blog posts on Drupal development, design, QA testing and more, as well news about Drupal events.

No charge. Unsubscribe anytime