Exemple #1
0
 /**
  * Builds all blocks starting with and including the given root block
  *
  * @param string $rootId
  *
  * @throws Exception\LogicException if a child block is added to not container
  */
 protected function buildBlocks($rootId)
 {
     // build the root block
     if (!$this->rawLayout->hasProperty($rootId, RawLayout::RESOLVED_OPTIONS, true)) {
         $this->buildBlock($rootId);
     }
     // build child blocks
     $iterator = $this->rawLayout->getHierarchyIterator($rootId);
     foreach ($iterator as $id) {
         if ($this->rawLayout->hasProperty($id, RawLayout::RESOLVED_OPTIONS, true)) {
             // the block is already built
             continue;
         }
         if (!$this->isContainerBlock($iterator->getParent())) {
             $blockType = $this->rawLayout->getProperty($iterator->getParent(), RawLayout::BLOCK_TYPE, true);
             throw new Exception\LogicException(sprintf('The "%s" item cannot be added as a child to "%s" item (block type: %s) ' . 'because only container blocks can have children.', $id, $iterator->getParent(), $blockType instanceof BlockTypeInterface ? $blockType->getName() : $blockType));
         }
         $this->buildBlock($id);
     }
     // apply layout changes were made by built blocks and build newly added blocks
     $this->layoutManipulator->applyChanges($this->context);
     if ($this->layoutManipulator->getNumberOfAddedItems() !== 0) {
         $this->buildBlocks($rootId);
     }
 }
Exemple #2
0
 /**
  * @dataProvider             emptyStringDataProvider
  *
  * @expectedException \Oro\Component\Layout\Exception\InvalidArgumentException
  * @expectedExceptionMessage The item id must not be empty.
  */
 public function testHasPropertyWithEmptyId($id)
 {
     $this->rawLayout->hasProperty($id, RawLayout::PATH);
 }