Magento类别下拉列表问题

时间:2014-12-23 03:57:10

标签: magento

我需要使用根目录类别名称显示所有子类别。我无法找到根类别详细信息。根类别名称显示为“/”如何解决此问题?

目前我正在获取所有类别,包括根类别(/)。

我的代码如下:

public function toOptionArray()
    {
        $categories = array();
        $categoryCollection = Mage::getResourceModel('catalog/category_collection')->addFieldToFilter(
            'path',
            array('neq' => '1')
        );

        foreach ($categoryCollection as $category) {
            var_dump($category->getData());
            echo '<br />';
            $category = Mage::getModel('catalog/category')->load($category->getId());
            $categories[$category->getId()] = $category->getUrlPath();
        }

        return $categories;
    }



protected function _renderOptions(Varien_Object $row)
    {
        $categories = $this->getColumn()->getOptions();

        $html = sprintf('<select class="category_select" name="mapping[%s]">', $row->getData('reference_id'));
        $html .= '<option value=""></option>';
        foreach ($categories as $id => $name) {
            $html .= sprintf(
                '<option value="%s"%s>%s</option>',
                $this->escapeHtml($id),
                $id == $row->getData('category_id') ? ' selected="selected"' : '',
                $this->escapeHtml($name)
            );
        }
        $html .= '</select>';

        return $html;
    }

我需要添加到类别下拉列表中,这是在根类别名称下显示的子类别。

任何人都可以帮助我。

谢谢。

1 个答案:

答案 0 :(得分:0)

我使用以下方法解决了这个问题:

受保护的函数_renderOptions(Varien_Object $ row)     {         $ categories = $ this-&gt; getColumn() - &gt; getOptions();

    $parentIdArray = array();
    foreach ($categories as $id => $name) {
        $category = Mage::getModel('catalog/category')->load($id);
        $parentId = $category->getParentId();
        if($parentId == 1){
            $parentIdArray[] = $id;
        }
    }

    $html = sprintf('<select class="category_select" name="mapping[%s]">', $row->getData('reference_id'));
    $html .= '<option value=""></option>';
    foreach ($parentIdArray as $parentId) {
        $parentCategory = Mage::getModel('catalog/category')->load($parentId);
        $name = $parentCategory->getName();
        $html .= sprintf(
                '<optgroup label="'.$name.'">
                <option value="%s"%s>%s</option>
                </optgroup>',
                $this->escapeHtml($parentId),
                $parentId == $row->getData('category_id') ? ' selected="selected"' : '',
                $this->escapeHtml($name)
            );
        $categories = Mage::getModel('catalog/category')->getCategories($parentId);
        $subCategories = $this->get_categories($categories);

        foreach ($subCategories as $id => $name) {
            $html .= sprintf(
                    '<option style="padding-left: 10px;" value="%s"%s>%s</option>',
                    $this->escapeHtml($id),
                    $id == $row->getData('category_id') ? ' selected="selected"' : '',
                    $this->escapeHtml($name)
                );
        }

    }
    $html .= '</select>';

    return $html;
}


public function  get_categories($categories) {
    $subCategories = array();
    foreach($categories as $category) {
        $subCategory = Mage::getModel('catalog/category')->load($category->getId());
        $subCategories[$subCategory->getId()] = $subCategory->getUrlPath();

        if($category->hasChildren()) {
            $children = Mage::getModel('catalog/category')->getCategories($category->getId());
            $childrenCategories = $this->get_categories($children);

            foreach ($childrenCategories as $id => $name) {
                $subCategories[$id] = $name;
            }
        }
    }
    return  $subCategories;
}