Я пытаюсь загрузить все категории, которые помечены для включения в навигацию в Magento, в том же порядке, что и на панели администратора, чтобы создать пользовательское многоуровневое меню (мы объединить вывод с другим меню, хранящимся в БД, на другие страницы).Категории загрузки Magento в порядке администратора
Это то, что я использую в функции для создания меню до сих пор:
private function generateCategories() {
$_root_category_id = Mage::app()->getWebsite(true)->getDefaultStore()->getRootCategoryId();
$_current_children = Mage::getModel('catalog/category')
->getCollection()
->addAttributeToSelect('*')
->addIsActiveFilter()
->addLevelFilter(2)
->addOrderField('position', 'asc');
$i = 0;
$html = '';
foreach($_current_children as $l0) {
if ($l0->getID() != $_root_category_id && $l0->getName() != '' && $l0->getIncludeInMenu()) {
$i++;
if (Mage::helper('core/url')->getCurrentUrl() == $l0->getURL())
$active = ' active';
else
$active = '';
if ($l0->hasChildren())
$parent = ' parent';
else
$parent = '';
$html .= '<li class=" level0' . $active . $parent . '"><a href="' . $l0->getURL() . '" class="top">' . $l0->getName() . '</a>';
if ($l0->hasChildren()) {
$multiplier = 1;
$iteration = 0;
$level1 = '';
$level1[] = '';
foreach (explode(',', $l0->getChildren()) as $l1) {
$l1 = Mage::getModel('catalog/category')->load($l1);
if ($l1->getIncludeInMenu()) {
if (Mage::helper('core/url')->getCurrentUrl() == $l1->getURL())
$active = ' active';
else
$active = '';
if ($iteration == $this->perColumn) {
$iteration = 0;
$multiplier++;
}
$iteration++;
$level1[] = '<span class="level1' . $active . '"><a href="' . $l1->getURL() . '" title="' . $l1->getName() . '">' . $l1->getName() . '</a></span>';
}
}
unset($level1[0]);
$numLinks = count($level1);
$columns = $numLinks/$this->perColumn;
$html .= '<div class="border-cover"></div><div class="dropdown" style="width: ' . $this->colWidth * $multiplier . 'em;">';
$used = 0;
$iteration = 0;
foreach($level1 as $link) {
$used++;
$iteration++;
if ($used == 1)
$html .= '<div class="col" style="float: left; width: ' . $this->colWidth . 'em;">';
$html .= $link;
if ($used == 4 || $iteration == $numLinks) {
$html .= '</div>';
$used = 0;
}
}
$html .= '</div>';
}
$html .= '</li>';
}
}
return $html;
}
Я был под впечатлением, что ->addOrderField('position', 'asc')
следует фильтровать категории в том же порядке, как и в панели администратора, но это работает только на первом уровне ($l0
), а не подкатегории.
Может ли кто-нибудь предложить, как это можно было бы изменить для этого?
Спасибо, работает отлично. Я не понимал, что их способ вернуть эти категории в качестве объектов, я думал, что их нужно загружать после. –