Widoki 3 nie rozpoznają zadeklarowanego modułu obsługi. Dlaczego nie?

12

W module / addressfield / addressfield.module mam:

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

i

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

W modułach / fieldfield / 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',
      ),
    ),
  );
}

Ten plik nie jest uruchamiany w debuggerze, gdy wyczyszczę pamięć podręczną. Nie rozumiem tego

Program obsługi znajduje się w module / adresie / widokach / adresie_widoku_obsługi_kresu_country.inc, który wziąłem z modułu lokalizacji:

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

Pomocna byłaby jakakolwiek rada, jak to zrobić. Dziękuję Ci.

Adam S.
źródło
Tylko ogólny komentarz. Obecna wersja widoków interfejsu API sama w sobie to „3.0-alpha1”, więc nie możesz używać 3. Powinieneś udostępnić swoją kopię widoków, ponieważ pochodzi ona z przyszłości;)
Daniel Wehner
Miałem ten problem, który pojawił się w logach jako „Uwaga: Przesunięcie niezainicjowanego łańcucha: 1 w views_get_handler ()” przykleja się tutaj, więc jeśli ktoś będzie go szukał, znajdzie tę pomocną stronę.
Jeremy French
Tylko wskazówka: uruchom raz „drush vd” ... pokaże ci to kilka komunikatów debugowania, jeśli w jakiś sposób brakuje obsługi.
Daniel Wehner

Odpowiedzi:

22

Która wersja podstawowa? W Drupal 7 zniknął hook_views_handlers (), zamiast tego dodaj swoje pliki do pliku .info.

files[]=views/addressfield_views_handler_field_country.inc
Berdir
źródło
Mówi tak na zaawansowanych stronach pomocy w
Widoku
Można by pomyśleć, że Drupal może wydać ostrzeżenie, że nie załaduje pliku, ponieważ nie znajduje się na białej liście. Powinienem zafakturować Dries za godziny, które spędziłem na ściganiu tego.
John Franklin
Oprócz pliku .inc musiałem również dołączyć mój plik MYMODULE.views.inc do mojego pliku .info. Jest jakiś powód, dla którego to może być? Jeśli go nie uwzględnię, wtyczka moich widoków nie zostanie wykryta.
Keven,