paragraphs.field_formatter.inc 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. <?php
  2. /**
  3. * @file
  4. * Holds relevant functions for paragraph field formatters.
  5. */
  6. /**
  7. * Implements hook_field_formatter_info().
  8. */
  9. function paragraphs_field_formatter_info() {
  10. return array(
  11. 'paragraphs_view' => array(
  12. 'label' => t('Paragraphs items'),
  13. 'field types' => array('paragraphs'),
  14. 'settings' => array(
  15. 'view_mode' => 'full',
  16. ),
  17. ),
  18. );
  19. }
  20. /**
  21. * Implements hook_field_formatter_settings_form().
  22. */
  23. function paragraphs_field_formatter_settings_form($field, $instance, $view_mode, $form, &$form_state) {
  24. $display = $instance['display'][$view_mode];
  25. $settings = $display['settings'];
  26. $elements = array();
  27. if ($display['type'] == 'paragraphs_view') {
  28. $entity_type = entity_get_info('paragraphs_item');
  29. $options = array();
  30. foreach ($entity_type['view modes'] as $mode => $info) {
  31. $options[$mode] = $info['label'];
  32. }
  33. $elements['view_mode'] = array(
  34. '#type' => 'select',
  35. '#title' => t('View mode'),
  36. '#options' => $options,
  37. '#default_value' => $settings['view_mode'],
  38. '#description' => t('Select the view mode'),
  39. );
  40. }
  41. return $elements;
  42. }
  43. /**
  44. * Implements hook_field_formatter_settings_summary().
  45. */
  46. function paragraphs_field_formatter_settings_summary($field, $instance, $view_mode) {
  47. $display = $instance['display'][$view_mode];
  48. $settings = $display['settings'];
  49. $output = array();
  50. if ($display['type'] == 'paragraphs_view') {
  51. $entity_type = entity_get_info('paragraphs_item');
  52. if (!empty($entity_type['view modes'][$settings['view_mode']]['label'])) {
  53. $output[] = t('View mode: @mode', array('@mode' => $entity_type['view modes'][$settings['view_mode']]['label']));
  54. }
  55. else {
  56. $output[] = ' ';
  57. }
  58. }
  59. return implode('<br>', $output);
  60. }
  61. /**
  62. * Implements hook_field_formatter_view().
  63. */
  64. function paragraphs_field_formatter_view($entity_type, $entity, $field, $instance, $langcode, $items, $display) {
  65. $element = array();
  66. $settings = $display['settings'];
  67. switch ($display['type']) {
  68. case 'paragraphs_view':
  69. // Prevent displaying useless markup if we don't have any values.
  70. if (empty($items)) {
  71. return $element;
  72. }
  73. // Get view mode from entity.
  74. $display_view_mode = empty($display['settings']['view_mode']) ? 'full' : $display['settings']['view_mode'];
  75. // Get view mode from field instance (if configured).
  76. $view_mode = empty($instance['display'][$display_view_mode]['settings']['view_mode']) ? $display_view_mode : $instance['display'][$display_view_mode]['settings']['view_mode'];
  77. $element['#theme_wrappers'] = array('paragraphs_items');
  78. $element['#attributes']['class'][] = drupal_clean_css_identifier('paragraphs-items');
  79. $element['#attributes']['class'][] = drupal_clean_css_identifier('paragraphs-items-view-mode-' . $view_mode);
  80. $element['#attributes']['class'][] = drupal_clean_css_identifier('paragraphs-items-field-' . $instance['field_name']);
  81. $element['#view_mode'] = $view_mode;
  82. foreach ($items as $delta => $item) {
  83. if ($paragraph = paragraphs_field_get_entity($item)) {
  84. $paragraph->setHostEntity($entity_type, $entity, $langcode);
  85. if (entity_access('view', 'paragraphs_item', $paragraph)) {
  86. $element[$delta]['entity'] = $paragraph->view($view_mode);
  87. }
  88. }
  89. }
  90. break;
  91. }
  92. return $element;
  93. }