我可以使用以下代码获取特定类别的子类别列表:
public function displaycats($data, $begin,$end, $catid){
$currentCat = Mage::getModel('catalog/category')->load($data[0]);
$children = explode(",",$currentCat->getChildren());
foreach ($children as $child) {
$cot++;
$subCat = Mage::getModel('catalog/category')->load($child);
if ($cot >= $begin && $cot <= $end){
echo '<a href="'.$subCat->getUrl().'?stockable=786">'.$subCat->getName()."</a><br>";
}
}
return;
}
问题是列表的排序方式与Magento在管理区域中排序的类别不同。任何人都可以帮助我吗?
答案 0 :(得分:7)
我喜欢@Joe Constant的答案,但是当我尝试它时,即使将$recursionLevel
设置为0
,我也无法获得第一级子类别。作为一种解决方法,我编写了这个函数(将它放在(本地版本)你需要排序的子集合的块中):
public function getChildrenCollection($parentId=false, $sort='ASC', $attribute='position')
{
if (empty($parentId) || !is_numeric($parentId)) return false;
$childrenArray = explode(',',Mage::getModel('catalog/category')->load($parentId)->getChildren());
// remove parent id from array in case it gets returned
if ($key = array_search($parentId, $childrenArray)) {
unset($childrenArray[$key]);
}
$collection = Mage::getModel('catalog/category')->getCollection()
->addAttributeToFilter('entity_id', array('in' => $childrenArray))
->addAttributeToSelect('*');
if (!empty($sort)) {
return $collection->setOrder($attribute, $sort);
}
return $collection;
}
然后你可以遍历这个集合并按照你的需要做任何事情:
foreach (getChildrenCollection($parentCategoryId) as $child) {
Zend_Debug::dump($child->getData());
}
希望有所帮助。
答案 1 :(得分:2)
请改为使用 getCategories 。它有一个已排序的参数以及一个作为集合对象返回的选项,无需再次从数据库中加载每个类别。
/**
* Retrieve categories
*
* @param integer $parent
* @param integer $recursionLevel
* @param boolean|string $sorted
* @param boolean $asCollection
* @param boolean $toLoad
* @return Varien_Data_Tree_Node_Collection|Mage_Catalog_Model_Resource_Eav_Mysql4_Category_Collection
*/
public function getCategories($parent, $recursionLevel = 0, $sorted=false, $asCollection=false, $toLoad=true)
`
答案 2 :(得分:2)
$helper = Mage::helper('catalog/category');
$_categories = $helper->getStoreCategories('path', true, FALSE);
如果您想以下列格式显示类别
第1类
---子类别1a
------子类别1aa
---子类别1b
类别2
---子类别2a
---子类别2b
foreach($_categories as $category){
$level = $category['level'] - 2;
$pad = str_repeat("---", ($level > 0) ? $level : 0);
echo $pad . ' ' . $cat['name']);
echo '<br/>';
}
return $categories;
答案 3 :(得分:2)
我刚刚写了这样的东西来获取类别列表(通过parentId),如admin:
中那样排序$subCats = array();
$children = Mage::getModel('catalog/category')->getCategories($parentId, 1, true, true);
foreach ($children as $category)
{
$subCats[$category->getPosition()] = $category->getId();
}
ksort($subCats);