Как получить категории magento по массиву идентификаторов категорий?
У меня есть ситуация, когда у меня есть массив идентификаторов категорий (содержащий как родительские, так и дочерние категории). теперь я хочу получить все категории по идентификаторам в массиве в родительском дочернем отношении, т. Е. если категория верхнего уровня (родительская), то распечатайте ее, если категория дочерняя, сначала получите и распечатайте ее родительскую категорию, а затем распечатайте дочерние категории. До сих пор я мог получить все категории из списка, но условие, которое я применил, чтобы проверить, есть ли у категории родитель категория всегда остается верной, так как все основные категории являются дочерними по отношению к корневой (по умолчанию) категории
<?php if ($_categories->getParentId()>0) {
$_categories= $_categories->getParentCategory();
} ?>
2 answers
На основе комментариев....
Вместо $_categories->getParentId()>0
попробуйте проверить
$_categories->getParentId() != 1 && $_categories->getParentId() != Mage::app()->getStore()->getRootCategoryId().
Это должно исключить корень всех корней (идентификатор 1) и корневую категорию хранилища по умолчанию.
$cats = Mage::getModel('catalog/category')->getCollection()->addAttributeToFilter('level', array('gteq' => 2));
$final = array();
foreach($cats as $cat)
{
if($cat->getLevel() > 2 && !$cat->hasChildren())
{
$final[$cat->getEntityId()] = implode(',', c_getAllCategories($cat));
}
}
var_dump($final);
function c_getAllCategories($category,$cats = null)
{
if(!$cats)
$cats = array($category->getEntityId());
$category = $category->getParentCategory();
$cats[]=$category->getEntityId();
if($category && $category->getLevel()>=2)
{
$cats= c_getAllCategories($category,$cats);
}
return $cats;
}
Он распечатает все категории и их дочерние элементы