layoutManager = $layout_manager; } /** * {@inheritdoc} */ public static function create(ContainerInterface $container) { return new static( $container->get('plugin.manager.core.layout') ); } /** * Choose a layout plugin to add as a section. * * @param \Drupal\layout_builder\SectionStorageInterface $section_storage * The section storage. * @param int $delta * The delta of the section to splice. * * @return array * The render array. */ public function build(SectionStorageInterface $section_storage, $delta) { $output['#title'] = $this->t('Choose a layout'); $items = []; $definitions = $this->layoutManager->getFilteredDefinitions('layout_builder', [], ['section_storage' => $section_storage]); foreach ($definitions as $plugin_id => $definition) { $layout = $this->layoutManager->createInstance($plugin_id); $item = [ '#type' => 'link', '#title' => [ $definition->getIcon(60, 80, 1, 3), [ '#type' => 'container', '#children' => $definition->getLabel(), ], ], '#url' => Url::fromRoute( $layout instanceof PluginFormInterface ? 'layout_builder.configure_section' : 'layout_builder.add_section', [ 'section_storage_type' => $section_storage->getStorageType(), 'section_storage' => $section_storage->getStorageId(), 'delta' => $delta, 'plugin_id' => $plugin_id, ] ), ]; if ($this->isAjax()) { $item['#attributes']['class'][] = 'use-ajax'; $item['#attributes']['data-dialog-type'][] = 'dialog'; $item['#attributes']['data-dialog-renderer'][] = 'off_canvas'; } $items[] = $item; } $output['layouts'] = [ '#theme' => 'item_list', '#items' => $items, '#attributes' => [ 'class' => [ 'layout-selection', ], ], ]; return $output; } }