54 $this->viewBuilder = $view_builder;
61 public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
63 $container->get(
'paragraphs_editor.field_value.manager'),
64 $container->get(
'entity_type.manager')->getViewBuilder(
'paragraph'),
65 $container->get(
'renderer')
72 public function process(SemanticDataInterface $data, DomProcessorResultInterface $result) {
73 if ($data->is($this->getSelector(
'widget'))) {
74 $entity = $data->get(
'paragraph.entity');
76 $markup = $this->
render($data, $entity);
77 $result->replaceWithHtml($data, $markup);
106 protected function render(SemanticDataInterface $data, ParagraphInterface $entity) {
107 $render_cache = &drupal_static(__CLASS__ .
'::' . __FUNCTION__, []);
108 $langcode = $data->get(
'langcode');
109 $cache_key = $this->
getCacheKey($entity, $langcode);
111 if (empty($render_cache[$cache_key])) {
115 array_push($to_process, $entity);
116 array_push($to_render, $entity);
117 while ($entity = array_shift($to_process)) {
119 foreach ($entity->getFields() as $items) {
120 $field_definition = $items->getFieldDefinition();
122 if ($this->fieldValueManager->isParagraphsEditorField($field_definition)) {
123 $wrapper = $this->fieldValueManager->wrapItems($items);
124 foreach ($wrapper->getReferencedEntities() as $child_entity) {
125 $to_render[] = $child_entity;
126 $to_process[] = $child_entity;
129 elseif ($this->fieldValueManager->isParagraphsField($field_definition)) {
130 foreach ($this->fieldValueManager->getReferencedEntities($items) as $child_entity) {
131 $to_process[] = $child_entity;
137 $view_mode = $data->get(
'settings.view_mode');
138 while ($entity = array_pop($to_render)) {
139 $view = $this->viewBuilder->view($entity, $view_mode, $langcode);
140 $render_cache[$this->
getCacheKey($entity, $langcode)] = $this->renderer->render($view);
144 return $render_cache[$cache_key];
158 protected function getCacheKey(ParagraphInterface $entity, $langcode) {
159 $keys = [$entity->uuid(), $entity->getRevisionId()];
163 return implode(
':', $keys);
process(SemanticDataInterface $data, DomProcessorResultInterface $result)
trait ParagraphsEditorElementTrait
render(SemanticDataInterface $data, ParagraphInterface $entity)
getCacheKey(ParagraphInterface $entity, $langcode)
__construct(FieldValueManagerInterface $field_value_manager, EntityViewBuilderInterface $view_builder, RendererInterface $renderer)
static create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition)
initializeParagraphsEditorElementTrait(FieldValueManagerInterface $field_value_manager)