Как получить подкатегории в Magento? ` - PullRequest
2 голосов
/ 28 октября 2011

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

МОДЕЛЬ КЛАССА

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

    }

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

Ответы [ 3 ]

8 голосов
/ 28 октября 2011

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

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());
0 голосов
/ 20 февраля 2016

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

Mage::getModel('catalog/category')
                    ->getCollection()
                    ->addAttributeToSelect('*')
                    ->getItems();
0 голосов
/ 21 января 2014

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

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

...