使用magento中的类似查询获取类别集合

时间:2013-05-11 05:08:10

标签: php magento magento-1.7 magento-1.6

我想在autosuggest字段中显示所有类别列表。所以我有一个类似查询的代码 -

function res($cur_category){
        $children_categories = Mage::getModel('catalog/category')->getCategories($cur_category->getId());
    $children_categories->addAttributeToFilter('name', array('like' => '%a%'));  
        foreach($children_categories as $child){
             $name = $child->getName();
        $option.='<li onClick="fill(\''.addslashes($child->getName()).'\');">' .$child->getName(). "</li>";
        $option.=res($child);
        }
    unset($children_categories);
        return $option;
}

function GetTree(){
    $rootcatId= Mage::app()->getStore()->getRootCategoryId();
    $categories = Mage::getModel('catalog/category')->getCategories($rootcatId);
    $categories->addAttributeToFilter('name', array('like' => '%a%')); 
    foreach($categories as $category) 
    {   
        $option.='<li onClick="fill(\''.addslashes($category->getName()).'\');">'.$category->getName()."</li>";
        if($category->hasChildren()){
        $option.= res($category);
        }
    }
    unset($categories);
    return $option;
} 
echo $select = '<ul>'.GetTree().'</ul>';

但是这个代码不能使用类似查询,没有类似查询它工作正常并正确显示类别列表。请提供类似的查询。

1 个答案:

答案 0 :(得分:2)

这可能是由于使用了“addAttributeToFilter”方法,或者使用“getCategories”来定义集合......我最好的建议是改变你拉动集合的方式。我没有在函数中测试过它,它总是一个直接的.phtml文件,但我总是使用以下结构来拉取一个集合(修改为适合你的变量):

$children_categories = Mage::getModel('catalog/category')->getCollection()
                ->addAttributeToSelect('*')
                ->addFieldToFilter('parent_id',array('eq' => $cur_category->getId()))
                ->addFieldToFilter('name', array('like' => '%a%'))
                ->addFieldToFilter('include_in_menu',array('eq' => '1'))
                ->addFieldToFilter('is_active', array('eq' => '1'))
                ->addAttributeToSort('position', 'asc');

最后三种方法在您的情况下是可选的,但我会在这里为那些想要仅保留在菜单中使用的可见类别的人提供它们,并将其与您的类别树进行排序。

对于GetTree()方法:

$categories = Mage::getModel('catalog/category')->getCollection()
                ->addAttributeToSelect('*')
                ->addFieldToFilter('parent_id',array('eq' => $rootcatId))
                ->addFieldToFilter('name', array('like' => '%a%'))
                ->addFieldToFilter('include_in_menu',array('eq' => '1'))
                ->addFieldToFilter('is_active', array('eq' => '1'))
                ->addAttributeToSort('position', 'asc');

如果这有帮助,或者您仍然遇到问题,请告诉我。