如何在Magento中获取子类别?`

时间:2011-10-28 07:03:03

标签: php zend-framework magento magento-1.4

我正在玩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

    }

但它不起作用..我无法理解我在哪里做错了...任何人都可以帮助我

3 个答案:

答案 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();