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

当我清除缓存时,不会在调试器中触发此文件。我不明白

该处理程序位于我从位置模块获取的模块/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”,因此如果有人进行搜索,他们将找到此有用的页面。
杰里米·法兰西

提示:一次执行“ drush vd” ...如果处理程序因某种原因丢失,这将向您显示一些调试消息。
Daniel Wehner 2014年

Answers:


22

哪个核心版本?在Drupal 7中,hook_views_handlers()消失了,而是将文件添加到.info文件中。

files[]=views/addressfield_views_handler_field_country.inc

它实际上是在Views高级帮助页面(“升级到Drupal 7(API)”页面)中说的
Bojan Zivanovic

您可能会认为Drupal可能发出看门狗警告,因为它没有被列入白名单,因此不会加载该文件。我应该为Dries开具发票,以支付我花费的所有时间。
约翰·富兰克林

除了.inc文件之外,我还必须在.info文件中包含MYMODULE.views.inc文件。有什么原因吗?如果我不包含它,则不会检测到我的视图插件。
凯文
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.