Обработчик пользовательских представлений без таблицы

Сначала это казалось легким, но я теряю волосы на этом.

Я просто хочу добавить настраиваемый обработчик вида, который не использует таблицу.

Я попытался сделать так, как предполагал php, $ data ['views'] ['mycustomfield'] в hook_views_data, но все же «mycustomfield colum not found».

Любая помощь? Спасибо!

20 голосов | спросил Gregory Kapustin 24 J000000Wednesday13 2013, 14:05:48

2 ответа


24

На самом деле его легко. Просто посмотрите на реализацию Views Global handlers, которая доступна в views.views.inc .

Ниже приведен пример того, как вы можете добавить обработчик полей без таблицы,

  1. Укажите свои пользовательские обработчики в hook_views_data , как показано ниже,

    /**
     * Implements hook_views_data().
     */
     function my_module_views_data() {
       $data['custom']['table']['group'] = t('Custom');
       $data['custom']['table']['join'] = array(
         // #global is a special flag which let's a table appear all the time.
         '#global' => array(),
       );
    
       $data['custom']['custom_handler'] = array(
         'title' => t('Custom Handler'),
         'help' => t('Custom Handler.'),
         'field' => array(
           'handler' => 'views_handler_custom_handler',
         ),
       );
    
       return $data;
    }
    
  2. Создайте файл inc для вашего обработчика, добавьте туда свою логику. что-то вроде ниже Здесь имя файла будет view_handler_custom_handler.inc

    /**
     * A handler to provide a field that is completely custom by the administrator.
     *
     * @ingroup views_field_handlers
     */
     class views_handler_custom_handler extends views_handler_field {
       function query() {
         // do nothing -- to override the parent query.
       }
    
       function option_definition() {
         $options = parent::option_definition();
    
         // Override the alter text option to always alter the text.
         $options['alter']['contains']['alter_text'] = array('default' => TRUE);
         return $options;
       }
    
       function options_form(&$form, &$form_state) {
         parent::options_form($form, $form_state);
    
         // Remove the checkbox
         unset($form['alter']['alter_text']);
         unset($form['alter']['text']['#dependency']);
         unset($form['alter']['text']['#process']);
       }
    
       function render($values) {
         // Render your content.
         return 'Sample';
       }
    }
    
  3. Укажите этот новый файл обработчика в информационном файле вашего модуля

  4. Очистить кеширование

Теперь новый полевой обработчик будет находиться в списке полей.

ответил Mathankumar 24 J000000Wednesday13 2013, 17:42:13
1

Чтобы быть полным: вам также нужно добавить hook_views_api

function my_module_views_api() {
  return array(
    'api' => 3,
    'path' => drupal_get_path('module', 'my_module'),
  );
}
ответил MuschPusch 30 J000000Wednesday14 2014, 15:05:21

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132