예제 #1
0
 /**
  * Populate queue for generating structural elements
  *
  * @param Layout\ScheduledStructure $scheduledStructure
  * @param \Magento\Framework\View\Layout\Element $currentNode
  * @param \Magento\Framework\View\Layout\Element $parentNode
  * @return string
  * @see scheduleElement() where the scheduledStructure is used
  */
 public function scheduleStructure(Layout\ScheduledStructure $scheduledStructure, Layout\Element $currentNode, Layout\Element $parentNode)
 {
     // if it hasn't a name it must be generated
     if (!(string) $currentNode->getAttribute('name')) {
         $name = $this->_generateAnonymousName($parentNode->getElementName() . '_schedule_block');
         $currentNode->setAttribute('name', $name);
     }
     $path = $name = (string) $currentNode->getAttribute('name');
     // Prepare scheduled element with default parameters [type, alias, parentName, siblingName, isAfter]
     $row = [self::SCHEDULED_STRUCTURE_INDEX_TYPE => $currentNode->getName(), self::SCHEDULED_STRUCTURE_INDEX_ALIAS => '', self::SCHEDULED_STRUCTURE_INDEX_PARENT_NAME => '', self::SCHEDULED_STRUCTURE_INDEX_SIBLING_NAME => null, self::SCHEDULED_STRUCTURE_INDEX_IS_AFTER => true];
     $parentName = $parentNode->getElementName();
     //if this element has a parent element, there must be reset [alias, parentName, siblingName, isAfter]
     if ($parentName) {
         $row[self::SCHEDULED_STRUCTURE_INDEX_ALIAS] = (string) $currentNode->getAttribute('as');
         $row[self::SCHEDULED_STRUCTURE_INDEX_PARENT_NAME] = $parentName;
         list($row[self::SCHEDULED_STRUCTURE_INDEX_SIBLING_NAME], $row[self::SCHEDULED_STRUCTURE_INDEX_IS_AFTER]) = $this->_beforeAfterToSibling($currentNode);
         // materialized path for referencing nodes in the plain array of _scheduledStructure
         if ($scheduledStructure->hasPath($parentName)) {
             $path = $scheduledStructure->getPath($parentName) . '/' . $path;
         }
     }
     $this->_overrideElementWorkaround($scheduledStructure, $name, $path);
     $scheduledStructure->setPathElement($name, $path);
     $scheduledStructure->setStructureElement($name, $row);
     return $name;
 }
예제 #2
0
 /**
  * Add asset content type to node by name
  *
  * @param Layout\Element $node
  * @return void
  */
 protected function addContentTypeByNodeName(Layout\Element $node)
 {
     switch ($node->getName()) {
         case self::HEAD_CSS:
             $node->addAttribute('content_type', 'css');
             break;
         case self::HEAD_SCRIPT:
             $node->addAttribute('content_type', 'js');
             break;
     }
 }
예제 #3
0
 /**
  * {@inheritdoc}
  *
  * @param Context $readerContext
  * @param Layout\Element $currentElement
  * @param Layout\Element $parentElement
  * @return $this
  */
 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;
 }
예제 #4
0
 /**
  * {@inheritdoc}
  *
  * @param Context $readerContext
  * @param Layout\Element $currentElement
  * @param Layout\Element $parentElement
  * @return $this
  */
 public function interpret(Context $readerContext, Layout\Element $currentElement)
 {
     $scheduledStructure = $readerContext->getScheduledStructure();
     switch ($currentElement->getName()) {
         case self::TYPE_BLOCK:
             $this->scheduleBlock($scheduledStructure, $currentElement);
             break;
         case self::TYPE_REFERENCE_BLOCK:
             $this->scheduleReference($scheduledStructure, $currentElement);
             break;
         default:
             break;
     }
     $this->readerPool->interpret($readerContext, $currentElement);
     return $this;
 }
예제 #5
0
 /**
  * Populate queue for generating structural elements
  *
  * @param \Magento\Framework\View\Layout\Element $node
  * @param \Magento\Framework\View\Layout\Element $parent
  * @return void
  * @see _scheduleElement() where the _scheduledStructure is used
  */
 protected function _scheduleStructure($node, $parent)
 {
     if ((string) $node->getAttribute('name')) {
         $name = (string) $node->getAttribute('name');
     } else {
         $name = $this->_generateAnonymousName($parent->getElementName() . '_schedule_block');
         $node->addAttribute('name', $name);
     }
     $path = $name;
     // type, alias, parentName, siblingName, isAfter, node
     $row = array(self::SCHEDULED_STRUCTURE_INDEX_NAME => $node->getName(), self::SCHEDULED_STRUCTURE_INDEX_ALIAS => '', self::SCHEDULED_STRUCTURE_INDEX_PARENT_NAME => '', self::SCHEDULED_STRUCTURE_INDEX_SIBLING_NAME => null, self::SCHEDULED_STRUCTURE_INDEX_IS_AFTER => true, self::SCHEDULED_STRUCTURE_INDEX_LAYOUT_ELEMENT => $node);
     $parentName = $parent->getElementName();
     if ($parentName) {
         $row[self::SCHEDULED_STRUCTURE_INDEX_ALIAS] = (string) $node->getAttribute('as');
         $row[self::SCHEDULED_STRUCTURE_INDEX_PARENT_NAME] = $parentName;
         list($row[self::SCHEDULED_STRUCTURE_INDEX_SIBLING_NAME], $row[self::SCHEDULED_STRUCTURE_INDEX_IS_AFTER]) = $this->_beforeAfterToSibling($node);
         // materialized path for referencing nodes in the plain array of _scheduledStructure
         if ($this->_scheduledStructure->hasPath($parentName)) {
             $path = $this->_scheduledStructure->getPath($parentName) . '/' . $path;
         }
     }
     $this->_overrideElementWorkaround($name, $path);
     $this->_scheduledStructure->setPathElement($name, $path);
     if ($this->_scheduledStructure->hasStructureElement($name)) {
         // union of arrays
         $this->_scheduledStructure->setStructureElement($name, $row + $this->_scheduledStructure->getStructureElement($name));
     } else {
         $this->_scheduledStructure->setStructureElement($name, $row);
     }
 }