2012-03-07 5 views
0

Я ищу способ сортировки внешнего вида категорий в моей навигации.Magento sort Категории в шаблоне

Это код для моей навигации:

<div id="menu-accordion" class="accordion">  
    <?php 

    foreach ($this->getStoreCategories() as $_category): ?> 
    <?php $open = $this->isCategoryActive($_category) && $_category->hasChildren(); ?> 
    <h3 class="accordion-toggle"><a href="#"><?php print $_category->getName();?></a></h3> 
     <div class="accordion-content"> 
       <ul> 
       <?php foreach ($_category->getChildren() as $child): ?> 
        <li> 
         <span class="ui-icon ui-icon-triangle-1-e vMenuIconFloat"></span> 
          <a href="<?php print $this->getCategoryUrl($child); ?>"><?php print $child->getName();?></a> 
        </li> 
       <?php endforeach; ?> 
       </ul> 
      </div> 
    <?php endforeach ?> 
</div> 

Я попытался с помощью asort() сортировать $this->getStoreCategories(), но решил ошибку 500, так что я думаю, что это не массив, а объект (который, кажется, очевидно для объектно-ориентированного программирования magento). Я попытался найти решение для объекта, но не смог, и теперь я немного застрял.

Благодарим за помощь.

ответ

2

Звонок $this->getStoreCategories() не возвращает массив. Но вы можете создать свой собственный массив и использовать ключ массива в качестве элемента для сортировки (если вы хотите отсортировать по названию категории):

foreach ($this->getStoreCategories() as $_category) 
{ 
    $_categories[$_category->getName()] = $_category; 
} 

ksort($_categories); 

Теперь вместо итерации $this->getStoreCategories() вы перебрать массив $ _categories. Таким образом, ваш код будет выглядеть примерно так:

<div id="menu-accordion" class="accordion">  
    <?php 

    $_categories = array(); 
    foreach ($this->getStoreCategories() as $_category) 
    { 
     $_categories[$_category->getName()] = $_category; 
    } 
    ksort($_categories); 

    foreach ($_categories as $_category): ?> 
    <?php $open = $this->isCategoryActive($_category) && $_category->hasChildren(); ?> 
    <h3 class="accordion-toggle"><a href="#"><?php print $_category->getName();?></a></h3> 
     <div class="accordion-content"> 
       <ul> 
       <?php foreach ($_category->getChildren() as $child): ?> 
        <li> 
         <span class="ui-icon ui-icon-triangle-1-e vMenuIconFloat"></span> 
          <a href="<?php print $this->getCategoryUrl($child); ?>"><?php print $child->getName();?></a> 
        </li> 
       <?php endforeach; ?> 
       </ul> 
      </div> 
    <?php endforeach ?> 
</div> 
+0

Хорошо, работает очень хорошо для основных категорий, но подкатегории не сортируются. – Maddis

+0

Я сделал то же самое для дочерних категорий, теперь это почти идеально, и мне просто нужно найти метод кэширования. благодаря – Maddis