DynamicLayout.php in Dynamic Layouts 8
File
src/Plugin/Layout/DynamicLayout.php
View source
<?php
namespace Drupal\dynamic_layouts\Plugin\Layout;
use Drupal\Core\Layout\LayoutDefault;
use Drupal\Core\Entity\EntityTypeManagerInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
class DynamicLayout extends LayoutDefault implements ContainerFactoryPluginInterface {
protected $entityTypeManager;
protected $settings;
public function __construct(array $configuration, $plugin_id, $plugin_definition, EntityTypeManagerInterface $entityTypeManager) {
parent::__construct($configuration, $plugin_id, $plugin_definition);
$this->entityTypeManager = $entityTypeManager;
$this->settings = $this->entityTypeManager
->getStorage('dynamic_layout_settings')
->load('settings');
}
public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
return new static($configuration, $plugin_id, $plugin_definition, $container
->get('entity_type.manager'));
}
public function build(array $regions) {
$plugin_id = $this
->getPluginId();
list($entity_type, $entity_id) = explode(':', $plugin_id);
$rows = [];
if ($config_entity = $this->entityTypeManager
->getStorage($entity_type)
->load($entity_id)) {
$rows = $config_entity
->getRows();
}
$build = [];
foreach ($this
->getPluginDefinition()
->getRegionNames() as $region_name) {
if (array_key_exists($region_name, $regions)) {
$build[$region_name] = $regions[$region_name];
}
}
$build['#settings'] = $this
->getConfiguration();
$build['#layout'] = $this->pluginDefinition;
$build['#wrapperClasses'] = $this
->getWrapperClasses();
$build['#theme'] = $this->pluginDefinition
->getThemeHook();
if ($library = $this->pluginDefinition
->getLibrary()) {
$build['#attached']['library'][] = $library;
}
if ($this->settings
->getFrontendLibrary() == 'custom') {
$build['#attached']['library'][] = 'dynamic_layouts/dynamic_layouts_frontend';
}
$build['rows'] = [
'#markup' => $rows,
];
return $build;
}
private function getWrapperClasses() {
$frontend_library = $this->settings
->getFrontendLibrary();
if ($column_count = $this->settings
->getGridColumnCount()) {
return $frontend_library . '-' . $column_count;
}
return '';
}
}