Views 3 erkennt einen deklarierten Handler nicht. Warum nicht?

12

In modules / addressfield / addressfield.module habe ich:

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

und

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

In 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',
      ),
    ),
  );
}

Diese Datei wird im Debugger nicht ausgelöst, wenn ich den Cache lösche. Ich verstehe das nicht.

Der Handler befindet sich in modules / addressfield / views / addressfield_views_handler_field_country.inc, das ich aus dem Standortmodul entnommen habe:

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

Jeder Rat, wie dies funktioniert, wäre hilfreich. Vielen Dank.

Adam S
quelle
Nur ein allgemeiner Kommentar. Die aktuelle API-Version von Ansichten selbst ist '3.0-alpha1', daher können Sie nicht 3 verwenden. Sie sollten Ihre Kopie von Ansichten freigeben, da sie aus der Zukunft stammen.)
Daniel Wehner
Ich hatte dieses Problem, das in den Protokollen als "Hinweis: Nicht initialisierter Zeichenfolgen-Offset: 1 in views_get_handler ()" angezeigt wurde. Wenn also jemand danach sucht, findet er diese hilfreiche Seite.
Jeremy French
Nur ein Tipp: führe "drush vd" einmal aus ... dies zeigt dir einige Debug-Meldungen, wenn Handler irgendwie fehlen.
Daniel Wehner

Antworten:

22

Welche Kernversion? In Drupal 7 ist hook_views_handlers () weg. Fügen Sie stattdessen Ihre Dateien zu Ihrer .info-Datei hinzu.

files[]=views/addressfield_views_handler_field_country.inc
Berdir
quelle
Dies steht
Man könnte meinen, Drupal könnte eine Watchdog-Warnung ausgeben, dass die Datei nicht geladen wird, da sie nicht auf der Whitelist steht. Ich sollte Dries die Stunden in Rechnung stellen, die ich damit verbracht habe, sie zu verfolgen.
John Franklin
Zusätzlich zur .inc-Datei musste ich auch meine MYMODULE.views.inc-Datei in meine .info-Datei aufnehmen. Gibt es einen Grund, warum das so sein könnte? Wenn ich es nicht einbinde, wird mein Views-Plugin nicht erkannt.
Keven,