뷰 3은 선언 된 핸들러를 인식하지 못합니다. 왜 안돼?


12

modules / addressfield / addressfield.module에는 다음이 있습니다.

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

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

캐시를 지우면 디버거에서이 파일이 트리거되지 않습니다. 나는 이것을 이해하지 못한다.

핸들러는 위치 모듈에서 가져온 modules / addressfield / views / addressfield_views_handler_field_country.inc에 있습니다.

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

이 작업을 수행하는 방법에 대한 조언이 도움이 될 것입니다. 감사합니다.


일반적인 의견입니다. 뷰 자체의 현재 api 버전 자체는 '3.0-alpha1'이므로 3을 사용할 수 없습니다. 뷰 뷰 사본은 미래에 있기 때문에 공유해야합니다.)
Daniel Wehner

나는이 문제가 로그에 "알림 : 초기화되지 않은 문자열 오프셋 : views_get_handler ()에서 1"로 표시되어 누군가가 검색하면이 유용한 페이지를 찾을 수 있습니다.
Jeremy French

팁 : "drush vd"를 한 번 실행하십시오 ... 핸들러가 어떻게 든 누락 된 경우 디버그 메시지가 표시됩니다.
Daniel Wehner 2013

답변:


22

어떤 핵심 버전입니까? Drupal 7에서 hook_views_handlers ()가 사라졌습니다. 대신 파일을 .info 파일에 추가하십시오.

files[]=views/addressfield_views_handler_field_country.inc

실제로 Views 고급 도움말 페이지 ( "
Dupral

Drupal은 파일이 허용 목록에 없기 때문에 파일을로드하지 않는다는 워치 독 경고를 표시 할 수 있다고 생각합니다. 이것을 쫓는 데 걸린 시간 동안 Dries에 청구서를 보내야합니다.
존 프랭클린

.inc 파일 외에도 내 .info 파일에 MYMODULE.views.inc 파일도 포함시켜야했습니다. 그 이유는 무엇입니까? 포함하지 않으면 뷰 플러그인이 감지되지 않습니다.
Keven
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.