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.


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

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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.