Views 3 no reconoce un controlador declarado. Por qué no?

12

En modules / addressfield / addressfield.module tengo:

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

y

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

En 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 archivo no se activa en el depurador cuando borro el caché. No entiendo esto

El controlador está en modules / addressfield / views / addressfield_views_handler_field_country.inc que tomé del módulo de ubicación:

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

Cualquier consejo sobre cómo hacer que esto funcione sería útil. Gracias.

Adam S
fuente
Solo un comentario general. La versión api actual de las vistas en sí es '3.0-alpha1', por lo que no puede usar 3. Debería compartir su copia de las vistas, porque es del futuro;)
Daniel Wehner
Tuve este problema que se mostró en los registros como "Aviso: desplazamiento de cadena no inicializado: 1 en views_get_handler ()" pegado aquí, por lo que si alguien busca eso, encontrarán esta página útil.
Jeremy French
Solo un consejo: ejecute "drush vd" una vez ... esto le mostrará algunos mensajes de depuración si faltan controladores de alguna manera.
Daniel Wehner

Respuestas:

22

¿Qué versión principal? En Drupal 7, hook_views_handlers () desapareció, agregue sus archivos a su archivo .info.

files[]=views/addressfield_views_handler_field_country.inc
Berdir
fuente
En realidad lo dice en las páginas de ayuda avanzada de Vistas (página "Actualización a Drupal 7 (API)")
Bojan Zivanovic
Se podría pensar que Drupal podría emitir una advertencia de vigilancia de que no cargará el archivo porque no está en la lista blanca. Debería facturar a Dries por las horas que he pasado persiguiendo esto.
John Franklin
Además del archivo .inc, también tuve que incluir mi archivo MYMODULE.views.inc en mi archivo .info. ¿Alguna razón por la que podría ser? Si no lo incluyo, no se detectará mi complemento de vistas.
Keven