更改magento中子类别的排序顺序

时间:2012-03-18 11:38:00

标签: php magento e-commerce

我有一些代码调用主类别的子类别,我需要能够更改网站前端的子类别的排序顺序。

我尝试将该属性添加到sort标签,但这不做任何事情。任何人都可以帮我指出正确的方向让这个工作。非常感谢:

->addAttributeToSort(’position’, ‘asc’) 

这对订单没有任何影响。我正在使用的代码如下:

          <?php 
        //get the current category
        $_cat = new Mage_Catalog_Block_Navigation();
        $currentCat = $_cat->getCurrentCategory();

        //get the children of the current category
        $subCats = Mage::getModel('catalog/category')->load($currentCat->getId())->getChildren();
        //get sub category ids
        $subCatIds = explode(',',$subCats);
        ?>
      <?php if (count($subCatIds) > 1): ?>
      <?php foreach($subCatIds as $subCatId): ?>
      <?php $subCat = Mage::getModel('catalog/category')->load($subCatId); ?>
      <?php if($subCat->getIsActive()): ?>

3 个答案:

答案 0 :(得分:3)

@Jason Millward 请不要对每个对象调用load()。它将在最近的将来影响现场表现;)
我为你创造了一个例子。

    $currentCategory = Mage::getModel('catalog/category')->load(3);
    $collection = $currentCategory->getCollection();
    $collection->addAttributeToSelect('url_key')
        ->addAttributeToSelect('name')
        ->addAttributeToSelect('all_children')
        ->addAttributeToSelect('is_anchor')
        ->addAttributeToFilter('is_active', 1)
        ->addIdFilter($currentCategory->getChildren())
        ->setOrder('position', Varien_Db_Select::SQL_ASC)
        ->load();

类别实体已经具有从admin管理的位置属性 只需用它来订购类别。

答案 1 :(得分:0)

你可以试试这个:

你可以在$ subCats

之后编写代码
$collection = Mage::getModel('catalog/category')->getCollection()
              ->addAttributeToFilter('entity_id', array('in' => $subCats))
              ->addAttributeToSelect('entity_id');
if($collection)
{
  $subCatIds = $collection->setOrder('position', 'asc');
}

执行foreach $ subCatIds之后,您可以使用id。希望这会有所帮助......

答案 2 :(得分:0)

如果要按位置加载特定类别的子类别。请试试这个:

/** @var Mage_Catalog_Model_Resource_Category_Flat_Collection $storeCategories */
$storeCategories =  Mage::getModel('catalog/category')->getCategories(
    $currentCategory->getId(), 0, false, true, false
);
$storeCategories->unshiftOrder('position',  Varien_Db_Select::SQL_ASC);

通知我们必须使用 unshiftOrder 而不是 setOrder 。否则,在加载集合之前,将首先按名称设置排序 我参考了顶级菜单,看看它是如何工作的。希望这会对某人有所帮助!