1

我想在自动建议字段中显示所有类别列表。所以我有一个类似查询的代码:

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>';

但是此代码不适用于类似查询,如果没有类似查询,它可以正常工作并正确显示类别列表。我怎样才能用like写查询?

4

1 回答 1

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');

让我知道这是否有帮助,或者您仍然遇到问题。

于 2013-05-25T06:03:58.123 回答