/** * Presents a list of blocks to add to the variant. * * @param \Symfony\Component\HttpFoundation\Request $request * The current request. * @param \Drupal\page_manager\PageVariantInterface $page_variant * The page entity. * * @return array * The block selection page. */ public function selectBlock(Request $request, PageVariantInterface $page_variant) { // Add a section containing the available blocks to be added to the variant. $build = ['#type' => 'container', '#attached' => ['library' => ['core/drupal.ajax']]]; $available_plugins = $this->blockManager->getDefinitionsForContexts($page_variant->getContexts()); // Order by category, and then by admin label. $available_plugins = $this->blockManager->getSortedDefinitions($available_plugins); foreach ($available_plugins as $plugin_id => $plugin_definition) { // Make a section for each region. $category = $plugin_definition['category']; $category_key = 'category-' . $category; if (!isset($build[$category_key])) { $build[$category_key] = ['#type' => 'fieldgroup', '#title' => $category, 'content' => ['#theme' => 'links']]; } // Add a link for each available block within each region. $build[$category_key]['content']['#links'][$plugin_id] = ['title' => $plugin_definition['admin_label'], 'url' => Url::fromRoute('page_manager.variant_add_block', ['page' => $page_variant->get('page'), 'page_variant' => $page_variant->id(), 'block_id' => $plugin_id, 'region' => $request->query->get('region')]), 'attributes' => $this->getAjaxAttributes()]; } return $build; }
/** * {@inheritdoc} */ public function getCancelUrl() { return new Url('entity.page.edit_form', ['page' => $this->entity->get('page')]); }