Lượt xem 3 không nhận ra trình xử lý được khai báo. Tại sao không?


12

Trong các mô-đun / addressfield / addressfield.module tôi có:

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

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

Trong các mô-đun / addressfield / lượt xem / addressfield.view.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',
      ),
    ),
  );
}

Tệp này không được kích hoạt trong trình gỡ lỗi khi tôi xóa bộ đệm. Tôi không hiểu điều này.

Trình xử lý nằm trong các mô-đun / addressfield / view / addressfield_view_handler_field_country.inc mà tôi đã lấy từ mô-đun vị trí:

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

Bất kỳ lời khuyên về làm thế nào để làm việc này sẽ hữu ích. Cảm ơn bạn.


Chỉ là một nhận xét chung. Bản thân phiên bản api hiện tại của chế độ xem là '3.0-alpha1', vì vậy bạn không thể sử dụng 3. Bạn nên chia sẻ bản sao lượt xem của mình, vì đó là từ tương lai;)
Daniel Wehner

Tôi đã gặp vấn đề này, nó hiển thị trong nhật ký là "Lưu ý: offset chuỗi chưa được khởi tạo: 1 trong lượt xem_get_handler ()" ở đây vì vậy nếu ai đó tìm kiếm thì họ sẽ tìm thấy trang hữu ích này.
Jeremy Pháp

Chỉ là một mẹo: thực hiện "drush vd" một lần ... điều này sẽ hiển thị cho bạn một số thông báo gỡ lỗi nếu trình xử lý bị thiếu bằng cách nào đó.
Daniel Wehner

Câu trả lời:


22

Phiên bản cốt lõi nào? Trong Drupal 7, hook_view_handlers () đã biến mất, thay vào đó hãy thêm các tệp của bạn vào tệp .info của bạn.

files[]=views/addressfield_views_handler_field_country.inc

Nó thực sự nói như vậy trong các trang trợ giúp nâng cao của Lượt xem (trang "Nâng cấp lên Drupal 7 (API)")
Bojan Zivanovic

Bạn sẽ nghĩ rằng Drupal có thể phát ra cảnh báo của cơ quan giám sát rằng nó sẽ không tải tệp vì nó không nằm trong danh sách trắng. Tôi nên lập hóa đơn Dries trong những giờ tôi đã bỏ ra để theo đuổi điều này.
John Franklin

Ngoài tệp .inc tôi cũng phải đưa tệp MYMODULE.view.inc của mình vào tệp .info của mình. Bất kỳ lý do tại sao đó có thể là? Nếu tôi không bao gồm nó thì plugin lượt xem của tôi sẽ không được phát hiện.
Keven
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.