public function testGetParentId() { $this->assertEquals(0, $this->_model->getParentId()); $this->_model->unsetData(); $this->_model->load(4); $this->assertEquals(3, $this->_model->getParentId()); }
protected function exportData(Mage_Catalog_Model_Category $category, $file, $depth = 0) { $data = array('id' => $category->getId(), 'parent_id' => $category->getParentId(), 'attribute_set_id' => $category->getAttributeSetId(), 'urlPath' => $category->getUrlPath(), 'urlKey' => $category->getUrlKey(), 'path' => $category->getPath(), 'position' => $category->getPosition(), 'page_layout' => $category->getPageLayout(), 'description' => $category->getDescription(), 'display_mode' => $category->getDisplayMode(), 'is_active' => $category->getIsActive(), 'is_anchor' => $category->getIsAnchor(), 'include_in_menu' => $category->getIncludeInMenu(), 'custom_design' => $category->getCustomDesign(), 'level' => $category->getLevel(), 'name' => $category->getName(), 'metaTitle' => $category->getMetaTitle(), 'metaKeywords' => $category->getMetaKeywords(), 'metaDescription' => $category->getMetaDescription()); echo str_repeat(' ', $depth); echo '* ' . $category->getName() . sprintf(' (%s products)', $category->getProductCount()) . PHP_EOL; fputcsv($file, $data); if ($category->hasChildren()) { $children = Mage::getModel('catalog/category')->getCategories($category->getId()); foreach ($children as $child) { $child = Mage::getModel('catalog/category')->load($child->getId()); $this->exportData($child, $file, $depth + 1); } } }
/** * Process positions of old parent category children and new parent category children. * Get position for moved category * * @param Mage_Catalog_Model_Category $category * @param Mage_Catalog_Model_Category $newParent * @param null|int $afterCategoryId * @return int */ protected function _processPositions($category, $newParent, $afterCategoryId) { $table = $this->getEntityTable(); $adapter = $this->_getWriteAdapter(); $positionField = $adapter->quoteIdentifier('position'); $bind = array('position' => new Zend_Db_Expr($positionField . ' - 1')); $where = array('parent_id = ?' => $category->getParentId(), $positionField . ' > ?' => $category->getPosition()); $adapter->update($table, $bind, $where); /** * Prepare position value */ if ($afterCategoryId) { $select = $adapter->select()->from($table, 'position')->where('entity_id = :entity_id'); $position = $adapter->fetchOne($select, array('entity_id' => $afterCategoryId)); $bind = array('position' => new Zend_Db_Expr($positionField . ' + 1')); $where = array('parent_id = ?' => $newParent->getId(), $positionField . ' > ?' => $position); $adapter->update($table, $bind, $where); } elseif ($afterCategoryId !== null) { $position = 0; $bind = array('position' => new Zend_Db_Expr($positionField . ' + 1')); $where = array('parent_id = ?' => $newParent->getId(), $positionField . ' > ?' => $position); $adapter->update($table, $bind, $where); } else { $select = $adapter->select()->from($table, array('position' => new Zend_Db_Expr('MIN(' . $positionField . ')')))->where('parent_id = :parent_id'); $position = $adapter->fetchOne($select, array('parent_id' => $newParent->getId())); } $position += 1; return $position; }
/** * Process positions of old parent category children and new parent category children. * Get position for moved category * * @param Mage_Catalog_Model_Category $category * @param Mage_Catalog_Model_Category $newParent * @param null|int $afterCategoryId * @return int */ protected function _processPositions($category, $newParent, $afterCategoryId) { $table = $this->getEntityTable(); $adapter = $this->_getWriteAdapter(); $sql = "UPDATE {$table} SET `position`=`position`-1 WHERE " . $adapter->quoteInto('parent_id=? AND ', $category->getParentId()) . $adapter->quoteInto('position>?', $category->getPosition()); $adapter->query($sql); /** * Prepare position value */ if ($afterCategoryId) { $sql = "SELECT `position` FROM {$table} WHERE entity_id=?"; $position = $adapter->fetchOne($adapter->quoteInto($sql, $afterCategoryId)); $sql = "UPDATE {$table} SET `position`=`position`+1 WHERE " . $adapter->quoteInto('parent_id=? AND ', $newParent->getId()) . $adapter->quoteInto('position>?', $position); $adapter->query($sql); } elseif ($afterCategoryId !== null) { $position = 0; $sql = "UPDATE {$table} SET `position`=`position`+1 WHERE " . $adapter->quoteInto('parent_id=? AND ', $newParent->getId()) . $adapter->quoteInto('position>?', $position); $adapter->query($sql); } else { $sql = "SELECT MIN(`position`) FROM {$table} WHERE parent_id=?"; $position = $adapter->fetchOne($adapter->quoteInto($sql, $newParent->getId())); } $position += 1; return $position; }
/** * Fill the Field parent_id in the given array * * @param Mage_Catalog_Model_Category $category */ protected function _setParentId($category) { $this->_defaultRow["parent_id"] = $this->_parentId != $category->getParentId() ? $category->getParentId() : ""; }
protected function _prepareItemData(Mage_Catalog_Model_Category $category, $level = 1) { $row = null; $addCount = $this->getCountEnabled(); $isSelected = in_array($category->getId(), $this->getCategories()); $isFolded = $level > 1 && $this->getCategory()->getParentId() != $category->getParentId(); $value = $this->_calculateCategoryValue($category->getId()); if (!$addCount || $category->getProductCount()) { $row = array('label' => Mage::helper('core')->htmlEscape($category->getName()), 'url' => $this->getCategoryUrl($value), 'count' => $addCount ? $this->_getProductCount($category) : 0, 'level' => $level, 'id' => $category->getId(), 'value' => $value, 'parent_id' => $category->getParentId(), 'is_folded' => $isFolded, 'is_selected' => $isSelected); } return $row; }
public function move(Mage_Catalog_Model_Category $category, $newParentId) { $oldStoreId = $category->getStoreId(); $parent = Mage::getModel('catalog/category')->setStoreId($category->getStoreId())->load($category->getParentId()); $newParent = Mage::getModel('catalog/category')->setStoreId($category->getStoreId())->load($newParentId); $oldParentStores = $parent->getStoreIds(); $newParentStores = $newParent->getStoreIds(); $category->setParentId($newParentId)->save(); $parent->save(); $newParent->save(); // Add to new stores $addToStores = array_diff($newParentStores, $oldParentStores); foreach ($addToStores as $storeId) { $newCategory = clone $category; $newCategory->setStoreId($storeId)->save(); $children = $category->getAllChildren(); if ($children && ($arrChildren = explode(',', $children))) { foreach ($arrChildren as $childId) { if ($childId == $category->getId()) { continue; } $child = Mage::getModel('catalog/category')->setStoreId($oldStoreId)->load($childId)->setStoreId($storeId)->save(); } } } return $this; }
/** * Additional validation when on a category page, so the sub category of the store root category is not added as filter. * * @param Mage_Catalog_Model_Category $category Category to be validated. * * @return bool */ protected function _isValidCategory($category) { $rootId = (int) Mage::app()->getStore()->getRootCategoryId(); if ($this->getUseUrlRewrites() && $category->getParentId() === $rootId) { return false; } return parent::_isValidCategory($category); }