我正在玩magento的主页,我在其中创建了一个标签,其中显示了所有类别,包括根,类别和子类别(在一个标签中)。现在我想在主标签中显示主要类别(谁的父母是根)在每个类别下我想列出他们各自的子类别。我编写了以下代码来实现其中的一部分,
模特课程
public function getsubCategory($parent)
{
$subcategoryCollection = Mage::getModel('catalog/category')
->getCollection()
->addAttributeToFilter('parent_id', $parent);
return $subcategoryCollection;
BLOCK CLASS
protected function b4Html_subcategory($parent)
{
$catModel = Mage::getModel('Pragtech_Sweet/category');
$mysubCategory = $catModel->getsubCategory($parent);
$this->mysubCategory = $myCategory;
return $mysubCategory;
}
模板文件
$obj = new Pragtech_Sweet_Block_Category();
$collection = $obj->b4Html();
foreach ($collection as $category)
{
$name = $category->getName();
$parent = $category->getParent_id();
foreach ($obj->b4Html_subcategory($parent) as $subcategory)
{
$subname = $subcategory->getName();
//Here Will Go Ther Code For Sub Categories
}
但它不起作用..我无法理解我在哪里做错了...任何人都可以帮助我
答案 0 :(得分:8)
请改为:
Mage::getModel('catalog/category')->load('23')->getChildrenCategories();
并迭代结果。
这就是我发现它的方式:
$object = Mage::getModel('catalog/category');
print_r(get_class_methods($object));
print_r($object->load('23')->getChildrenCategories()->toArray());
答案 1 :(得分:0)
这是另一种方法,如果你不想搞乱treeModel的东西,或者想要更多地控制类别的加载方式:
function getCategoryTree($root_category_name)
{
$categories = Mage::getModel('catalog/category')->getCollection()
->addAttributeToSelect("*")
->addFieldToFilter("Name",array("eq"=>$root_category_name));
$stack = array();
$category = $categories->getFirstItem()->getData();
$categories=array();
array_push($stack, $category);
//regular recursion is boring, let's do a stack
while(count($stack) > 0)
{
$category = array_pop($stack);
array_push($categories, $category);
$children = Mage::getModel('catalog/category')->getCollection()
->addAttributeToSelect("*")
->addFieldToFilter("parent_id",array("eq"=>$category['entity_id']))
->addAttributeToSort("position","desc");
foreach ($children as $child)
{
array_push($stack, $child->getData());
}
}
return $categories;
}
这将为您提供一系列类别,这些类别表示以顶级类别为根的完整类别树,其名称为“某些类别名称”,按顺序包含所有类别数据。调整此选项只选择您需要的特定字段,而不是“*”。
这种技术可以让您更精细地控制类别树的加载,以及您希望以后如何构建数据。例如,您可以通过简单地修改它来执行分层树而不是平面数组,然后将其序列化为JSON对象以发送到客户端。
在您喜欢的任何级别添加您喜欢的任何过滤器(活动等等)以获得更多控制权。
答案 2 :(得分:0)
遍历此对象
Mage::getModel('catalog/category')
->getCollection()
->addAttributeToSelect('*')
->getItems();