Visualizações 3 não reconhece um manipulador declarado. Por que não?

12

Nos módulos / addressfield / addressfield.module, tenho:

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

e

/**
*  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,
      ),
    );
  }
}

Nos módulos / 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',
      ),
    ),
  );
}

Este arquivo não é acionado no depurador quando limpo o cache. Eu não entendo isso.

O manipulador está em modules / addressfield / views / addressfield_views_handler_field_country.inc, que tirei do módulo de localização:

/**
 * @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}));
  }
}

Qualquer conselho sobre como fazer isso funcionar seria útil. Obrigado.

Adam S
fonte
Apenas um comentário geral. A versão da API atual da própria vista é '3.0-alpha1', então você não pode usar 3. Você deve compartilhar sua cópia de pontos de vista, porque é do futuro;)
Daniel Wehner
Eu tive esse problema que ele apareceu nos logs como "Aviso: deslocamento de string não inicializado: 1 em views_get_handler ()" permanecendo aqui, portanto, se alguém procurar por isso, encontrará esta página útil.
Jeremy French
Apenas uma dica: execute "drush vd" uma vez ... isso mostrará algumas mensagens de depuração se os manipuladores estiverem ausentes de alguma forma.
Daniel Wehner

Respostas:

22

Qual versão principal? No Drupal 7, hook_views_handlers () se foi, adicione seus arquivos ao seu arquivo .info.

files[]=views/addressfield_views_handler_field_country.inc
Berdir
fonte
Ele realmente diz isso nas vistas avançadas páginas de ajuda ( "Atualizando para o Drupal 7 (API)" página)
Bojan Zivanovic
Você pensaria que o Drupal poderia emitir um watchdog alertando que ele não carregará o arquivo porque não está na lista de permissões. Eu deveria faturar o Dries pelas horas que passei perseguindo isso.
John Franklin
Além do arquivo .inc, também tive que incluir meu arquivo MYMODULE.views.inc no meu arquivo .info. Alguma razão para que isso possa ser? Se eu não incluí-lo, meu plug-in de visualizações não será detectado.
Keven