/** * @covers \Magento\Framework\View\Layout\ScheduledStructure::setPathElement */ public function testSetPathElement() { $data = ['some', 'new', 'data', 'path']; /** Test add new structure element */ $this->assertFalse($this->_model->hasPath('new_element')); $this->_model->setPathElement('new_element', $data); $this->assertEquals($data, $this->_model->getPath('new_element')); /** Test override existing structure element */ $this->assertTrue($this->_model->hasPath('path1')); $this->_model->setPathElement('path1', $data); $this->assertEquals($data, $this->_model->getPath('path1')); }
/** * 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); } }