Отношения представлений с настраиваемой сущностью и узлом

У меня есть пользовательский объект только с базовой таблицей, и на него ссылается узел с его полем field_a. Теперь я хочу создать связь между этими двумя объектами (узлом и моим пользовательским объектом). Я могу заставить результат работать, но я не получаю поля узлов, перечисленные в разделе полей представлений.

// Базовая таблица для пользовательского объекта — «clinical_trial_research_sites»

function clinical_trial_views_data_alter(&$data) {
 $data['clinical_trial_research_sites']['node'] = array(
    'title' => t('Clinical Trial'),
    'help' => t('Field Reference Appear in Location Content type.'),
    // Information of the referenced table!!
    'relationship' => array(
      'handler' => 'views_handler_relationship',
      'label' => t('Location'),
      'base' => 'field_data_field_site_comp_code', // node field table name
      'base field' => 'field_site_comp_code_value', // field column name of node field
      'relationship field' => 'site_comp_code', // This is referencing field in my custom entity
    ),
  );
}

Я могу заставить работать sql, внутреннее соединение работает, но представления не отображают все поля узла, так как я хочу также отобразить некоторые поля из узлов! Я думаю, что мне не хватает некоторой информации, чтобы сообщить представлениям, что отношения - это не только таблица полей, но и узел в целом!


person prabeen giri    schedule 21.11.2014    source источник


Ответы (1)


Я исправил это, скопировав часть кода из entityreference. Я должен использовать другой обработчик представлений для этого отношения и добавить другие атрибуты к этому отношению.

function clinical_trial_views_data_alter(&$data) {

  $data['clinical_trial_research']['clinical_trial_research_sites'] = array(
    'title' => t('Clinical Trial Research Sites'),
    'help' => t('Field Reference Appear in Clinical Trial Research Sites.'),
    'relationship' => array(
      'handler' => 'views_handler_relationship',
      'label' => t('Clinical Trial Research Sites'),
      'base' => 'clinical_trial_research_sites',
      'base field' => 'study_num',
      'relationship field' => 'study_num',
    ),
  );
  // The reference field in the node entity is not entity reference , its just a basic text field
  $data['clinical_trial_research_sites']['site_comp_code']['relationship'] = array(
    'handler' => 'views_handler_relationship_entity_reverse',
    'field_name' => 'field_site_comp_code',
    'field table' => 'field_data_field_site_comp_code',
    'field field' => "field_site_comp_code_value",
    'base' => 'node',
    'base field' => 'nid',
    'title' => t('Referencing entity'),
    'help' => t('Field Reference Appear in Location Content type.'),
    'title' => t('Location'),
  );
}
person prabeen giri    schedule 21.11.2014
comment
В Drupal 8 попробуйте изменить «базу» с «node» на «node_field_data». См. пример кода в документации по API hook_views_data и hook_views_data_alter. - person jlstrecker; 30.10.2019