我有一些代码调用主类别的子类别,我需要能够更改网站前端的子类别的排序顺序。
我尝试将该属性添加到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()): ?>
答案 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 。否则,在加载集合之前,将首先按名称设置排序 我参考了顶级菜单,看看它是如何工作的。希望这会对某人有所帮助!