/
githubmirror
/
magento2
Обзор
Документация
Войти
/
githubmirror
/
magento2
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
2.4-develop
lib/internal/Magento/Framework/View/Layout/Reader/Container.php
145 строк
5 KB
Alexandra Zota
ACP2E-4019: CE copyright updates for 2.4.9-beta1
22 окт 2025, 17:47
22 окт 2025, 17:47
1b769b7
Код
Авторство
О чём код?
<?php /** * Copyright 2014 Adobe * All Rights Reserved. */ namespace Magento\Framework\View\Layout\Reader; use Magento\Framework\View\Layout; /** * Class Container */ class Container implements Layout\ReaderInterface { /**#@+ * Supported types */ const TYPE_CONTAINER = 'container'; const TYPE_REFERENCE_CONTAINER = 'referenceContainer'; /**#@-*/ /**#@+ * Names of container options in layout */ const CONTAINER_OPT_HTML_TAG = 'htmlTag'; const CONTAINER_OPT_HTML_CLASS = 'htmlClass'; const CONTAINER_OPT_HTML_ID = 'htmlId'; const CONTAINER_OPT_LABEL = 'label'; const CONTAINER_OPT_DISPLAY = 'display'; /**#@-*/ /**#@-*/ protected $helper; /** * @var \Magento\Framework\View\Layout\ReaderPool */ protected $readerPool; /** * Constructor * * @param Layout\ScheduledStructure\Helper $helper * @param Layout\ReaderPool $readerPool */ public function __construct( Layout\ScheduledStructure\Helper $helper, Layout\ReaderPool $readerPool ) { $this->helper = $helper; $this->readerPool = $readerPool; } /** * @inheritdoc */ public function getSupportedNodes() { return [self::TYPE_CONTAINER, self::TYPE_REFERENCE_CONTAINER]; } /** * @inheritdoc */ public function interpret(Context $readerContext, Layout\Element $currentElement) { switch ($currentElement->getName()) { case self::TYPE_CONTAINER: $this->helper->scheduleStructure( $readerContext->getScheduledStructure(), $currentElement, $currentElement->getParent() ); $this->mergeContainerAttributes($readerContext->getScheduledStructure(), $currentElement); break; case self::TYPE_REFERENCE_CONTAINER: $this->containerReference($readerContext->getScheduledStructure(), $currentElement); break; default: break; } $this->readerPool->interpret($readerContext, $currentElement); return $this; } /** * Merge Container attributes * * @param \Magento\Framework\View\Layout\ScheduledStructure $scheduledStructure * @param \Magento\Framework\View\Layout\Element $currentElement * @return void */ protected function mergeContainerAttributes( Layout\ScheduledStructure $scheduledStructure, Layout\Element $currentElement ) { $containerName = $currentElement->getAttribute('name'); $elementData = $scheduledStructure->getStructureElementData($containerName); if (isset($elementData['attributes'])) { $keys = array_keys($elementData['attributes']); foreach ($keys as $key) { if (isset($currentElement[$key])) { $elementData['attributes'][$key] = (string)$currentElement[$key]; } } } else { $elementData['attributes'] = [ self::CONTAINER_OPT_HTML_TAG => (string)$currentElement[self::CONTAINER_OPT_HTML_TAG], self::CONTAINER_OPT_HTML_ID => (string)$currentElement[self::CONTAINER_OPT_HTML_ID], self::CONTAINER_OPT_HTML_CLASS => (string)$currentElement[self::CONTAINER_OPT_HTML_CLASS], self::CONTAINER_OPT_LABEL => (string)$currentElement[self::CONTAINER_OPT_LABEL], self::CONTAINER_OPT_DISPLAY => (string)$currentElement[self::CONTAINER_OPT_DISPLAY], ]; } $scheduledStructure->setStructureElementData($containerName, $elementData); } /** * Handling reference of container * * If attribute remove="true" then add the element to list remove, * else merge container attributes * * @param Layout\ScheduledStructure $scheduledStructure * @param Layout\Element $currentElement * @return void */ protected function containerReference( Layout\ScheduledStructure $scheduledStructure, Layout\Element $currentElement ) { $containerName = $currentElement->getAttribute('name'); $containerRemove = filter_var($currentElement->getAttribute('remove'), FILTER_VALIDATE_BOOLEAN); if ($containerRemove) { $scheduledStructure->setElementToRemoveList($containerName); return; } elseif ($currentElement->getAttribute('remove')) { $scheduledStructure->unsetElementFromListToRemove($containerName); } $this->mergeContainerAttributes($scheduledStructure, $currentElement); } }