magento 按字母顺序对子类别进行排序

magento sort subcategories alphabetically

我想按字母顺序对我的子类别进行排序 我通过更改核心来做到这一点,但如果我能干净地做到这一点。

我正在使用: $_category->getChildrenCategories();

在文件中: app/code/core/Mage/Catalog/Model/Resource/Category.php

protected function _getChildrenCategoriesBase($category)

       // ->setOrder('position', Varien_Db_Select::SQL_ASC)
       ->setOrder('name', Varien_Db_Select::SQL_ASC)

如果有人使用 helper 或其他方式。

谢谢。

请尝试以下代码

<?php 

  $subcats = Mage::getModel('catalog/category')->load('1')->getChildren();
  $catIds = explode(',',$subcats );

  $catarray= array();
  foreach($catIds as $catId) {
    $category = Mage::getModel('catalog/category')->load($catId); 
    $catarray[$category->getName()] = $category->getUrl();
  }

  ksort($catarray, SORT_STRING);
?>

<ul>
   <?php foreach($catarray as $catname => $caturl): ?>
    <li>
      <a href="<?php echo $caturl; ?>"><?php echo $catname ; ?></a>
    </li>
   <?php endforeach; ?>
 </ul>

两个提示:

  1. 您可以在本地模块中重写资源模型并根据您的情况更改代码。

  2. 或者像这样创建一个新的辅助方法:

 

    $collection = $category->getCollection();
    $collection->addAttributeToSelect('url_key')
            ->addAttributeToSelect('name')
            ->addAttributeToSelect('all_children')
            ->addAttributeToSelect('is_anchor')
            ->setOrder('name', Varien_Db_Select::SQL_ASC)
            ->joinUrlRewrite()

    $collection->addAttributeToFilter('is_active', 1)
            ->addIdFilter($category->getChildren())
            ->load();
    return $collection; 

感谢 Dhaval Patel 和 mondev。我通过调用集合

修复了它
      $currentCategory = Mage::getModel('catalog/category')->load($_category->getId());
      $_subcategories = $currentCategory->getCollection();
      $_subcategories->addAttributeToSelect('url_key')
          ->addAttributeToSelect('name')
          ->addAttributeToSelect('all_children')
          ->addAttributeToFilter('is_active', 1)
          ->addIdFilter($currentCategory->getChildren())
          ->setOrder('name', Varien_Db_Select::SQL_ASC)
          ->load();