【问题标题】:Change sort order of sub categories in magento更改magento中子类别的排序顺序
【发布时间】:2012-03-18 11:38:00
【问题描述】:

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

我尝试将属性添加到排序标签,但这并没有做任何事情。任何人都可以帮助我指出正确的方向以使其正常工作。非常感谢:

->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()): ?>

【问题讨论】:

    标签: php magento e-commerce


    【解决方案1】:

    @杰森米尔沃德 请不要对每个对象调用 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();
    

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

    【讨论】:

    • 谢谢你,但我在哪里把它添加到代码中来调用它?非常感谢
    • 好吧,取决于你想要的地方:)
    • 可以将它添加到我上面已经发布的代码中,还是我需要考虑重写它以使其适合?
    • 确定你可以在那里。只需替换第一行: $currentCategory = Mage::registry('current_category');
    【解决方案2】:

    你可以试试这个:

    你可以在$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。希望这会有所帮助...

    【讨论】:

      【解决方案3】:

      如果您想加载按位置排序的特定类别的子类别。请试试这个:

      /** @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。否则,在加载集合之前,会先设置按名称排序。
      我参考了顶部菜单以了解它是如何工作的。希望这会对某人有所帮助!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-27
        相关资源
        最近更新 更多