web-dev-qa-db-fra.com

Gestionnaire de vues personnalisées sans table

Cela semblait facile au début, mais je perds mes cheveux à ce sujet.

Je veux simplement ajouter un gestionnaire de vue personnalisé qui n'utilise aucune table.

J'ai essayé de faire comme les vues proposées par php, $ data ['views'] ['mycustomfield'] dans hook_views_data, mais quand même, "mycustomfield colum not found".

De l'aide ? Merci !

21
Gregory Kapustin

En fait, c'est facile. Regardez simplement les gestionnaires d'implémentation de Views Global qui sont disponibles dans views.views.inc .

Voici l'exemple de la façon dont vous pouvez ajouter un gestionnaire de champs sans avoir de table,

  1. Spécifiez vos gestionnaires personnalisés dans hook_views_data comme ci-dessous,

    /**
     * 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. Créez un fichier inc pour votre gestionnaire et mettez-y votre logique. quelque chose comme ci-dessous Ici, le nom du fichier serait views_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. Spécifiez ce nouveau fichier de gestionnaire dans le fichier d'informations de votre module

  4. Vider les caches

Maintenant, le nouveau gestionnaire de champs sera là dans la liste des champs.

26
Mathankumar

Pour être complet: vous devez également ajouter hook_views_api

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