Изменить порядок сортировки подкатегорий в magento - PullRequest
0 голосов
/ 18 марта 2012

У меня есть некоторый код, который вызывает подкатегории главной категории, и мне нужно иметь возможность изменить порядок сортировки подкатегорий в передней части сайта.

Я попытался добавить атрибут в тег сортировки, но это ничего не делает. Может кто-нибудь помочь направить меня в правильном направлении, чтобы заставить это работать. Большое спасибо:

->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 ]

3 голосов
/ 19 марта 2012

@ Джейсон Миллвард Пожалуйста, не вызывайте 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();

сущность категории уже имеет атрибут позиции, которым управляет администратор.Просто используйте его для заказа категорий.

0 голосов
/ 25 апреля 2016

Если вы хотите загрузить подкатегории определенной категории с упорядочением по позициям. Пожалуйста, попробуйте это:

/** @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 . В противном случае, перед загрузкой коллекции сначала будет установлен порядок по имени.
У меня была ссылка на верхнее меню, чтобы посмотреть, как оно работает. Надеюсь, это кому-нибудь поможет!

0 голосов
/ 18 марта 2012

Вы можете попробовать это:

вы можете написать код после $ 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.Надеюсь, это поможет ...

...