Створення плагіна "Display extender" для Views

06.06.2012
Автор:

Не всі знають, що модуль Views надає досить обширний API. На додаток до чималої системи хуків, функціонал views можна розширювати додаючи плагіни.

Існує 10 типів плагінів для views.

В даній статті буде розглянуто створення плагіна типу 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 (звідки і було взято натхнення).

Дякую за увагу.

Голосів: 1 Рейтинг: 5

Також по темі

1

В продовження двох попередніх статей (клікклік) про...

2

Інколи виникає необхідність для зручності вводу даних створити поле з автозапоненням (autocomplete field). Прикладами таких полів можуть бути віджети для cck-полів Node reference i User reference...

3

У сфері ІТ технологій розробникам важливо не тільки продемонструвати свої вміння та навички, а й вміти вдосконалювати їх. 

4

ССК-форматери - це частини коду, і вони дозволяють виводити поля так, як нам заманеться. Часто виникає ситуація, коли існуючих форматерів для виконання тієї...

5

Досить часто виникає необхідність реалізувати сайт із підтримкою мультимовності - можливості перекладу вмісту сайта на різні мови, де переклад на ту чи іншу мову здійснює модератор сайту. Проте...

Subscribe to our blog updates