ViewsFormatter.php 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. <?php
  2. namespace Drupal\paragraphs_views\Plugin\Field\FieldFormatter;
  3. use Drupal\Component\Utility\Html;
  4. use Drupal\Core\Field\FieldItemInterface;
  5. use Drupal\Core\Field\FieldItemListInterface;
  6. use Drupal\Core\Field\FormatterBase;
  7. use Drupal\Core\Form\FormStateInterface;
  8. use Drupal\views\Element\View;
  9. use Drupal\views\Views;
  10. /**
  11. * Plugin implementation of the 'paragraphs_views_formatter' formatter.
  12. *
  13. * @FieldFormatter(
  14. * id = "paragraphs_views_formatter",
  15. * label = @Translation("Views formatter"),
  16. * field_types = {
  17. * "entity_reference"
  18. * }
  19. * )
  20. */
  21. class ViewsFormatter extends FormatterBase {
  22. const DISPLAY = 'display';
  23. /**
  24. * {@inheritdoc}
  25. */
  26. public static function defaultSettings() {
  27. return array(
  28. 'display' => NULL,
  29. ) + parent::defaultSettings();
  30. }
  31. /**
  32. * {@inheritdoc}
  33. */
  34. public function settingsForm(array $form, FormStateInterface $form_state) {
  35. $elements = [];
  36. $elements['display'] = array(
  37. '#type' => 'textfield',
  38. '#title' => t('Name of View display'),
  39. '#default_value' => $this->getSetting('display'),
  40. '#description' => t('The machine name of the display to use for when executing the view'),
  41. '#required' => FALSE
  42. );
  43. return $elements + parent::settingsForm($form, $form_state);
  44. }
  45. /**
  46. * {@inheritdoc}
  47. */
  48. public function settingsSummary() {
  49. $summary = [];
  50. $display = $this->getSetting('display');
  51. $summary[] = t('Display: @display', array('@display' => $display ?: t('(default)')));
  52. return $summary;
  53. }
  54. /**
  55. * {@inheritdoc}
  56. */
  57. public function viewElements(FieldItemListInterface $items, $langcode) {
  58. $elements = [];
  59. $display = $this->getSetting(static::DISPLAY) ?? 'default';
  60. /**
  61. * @var \Drupal\Core\Field\Plugin\Field\FieldType\EntityReferenceItem $item
  62. */
  63. foreach ($items as $delta => $item) {
  64. $target = $item->getValue()['target_id'];
  65. $view = \Drupal\views\Entity\View::load($target);
  66. $exec = $view->getExecutable();
  67. $elements[$delta] = ['view' => $exec->preview($display)];
  68. }
  69. $elements['#cache'] = [
  70. 'max-age' => 0,
  71. ];
  72. return $elements;
  73. }
  74. /**
  75. * Generate the output appropriate for one field item.
  76. *
  77. * @param \Drupal\Core\Field\FieldItemInterface $item
  78. * One field item.
  79. *
  80. * @return string
  81. * The textual output generated.
  82. */
  83. protected function viewValue(FieldItemInterface $item) {
  84. // The text value has no text format assigned to it, so the user input
  85. // should equal the output, including newlines.
  86. return nl2br(Html::escape($item->value));
  87. }
  88. }