Как получить подкатегории в Magento?

Я играю с домашней страницей magento, где я создал вкладку, которая показывает все категории, включая корневую, категории и подкатегории (в одной вкладке). Теперь я хочу показать только основные категории (чей родитель является корнем) на главной вкладке, и в каждой категории я хочу перечислить их соответствующие подкатегории. Я написал следующий код, чтобы выполнить часть этого,

МОДЕЛЬ КЛАСС

public function getsubCategory($parent)
{

    $subcategoryCollection = Mage::getModel('catalog/category')
    ->getCollection()
    ->addAttributeToFilter('parent_id', $parent);
       return $subcategoryCollection;

БЛОК КЛАСС

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

    }

но это не работает .. Я не могу понять, где я делаю неправильно ... Может ли кто-нибудь помочь мне


person ScoRpion    schedule 28.10.2011    source источник
comment
Я нашел хорошую ссылку здесь, которая показывает подкатегории родительской категории.   -  person ScoRpion    schedule 31.10.2011


Ответы (3)


Сделайте это вместо этого:

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());
person Anton S    schedule 28.10.2011
comment
в следующий раз попробуйте сначала выполнить поиск в StackOverflow, так как я скопировал этот ответ из результатов поиска, найденных прямо здесь - person Anton S; 28.10.2011
comment
Хорошо, но я не могу найти подкатегории определенной категории. Например, если я повторяю свои основные категории в цикле for и для каждой категории мне нужно найти ее подкатегорию. какой аргумент я должен передать, чтобы получить подкатегории определенной категории - person ScoRpion; 28.10.2011
comment
это дает вам только подкатегории загруженной категории - person Anton S; 28.10.2011
comment
И что, если мне нужно поместить мои основные категории на домашнюю страницу, и когда пользователь наводит мышь на любую категорию, он должен показывать ему все ее подкатегории. - person ScoRpion; 28.10.2011

Вот еще один способ сделать это, если вы не хотите возиться с материалом 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 для отправки клиенту.

Добавьте любые фильтры, которые вам нравятся (активные и т. д.) на любом уровне, который вам нравится, чтобы получить еще больше контроля.

person Clayton Gulick    schedule 20.01.2014

перебрать этот объект

Mage::getModel('catalog/category')
                    ->getCollection()
                    ->addAttributeToSelect('*')
                    ->getItems();
person user3112792    schedule 20.02.2016