/**
  * 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);
 }
Пример #2
0
 /**
  * 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();
 }
Пример #3
0
 /**
  * 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();
 }