Sorting categories in Magento according to the position in admin

后端 未结 5 634
天命终不由人
天命终不由人 2020-12-31 12:27

I would like to know how to sort this list of categories (I followed this tutorial here http://www.devinrolsen.com/magento-custom-category-listing-block/) in magento by posi

相关标签:
5条回答
  • 2020-12-31 12:35
        <?php
        $model_category =   Mage::getModel('catalog/category')->load($_category->getEntityId());
        $sub_categories     =   $model_category->getCollection();
        $sub_categories     ->  addAttributeToSelect('url_key')
                            ->  addAttributeToSelect('name')
                            ->  addAttributeToFilter('is_active',1)
                            ->  addIdFilter($model_category->getChildren())
                            ->  setOrder('position', 'ASC')
                            ->  load();
        ?>
        <?php   foreach($sub_categories->getData()  as  $each_subcat):  ?>
            <?php   $model_subcat   =   Mage::getModel('catalog/category')->load($each_subcat['entity_id']);    ?>                              
        <?php   endforeach; ?>
    
    0 讨论(0)
  • 2020-12-31 12:42

    This is what I did:

    $allCategories = Mage::getModel('catalog/category');
    $CategoriesTree = $allCategories->getTreeModel()->load();
    $categoriesIds = 
    $CategoriesTree->getCollection()->addAttributeToSort('position', 'asc')->getAllIds();
    

    after to retrieve the categories:

    $categoryChildren = array();    
    
    if ($categoriesIds) {
        foreach ($categoriesIds as $categoryId){
            $category = Mage::getModel('catalog/category')->load($categoryId);
            $categoryChildren[] = $category;
        }
    }
    

    and then:

    // Sort by position
    function comparePosition($a, $b) {
        if ($a->position == $b->position)
            return 0;
            return ($a->position > $b->position) ? 1 : -1;
        }
    
    usort($categoryChildren, 'comparePosition');
    

    Inverting the return (1 and -1) would obviously change the order. It worked just fine for me. Hope it helps someone.

    0 讨论(0)
  • 2020-12-31 12:45

    If you want to sort the categories by the position created in adminhtml you can then, since catalog/category is an instance of Mage_Catalog_Model_Resource_Category_Collection, make a query where you specify what you want to select, filter and/or sort.

    The case here is getting categories from catalog_category_entity select only the name, filtering after the id and sort the query on the position.

    <?php 
     $subcategories = Mage::getModel('catalog/category')->getCollection()
    ->addAttributeToSelect('name')
    ->addFieldToFilter('parent_id', $categoryId)
    ->addAttributeToSort('position', ASC);
    ?>
    
    0 讨论(0)
  • 2020-12-31 12:46

    You're making way too much work for yourself trying to deal with IDs and stuff. The following is already sorted by position as standard.

    <?php
    $cats = Mage::getModel('catalog/category')->load(3)->getChildrenCategories();
    ?>
    <ul>
    <?php foreach($cats as $category): ?>
        <li>
            <a href="<?php echo $category->getUrl() ?>"><?php echo $category->getName() ?></a>
        </li>
    <?php endforeach; ?>
    </ul>
    
    0 讨论(0)
  • 2020-12-31 12:46

    I strongly suggest to lok here first http://www.magentocommerce.com/knowledge-base/entry/magento-for-dev-part-8-varien-data-collections and also other articles in knowledge base are a must read for any magento dev.

    <?php
    $cats = Mage::getModel('catalog/category')->addAttributeToSort('yourfield', 'desc')->getCollection()->getChildren();
    $catIds = explode(',',$cats);
    ?>
    
    0 讨论(0)
提交回复
热议问题