Tampilan 3 tidak mengenali penangan yang dideklarasikan. Kenapa tidak?

12

Dalam modules / addressfield / addressfield.module saya punya:

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

dan

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

Dalam modul / 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',
      ),
    ),
  );
}

File ini tidak terpicu di debugger ketika saya menghapus cache. Saya tidak mengerti ini.

Pawang ada di modul / addressfield / views / addressfield_views_handler_field_country.inc yang saya ambil dari modul lokasi:

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

Setiap saran tentang cara membuat ini bekerja akan sangat membantu. Terima kasih.

Adam S
sumber
Hanya komentar umum. Versi api saat ini dari pandangan itu sendiri adalah '3.0-alpha1', jadi Anda tidak dapat menggunakan 3. Anda harus membagikan salinan pandangan Anda, karena itu dari masa depan;)
Daniel Wehner
Saya mengalami masalah ini yang ditunjukkan dalam log sebagai "Pemberitahuan: Offset string yang tidak diinisialisasi: 1 di views_get_handler ()" menempel di sini jadi jika seseorang mencari itu mereka akan menemukan halaman yang bermanfaat ini.
Jeremy French
Hanya sebuah tip: jalankan "drush vd" sekali ... ini akan menunjukkan kepada Anda beberapa pesan debug jika penangan hilang entah bagaimana.
Daniel Wehner

Jawaban:

22

Versi inti mana? Di Drupal 7, hook_views_handlers () hilang, tambahkan file Anda ke file .info sebagai gantinya.

files[]=views/addressfield_views_handler_field_country.inc
Berdir
sumber
Itu sebenarnya mengatakan demikian di halaman bantuan Tampilan lanjutan (halaman "Upgrade ke Drupal 7 (API)")
Bojan Zivanovic
Anda akan berpikir Drupal dapat memancarkan peringatan anjing penjaga bahwa itu tidak akan memuat file karena itu tidak masuk daftar putih. Saya harus menagih Dries untuk waktu yang saya habiskan untuk mengejar ini.
John Franklin
Selain file .inc saya juga harus memasukkan file MYMODULE.views.inc saya ke file .info saya. Apa alasannya? Jika saya tidak memasukkannya maka plugin pandangan saya tidak terdeteksi.
Keven