hook_field_views_data () не найден в mymodule.views.inc

Я реализовал hook_field_views_data() в mymodule.views.inc, но крючок не поднят.

В mymodule.module у меня есть следующий код, чтобы определить, где находится mymodule.views.inc.

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

Ниже приведен код для views /mymodule.views.inc. И проблема в том, что если я попытаюсь сбросить поле $, например, похоже, что hook_field_views_data () не выбрано.

Я попытался изменить mymodule_field_views_data () на mymodule_views_data, и эта функция подхвачена. Я попробовал это, чтобы убедиться, что файл включен вообще.

/**
 * Implements hook_field_views_data().
 */
function mymodule_field_views_data($field) {
  $data = field_views_field_default_views_data($field);

  // Add a handler for localities.
  foreach ($field['storage']['details']['sql'] as $type => $tables) {
    foreach ($tables as $table_name => $columns) {
      if (!isset($columns['locality'])) {
        continue;
      }

      $column_real_name = $columns['locality'];
      if (!isset($data[$table_name][$column_real_name]['filter'])) {
        continue;
      }

      $data[$table_name][$column_real_name]['filter']['handler'] = 'mymodule_views_handler_filter_locality';
    }
  }

  return $data;
}

mymodule.info

name = mymodule
description = Bla bla
core = 7.x

files[] = views/mymodule_views_handler_filter_locality.inc
6 голосов | спросил Pontus Nilsson 27 PM000000120000003431 2013, 12:57:34

1 ответ


3

Это похоже на правильное поведение.

Если вы посмотрите на код ---- +: = 0 = + ---- :

field_views_data()

Вы можете видеть, что он вызывает только function field_views_data() { $data = array(); foreach (field_info_fields() as $field) { if ($field['storage']['type'] != 'field_sql_storage') { continue; } $module = $field['module']; $result = (array) module_invoke($module, 'field_views_data', $field); if (empty($result)) { $result = field_views_field_default_views_data($field); } drupal_alter('field_views_data', $result, $field, $module); if (is_array($result)) { $data = drupal_array_merge_deep($result, $data); } } return $data; } для модуля, который определяет это поле. Таким образом, в случае (что-то похожее) на адресное поле функция Views вызовет вызов hook_field_views_data().

Скорее всего, вы ищете addressfield_field_views_data(), который позволит вам изменять существующие определения.

Но если это не делает то, что вам нужно, вам может потребоваться фактически определить функцию hook_field_views_data_alter() самостоятельно от имени адресного поля ( если он еще не реализован где-то). Должно быть довольно быстрое испытание, чтобы узнать.

ответил Clive 27 PM00000010000001631 2013, 13:47:16

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132