Esempio n. 1
0
 public function testGetCacheKeyInfo()
 {
     $nodeFactory = $this->getMock('Magento\\Framework\\Data\\Tree\\NodeFactory', [], [], '', false);
     $treeFactory = $this->getMock('Magento\\Framework\\Data\\TreeFactory', [], [], '', false);
     $topmenu = new Topmenu($this->context, $nodeFactory, $treeFactory);
     $this->urlBuilder->expects($this->once())->method('getUrl')->with('*/*/*')->willReturn('123');
     $store = $this->getMockBuilder('Magento\\Store\\Model\\Store')->disableOriginalConstructor()->setMethods(['getCode'])->getMock();
     $store->expects($this->once())->method('getCode')->willReturn('321');
     $this->storeManager->expects($this->once())->method('getStore')->willReturn($store);
     $this->assertEquals(['BLOCK_TPL', '321', null, 'template' => null, '123'], $topmenu->getCacheKeyInfo());
 }
 /**
  * Recursively adds categories to top menu
  *
  * @param \Magento\Framework\Data\Tree\Node\Collection|array $categories
  * @param \Magento\Framework\Data\Tree\Node $parentCategoryNode
  * @param \Magento\Theme\Block\Html\Topmenu $block
  * @return void
  */
 protected function _addCategoriesToMenu($categories, $parentCategoryNode, $block)
 {
     foreach ($categories as $category) {
         if (!$category->getIsActive()) {
             continue;
         }
         $block->addIdentity(\Magento\Catalog\Model\Category::CACHE_TAG . '_' . $category->getId());
         $tree = $parentCategoryNode->getTree();
         $categoryData = $this->menuCategoryData->getMenuCategoryData($category);
         $categoryNode = new \Magento\Framework\Data\Tree\Node($categoryData, 'id', $tree, $parentCategoryNode);
         $parentCategoryNode->addChild($categoryNode);
         if ($this->categoryFlatState->isFlatEnabled() && $category->getUseFlatResource()) {
             $subcategories = (array) $category->getChildrenNodes();
         } else {
             $subcategories = $category->getChildren();
         }
         $this->_addCategoriesToMenu($subcategories, $categoryNode, $block);
     }
 }
Esempio n. 3
0
 /**
  * Recursively adds categories to top menu
  *
  * @param \Magento\Framework\Data\Tree\Node\Collection|array $categories
  * @param \Magento\Framework\Data\Tree\Node $parentCategoryNode
  * @param \Magento\Theme\Block\Html\Topmenu $block
  * @return void
  */
 protected function _addCategoriesToMenu($categories, $parentCategoryNode, $block)
 {
     foreach ($categories as $category) {
         if (!$category->getIsActive()) {
             continue;
         }
         $nodeId = 'category-node-' . $category->getId();
         $block->addIdentity(\Magento\Catalog\Model\Category::CACHE_TAG . '_' . $category->getId());
         $tree = $parentCategoryNode->getTree();
         $categoryData = array('name' => $category->getName(), 'id' => $nodeId, 'url' => $this->_catalogCategory->getCategoryUrl($category), 'is_active' => $this->_isActiveMenuCategory($category));
         $categoryNode = new \Magento\Framework\Data\Tree\Node($categoryData, 'id', $tree, $parentCategoryNode);
         $parentCategoryNode->addChild($categoryNode);
         if ($this->categoryFlatConfig->isFlatEnabled()) {
             $subcategories = (array) $category->getChildrenNodes();
         } else {
             $subcategories = $category->getChildren();
         }
         $this->_addCategoriesToMenu($subcategories, $categoryNode, $block);
     }
 }
Esempio n. 4
0
 /**
  * Recursively adds categories to top menu
  *
  * @param \Magento\Framework\Data\Tree\Node\Collection|array $categories
  * @param \Magento\Framework\Data\Tree\Node $parentCategoryNode
  * @param \Magento\Theme\Block\Html\Topmenu $block
  * @return void
  */
 protected function _addCategoriesToMenu($categories, $parentCategoryNode, $block)
 {
     foreach ($categories as $category) {
         if (!$category->getIsActive()) {
             continue;
         }
         $nodeId = 'category-node-' . $category->getId();
         $block->addIdentity(\Magento\Catalog\Model\Category::CACHE_TAG . '_' . $category->getId());
         $tree = $parentCategoryNode->getTree();
         $isActiveCategory = false;
         /** @var \Magento\Catalog\Model\Category $currentCategory */
         $currentCategory = $this->_registry->registry('current_category');
         if ($currentCategory && $currentCategory->getId() == $category->getId()) {
             $isActiveCategory = true;
         }
         $categoryData = ['name' => $category->getName(), 'id' => $nodeId, 'url' => $this->_catalogCategory->getCategoryUrl($category), 'has_active' => $this->hasActive($category), 'is_active' => $isActiveCategory];
         $categoryNode = new \Magento\Framework\Data\Tree\Node($categoryData, 'id', $tree, $parentCategoryNode);
         $parentCategoryNode->addChild($categoryNode);
         if ($this->categoryFlatConfig->isFlatEnabled() && $category->getUseFlatResource()) {
             $subcategories = (array) $category->getChildrenNodes();
         } else {
             $subcategories = $category->getChildren();
         }
         $this->_addCategoriesToMenu($subcategories, $categoryNode, $block);
     }
 }
Esempio n. 5
0
 /**
  * Add list of associated identities to the top menu block for caching purposes.
  *
  * @param \Magento\Theme\Block\Html\Topmenu $subject
  * @return void
  */
 public function beforeGetIdentities(\Magento\Theme\Block\Html\Topmenu $subject)
 {
     $subject->addIdentity(Category::CACHE_TAG);
     $rootId = $this->storeManager->getStore()->getRootCategoryId();
     $storeId = $this->storeManager->getStore()->getId();
     /** @var \Magento\Catalog\Model\ResourceModel\Category\Collection $collection */
     $collection = $this->getCategoryTree($storeId, $rootId);
     $mapping = [$rootId => $subject->getMenu()];
     // use nodes stack to avoid recursion
     foreach ($collection as $category) {
         if (!isset($mapping[$category->getParentId()])) {
             continue;
         }
         $subject->addIdentity(Category::CACHE_TAG . '_' . $category->getId());
     }
 }