paragraphs.views.inc 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. <?php
  2. /**
  3. * @file
  4. * Views implementations for paragraphs.
  5. */
  6. /**
  7. * Implements hook_field_views_data().
  8. *
  9. * Views integration for paragraphs fields. Adds a relationship to the
  10. * default field data.
  11. *
  12. * @see field_views_field_default_views_data()
  13. */
  14. function paragraphs_field_views_data($field) {
  15. $data = field_views_field_default_views_data($field);
  16. foreach ($data as $table_name => $table_data) {
  17. foreach ($table_data as $field_name => $field_data) {
  18. // Only operate on the "field_api_field_name"_value column.
  19. if (strrpos($field_name, '_value') === (strlen($field_name) - strlen('_value'))) {
  20. $data[$table_name][$field_name]['relationship'] = array(
  21. 'handler' => 'paragraphs_handler_relationship',
  22. 'base' => 'paragraphs_item',
  23. 'base field' => 'item_id',
  24. 'label' => t('Paragraph item from !field_name', array('!field_name' => $field['field_name'])),
  25. 'field_name' => $field['field_name'],
  26. );
  27. }
  28. }
  29. }
  30. foreach ($field['bundles'] as $entity_type => $bundles) {
  31. $entity_info = entity_get_info($entity_type);
  32. $pseudo_field_name = $field['field_name'] . '_' . $entity_type;
  33. list($label, $all_labels) = field_views_field_label($field['field_name']);
  34. $entity = $entity_info['label'];
  35. if ($entity == t('Node')) {
  36. $entity = t('Content');
  37. }
  38. $data['paragraphs_item'][$pseudo_field_name]['relationship'] = array(
  39. 'title' => t('Entity with the @field (@field_name)', array('@entity' => $entity, '@field' => $label, '@field_name' => $field['field_name'])),
  40. 'help' => t('Relate each @entity using @field.', array('@entity' => $entity, '@field' => $label)),
  41. 'handler' => 'views_handler_relationship_entity_reverse',
  42. 'field_name' => $field['field_name'],
  43. 'field table' => _field_sql_storage_tablename($field),
  44. 'field field' => $field['field_name'] . '_value',
  45. 'base' => $entity_info['base table'],
  46. 'base field' => $entity_info['entity keys']['id'],
  47. 'label' => t('!field_name', array('!field_name' => $field['field_name'])),
  48. );
  49. }
  50. return $data;
  51. }