/** * Builds the layout. * * @param \Drupal\layout\Plugin\Layout\LayoutInterface $layout * The layout to render. * @param \Drupal\layout\Plugin\Layout\LayoutBlockAndContextProviderInterface $provider * The block and context provider needed to build the layout. * * @return array * The render array. */ public function build(LayoutInterface $layout, LayoutBlockAndContextProviderInterface $provider) { $regions = $provider->getLayoutRegions(); $renderArray = array(); $rootRegions = array(); // Find rootRegions - @note we are doing it this way because *nesting* getLayoutRegions-calls // resets the internal iterator. foreach ($regions as $region) { if (!$region->getParentRegionId()) { $rootRegions[$region->getConfiguration()['region_id']] = $region; } } // Loop regions and build them, if needed, recursively. foreach ($rootRegions as $region_id => $region) { $renderArray[$region_id] = $this->buildRegion($region, $provider); } return array('#theme' => array($layout->getPluginDefinition()['theme'], 'layout'), '#regions' => $renderArray); }
/** * Initializes the page variant regions on the basis of given layout. * * @param \Drupal\layout\Plugin\Layout\LayoutInterface $layout * * @return \Drupal\layout\Plugin\LayoutRegion\LayoutRegionPluginCollection */ protected function initializeLayoutRegionsFromLayout(LayoutInterface $layout) { $this->configuration['regions'] = array(); $definitions = $layout ? $layout->getRegionDefinitions() : array(); $weight = 0; foreach ($definitions as $id => $regionPluginDefinition) { $this->addLayoutRegion(array('id' => !empty($regionPluginDefinition['plugin_id']) ? $regionPluginDefinition['plugin_id'] : 'default', 'region_id' => $id, 'label' => $regionPluginDefinition['label'], 'weight' => $weight)); $weight++; } $this->configuration['regions'] = $this->getLayoutRegions()->getConfiguration(); return $this->getLayoutRegions(); }
/** * Initializes the page variant regions on the basis of given layout. * * @param LayoutInterface $layout * @return LayoutRegionPluginBag|\Drupal\page_layout\Plugin\LayoutRegionPluginBag */ private function initializeLayoutRegionsFromLayout(LayoutInterface $layout) { $this->configuration['regions'] = array(); $definitions = $layout ? $layout->getRegionDefinitions() : array(); $weight = 0; $uuids_by_region_id = array(); foreach ($definitions as $region_id => $regionPluginDefinition) { $uuids_by_region_id[$region_id] = $this->addLayoutRegion(array('id' => !empty($regionPluginDefinition['plugin_id']) ? $regionPluginDefinition['plugin_id'] : 'default', 'region_id' => $region_id, 'label' => $regionPluginDefinition['label'], 'weight' => $weight, 'parent' => isset($regionPluginDefinition['parent']) ? $regionPluginDefinition['parent'] : NULL, 'options' => isset($regionPluginDefinition['options']) ? $regionPluginDefinition['options'] : NULL)); $weight++; } $configuration = $this->getLayoutRegions()->getConfiguration(); // Make sure that parent machine names are replaced with uuids. // We run this *after* so that we can be sure to have generated all // regions. foreach ($configuration as $uuid => $region_config) { if (isset($region_config['parent'])) { $region_config['parent'] = $uuids_by_region_id[$region_config['parent']]; $this->updateLayoutRegion($uuid, $region_config); } } $this->configuration['regions'] = $this->getLayoutRegions()->getConfiguration(); return $this->getLayoutRegions(); }