LayoutOverrideFieldHelper.php
Namespace
Drupal\layout_builderFile
-
core/
modules/ layout_builder/ src/ LayoutOverrideFieldHelper.php
View source
<?php
declare (strict_types=1);
namespace Drupal\layout_builder;
use Drupal\Core\DependencyInjection\ContainerInjectionInterface;
use Drupal\Core\Entity\FieldableEntityInterface;
use Drupal\layout_builder\Plugin\SectionStorage\OverridesSectionStorage;
use Drupal\layout_builder\SectionStorage\SectionStorageManagerInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
/**
* Provides methods to help with entities using Layout Builder.
*/
class LayoutOverrideFieldHelper implements ContainerInjectionInterface {
use LayoutEntityHelperTrait;
/**
* Constructs a new LayoutOverrideFieldHelper.
*/
public function __construct(protected SectionStorageManagerInterface $sectionStorageManager, protected LayoutTempstoreRepositoryInterface $layoutTempstoreRepository) {
}
/**
* {@inheritdoc}
*/
public static function create(ContainerInterface $container) : static {
return new static($container->get('plugin.manager.layout_builder.section_storage'), $container->get('layout_builder.tempstore_repository'));
}
/**
* Updates a layout overrides's entity context when entity values change.
*
* @param \Drupal\Core\Entity\FieldableEntityInterface $entity
* The entity with the overridden layout.
*/
public function updateTempstoreEntityContext(FieldableEntityInterface $entity) : void {
if ($section_storage = $this->getOverridesSectionStorageForEntity($entity)) {
// This is only necessary if there is a layout override in the tempstore.
if ($this->layoutTempstoreRepository
->has($section_storage)) {
/** @var \Drupal\layout_builder\Plugin\SectionStorage\OverridesSectionStorageInterface $override_temp_store */
$override_temp_store = $this->layoutTempstoreRepository
->get($section_storage);
// Get the entity currently in the tempstore's entity context.
$stored_entity = $override_temp_store->getContextValue('entity');
// Update the tempstore entity context with a copy of the new entity,
// but retain the value of the layout field from the tempstore.
$updated_entity = $entity;
$updated_entity->{OverridesSectionStorage::FIELD_NAME} = $stored_entity->{OverridesSectionStorage::FIELD_NAME};
$override_temp_store->setContextValue('entity', $updated_entity);
$this->layoutTempstoreRepository
->set($override_temp_store);
}
}
}
}
Classes
Title | Deprecated | Summary |
---|---|---|
LayoutOverrideFieldHelper | Provides methods to help with entities using Layout Builder. |
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.