Views 3 ne reconnaît pas un gestionnaire déclaré. Pourquoi pas?

12

Dans les modules / addressfield / addressfield.module j'ai:

/**
 * Implements hook_views_api().
 */
function addressfield_views_api() {
  return array(
    'api' => 3,
    'path' => drupal_get_path('module', 'addressfield') . '/views',
  );
}

et

/**
*  Implements hook_field_views_data_alter
* 
* @param mixed $result
* @param mixed $field
*/
function addressfield_field_views_data_alter (&$result, $field) {
  if (array_key_exists('field_data_field_address', $result)) {
    $result['field_data_field_address']['field_address_country'] += array(
      'title' => t('Country'),
      'help' => t('The Country name of the field'),
      'field' => array(
        'handler' => 'addressfield_views_handler_field_country',
        'click sortable' => TRUE,
      ),
    );
  }
}

Dans les modules / addressfield / views / addressfield.views.inc:

/**
 * Implementation of hook_views_handlers().
 */
function addressfield_views_handlers() {
  return array(
    'info' => array(
      'path' => drupal_get_path('module', 'addressfield') . '/views',
    ),
    'handlers' => array(
      'addressfield_views_handler_field_country' => array(
        'parent' => 'views_handler_field',
      ),
    ),
  );
}

Ce fichier n'est pas déclenché dans le débogueur lorsque j'efface le cache. Je ne comprends pas ça.

Le gestionnaire se trouve dans les modules / addressfield / views / addressfield_views_handler_field_country.inc que j'ai pris dans le module d'emplacement:

/**
 * @file
 * Country field handler.
 */

class addressfield_views_handler_field_country extends views_handler_field {

  function option_definition() {
    $options = parent::option_definition();
    $options['style'] = array('default' => 'name');
    return $options;
  }

  function options_form(&$form, &$form_state) {
    parent::options_form($form, $form_state);
    $form['style'] = array(
      '#title' => t('Display style'),
      '#type' => 'select',
      '#options' => array('name' => t('Country name'), 'code' => t('Country code')),
      '#default_value' => $this->options['style'],
    );
  }

  function render($values) {
      return check_plain(strtoupper($values->{$this->field_alias}));
  }
}

Tout conseil sur la façon de faire fonctionner cela serait utile. Je vous remercie.

Adam S
la source
Juste un commentaire général. La version api actuelle des vues elle-même est '3.0-alpha1', vous ne pouvez donc pas en utiliser 3. Vous devez partager votre copie des vues, car elle vient du futur;)
Daniel Wehner
J'ai eu ce problème qu'il montrait dans les journaux comme "Remarque: décalage de chaîne non initialisé: 1 dans views_get_handler ()" qui reste ici, donc si quelqu'un le recherche, il trouvera cette page utile.
Jeremy French
Juste un conseil: exécutez "drush vd" une fois ... cela vous montrera quelques messages de débogage si les gestionnaires manquent d'une manière ou d'une autre.
Daniel Wehner

Réponses:

22

Quelle version principale? Dans Drupal 7, hook_views_handlers () a disparu, ajoutez plutôt vos fichiers à votre fichier .info.

files[]=views/addressfield_views_handler_field_country.inc
Berdir
la source
Il le dit en fait dans les pages d'aide avancées de Views (page "Mise à niveau vers Drupal 7 (API)")
Bojan Zivanovic
On pourrait penser que Drupal pourrait émettre un avertissement de surveillance indiquant qu'il ne chargera pas le fichier car il n'est pas sur liste blanche. Je devrais facturer Dries pour les heures que j'ai passées à traquer ça.
John Franklin
En plus du fichier .inc, j'ai également dû inclure mon fichier MYMODULE.views.inc dans mon fichier .info. Une raison pour laquelle cela pourrait être? Si je ne l'inclus pas, mon plugin de vues n'est pas détecté.
Keven