Спеціальний обробник подань без таблиці


22

Спочатку це здавалося легким, але я втрачаю волосся на цьому.

Я просто хочу додати спеціальний обробник подання даних, який не використовує таблицю.

Я намагався зробити так, як запропоновано перегляди php, $ data ['views'] ['mycustomfield'] у kuk_views_data, але все одно, «mycustomfield colum not found».

Будь-яка допомога? Спасибі !

Відповіді:


26

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

Нижче наводиться приклад того, як можна додати обробник поля, не маючи таблиці,

  1. Вкажіть свої власні обробники в файлах kuk_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. Очистити кеші

Тепер новий обробник поля буде там у списку полів.


1
Дякую ! Саме два необхідні мені речі: замініть запит, вказавши його порожнім, і приєднайтеся до "#global".
Григорій Капустін

Чи є спосіб відфільтрувати ці результати? Наприклад, я створив спеціальний обробник полів для обчислення спеціального "статусу" на основі відносин користувача до сутності. Я хотів би мати можливість фільтрувати через цей статус. Будь-які ідеї?
tigertrussell

Спасибі, це те, що мені було потрібно! Але здається, що я не можу включити перегляди відносин для обробника поля, як це. drupal.stackexchange.com/questions/166734/… Будь-яка ідея?
donquixote

1

Для завершення: вам також потрібно буде додати гачок_види_апі

function my_module_views_api() {
  return array(
    'api' => 3,
    'path' => drupal_get_path('module', 'my_module'),
  );
}

1
Щоб завершити: Ви повинні включити обробник до файлів файлів .info [] = views_handler_custom_handler.inc
Fawwad
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.