2013-02-15 2 views
0

Я работаю над сайтом, где я показываю список всех подкатегорий, связанных с текущей категорией. Ниже приведенный ниже код отлично подходит для этого, но я хотел бы изменить способ сортировки списка подкатегорий. В настоящее время он сортируется по категории ID. Я бы хотел, чтобы он отображался в любом порядке, в котором пользователь Magento помещал категории в админа (где они могут перетаскивать, чтобы изменить порядок категорий). Цените любую помощь!Изменить порядок сортировки подкатегорий Magento

   <?php 
       $currentCat = Mage::registry('current_category'); 

       if ($currentCat->getParentId() == Mage::app()->getStore()->getRootCategoryId()) 
       { 
        // current category is a toplevel category 
        $loadCategory = $currentCat; 
       } 
       else 
       { 
        // current category is a sub-(or subsub-, etc...)category of a toplevel category 
        // load the parent category of the current category 
        $loadCategory = Mage::getModel('catalog/category')->load($currentCat->getParentId()); 
       } 
       $subCategories = explode(',', $loadCategory->getChildren()); 

       foreach ($subCategories as $subCategoryId) 
       { 
        $cat = Mage::getModel('catalog/category')->load($subCategoryId); 

        if($cat->getIsActive()) 
        { 
         echo '<a href="'.$cat->getURL().'">'.$cat->getName().'</a>'; 
        } 
       } 
      ?> 

ответ

6

Try вызов getChildrenCategories это будет принимать во внимание позиции каждой категории:

$loadCategory->getChildrenCategories() 

EDITED

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

Из вашего фрагмента кода над следующим изменением должно работать. Обратите внимание на вызов getChildrenCategories() и изменение в цикле foreach, поскольку каждый элемент должен быть объектом категории.

<?php 
$currentCat = Mage::registry('current_category'); 

if ($currentCat->getParentId() == Mage::app()->getStore()->getRootCategoryId()) 
{ 
    // current category is a toplevel category 
    $loadCategory = $currentCat; 
} 
else 
{ 
    // current category is a sub-(or subsub-, etc...)category of a toplevel category 
    // load the parent category of the current category 
    $loadCategory = Mage::getModel('catalog/category')->load($currentCat->getParentId()); 
} 
$subCategories = $loadCategory->getChildrenCategories(); 

foreach ($subCategories as $subCategory) 
{ 
    if($subCategory->getIsActive()) 
    { 
     echo '<a href="'.$subCategory->getURL().'">'.$subCategory->getName().'</a>'; 
    } 
} 
?> 
+0

Функция рекурсивна, поскольку она загружает коллекцию, фильтрованную Children(). Обратите внимание, что первая функция getChildren возвращает строку из всех идентификаторов дочерних элементов и getChildrenCategories возвращает массив Mage_Catalog_Model_Category – dagfr

+0

Спасибо за отзыв, я обновил свой ответ с помощью этой информации. – dmanners

+0

Добро пожаловать. Обратите внимание, что основными изменениями являются: no explode() и no load() больше не требуется. Такой чистый и более простой код. – dagfr

Смежные вопросы