Сортировка категорий в Magento по позиции в админке - PullRequest
11 голосов
/ 07 апреля 2011

Я хотел бы знать, как отсортировать этот список категорий (я следовал этому уроку здесь http://www.devinrolsen.com/magento-custom-category-listing-block/) в magento по позиции в панели администратора? В настоящее время он сортируется по id

<?php
$cats = Mage::getModel('catalog/category')->load(3)->getChildren();
$catIds = explode(',',$cats);
?>
<ul>
<?php foreach($catIds as $catId): ?>
    <li>
        <?php
            $category = Mage::getModel('catalog/category')->load($catId);
            echo '<a href="' . $category->getUrl() . '">';
            echo $category->getName() . '</a>';
        ?>
    </li>
<?php endforeach; ?>
</ul>

Ответы [ 5 ]

22 голосов
/ 08 апреля 2011

Вы делаете слишком много работы для себя, пытаясь иметь дело с идентификаторами и прочим.Следующее уже отсортировано по позиции в качестве стандарта.

<?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>
5 голосов
/ 28 января 2014

Если вы хотите отсортировать категории по позиции, созданной в adminhtml, вы можете затем, поскольку catalog/category является экземпляром Mage_Catalog_Model_Resource_Category_Collection, сделайте запрос, в котором вы укажете, что вы хотите выбрать, отфильтровать и / или отсортировать.

В данном случае мы получаем категории из catalog_category_entity, выбираем только имя, фильтруем после идентификатора и сортируем запрос по position.

<?php 
 $subcategories = Mage::getModel('catalog/category')->getCollection()
->addAttributeToSelect('name')
->addFieldToFilter('parent_id', $categoryId)
->addAttributeToSort('position', ASC);
?>
3 голосов
/ 21 ноября 2012

Вот что я сделал:

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

после получения категорий:

$categoryChildren = array();    

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

, а затем:

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

usort($categoryChildren, 'comparePosition');

Инвертирование возврата (1 и -1), очевидно, изменит порядок. Это работало просто отлично для меня. Надеюсь, это кому-нибудь поможет.

1 голос
/ 08 апреля 2011

Я настоятельно рекомендую сначала посмотреть здесь http://www.magentocommerce.com/knowledge-base/entry/magento-for-dev-part-8-varien-data-collections, а также другие статьи в базе знаний, которые необходимо прочитать для любого разработчика magento.

<?php
$cats = Mage::getModel('catalog/category')->addAttributeToSort('yourfield', 'desc')->getCollection()->getChildren();
$catIds = explode(',',$cats);
?>
0 голосов
/ 05 декабря 2013
    <?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; ?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...