public function testGetParentIds() { $this->assertEquals([], $this->_model->getParentIds()); $this->_model->unsetData(); $this->_model->load(4); $this->assertContains(3, $this->_model->getParentIds()); $this->assertNotContains(4, $this->_model->getParentIds()); }
/** * @param Category $category * @return void */ public function processDelete(Category $category) { /** @var \Magento\Catalog\Model\ResourceModel\Category $resourceModel */ $resourceModel = $category->getResource(); /** * Update children count for all parent categories */ $parentIds = $category->getParentIds(); if ($parentIds) { $childDecrease = $category->getChildrenCount() + 1; // +1 is itself $data = ['children_count' => new \Zend_Db_Expr('children_count - ' . $childDecrease)]; $where = ['entity_id IN(?)' => $parentIds]; $resourceModel->getConnection()->update($resourceModel->getEntityTable(), $data, $where); } }
/** * Move category to another parent node * * @param \Magento\Catalog\Model\Category $category * @param \Magento\Catalog\Model\Category $newParent * @param null|int $afterCategoryId * @return $this */ public function changeParent(\Magento\Catalog\Model\Category $category, \Magento\Catalog\Model\Category $newParent, $afterCategoryId = null) { $childrenCount = $this->getChildrenCount($category->getId()) + 1; $table = $this->getEntityTable(); $adapter = $this->_getWriteAdapter(); $levelFiled = $adapter->quoteIdentifier('level'); $pathField = $adapter->quoteIdentifier('path'); /** * Decrease children count for all old category parent categories */ $adapter->update($table, array('children_count' => new \Zend_Db_Expr('children_count - ' . $childrenCount)), array('entity_id IN(?)' => $category->getParentIds())); /** * Increase children count for new category parents */ $adapter->update($table, array('children_count' => new \Zend_Db_Expr('children_count + ' . $childrenCount)), array('entity_id IN(?)' => $newParent->getPathIds())); $position = $this->_processPositions($category, $newParent, $afterCategoryId); $newPath = sprintf('%s/%s', $newParent->getPath(), $category->getId()); $newLevel = $newParent->getLevel() + 1; $levelDisposition = $newLevel - $category->getLevel(); /** * Update children nodes path */ $adapter->update($table, array('path' => new \Zend_Db_Expr('REPLACE(' . $pathField . ',' . $adapter->quote($category->getPath() . '/') . ', ' . $adapter->quote($newPath . '/') . ')'), 'level' => new \Zend_Db_Expr($levelFiled . ' + ' . $levelDisposition)), array($pathField . ' LIKE ?' => $category->getPath() . '/%')); /** * Update moved category data */ $data = array('path' => $newPath, 'level' => $newLevel, 'position' => $position, 'parent_id' => $newParent->getId()); $adapter->update($table, $data, array('entity_id = ?' => $category->getId())); // Update category object to new data $category->addData($data); $category->unsetData('path_ids'); return $this; }
/** * @param \Magento\Catalog\Model\Category $category * @param int $storeId * @return bool */ protected function isCategoryProperForGenerating($category, $storeId) { if ($category->getParentId() != \Magento\Catalog\Model\Category::TREE_ROOT_ID) { list(, $rootCategoryId) = $category->getParentIds(); return $rootCategoryId == $this->storeManager->getStore($storeId)->getRootCategoryId(); } return false; }
public function testVerifyIds() { $ids = $this->_model->verifyIds($this->_model->getParentIds()); $this->assertNotContains(100, $ids); }
public function getCategoryQueryTerm(Category $category, $store = null) { $queryType = $this->helper->getCategoryQueryType($store); if ($queryType == CategoryQueryType::NAME) { return $category->getName(); } $parents = $category->getParentCategories(); $parentIds = array_intersect($category->getParentIds(), array_keys($parents)); switch ($queryType) { case CategoryQueryType::FULL_PATH: break; case CategoryQueryType::NAME_AND_PARENT_NAME: $parentId = $category->getParentId(); $parentIds = in_array($parentId, $parentIds) ? [$parentId] : []; break; case CategoryQueryType::NAME_AND_ROOT_NAME: $parentIds = array_slice($parentIds, 0, 1); break; } $names = array_map(function ($id) use($parents) { return $parents[$id]->getName(); }, $parentIds); $names[] = $category->getName(); return implode(' ', $names); }
/** * Check is category in list of store categories * * @param \Magento\Catalog\Model\Category $category * @return boolean */ public function isInRootCategoryList($category) { $pathIds = $category->getParentIds(); return in_array($this->_storeManager->getStore()->getRootCategoryId(), $pathIds); }
/** * @param \Magento\Catalog\Model\Category $category * @param int $storeId * @return bool */ protected function isCategoryProperForGenerating($category, $storeId) { if (isset($this->acceptableCategories[$storeId]) && isset($this->acceptableCategories[$storeId][$category->getId()])) { return $this->acceptableCategories[$storeId][$category->getId()]; } $acceptable = false; if ($category->getParentId() != \Magento\Catalog\Model\Category::TREE_ROOT_ID) { list(, $rootCategoryId) = $category->getParentIds(); $acceptable = $rootCategoryId == $this->storeManager->getStore($storeId)->getRootCategoryId(); } if (!isset($this->acceptableCategories[$storeId])) { $this->acceptableCategories[$storeId] = []; } $this->acceptableCategories[$storeId][$category->getId()] = $acceptable; return $acceptable; }
/** * {@inheritdoc} */ public function getParentIds() { $pluginInfo = $this->pluginList->getNext($this->subjectType, 'getParentIds'); if (!$pluginInfo) { return parent::getParentIds(); } else { return $this->___callPlugins('getParentIds', func_get_args(), $pluginInfo); } }