2014-04-23 168 views
1

我试图隐藏前端没有活动产品在magento中的所有类别和子类别,但我不想使用管理后端来做到这一点手动。我只想显示产品数量大于零的顶级导航中的那些类别。我曾尝试在下面的链接给以前的解决方案:Magento - 如何隐藏没有产品的类别和子类别

https://magento.stackexchange.com/a/80/6099

&乔希Prattski的博客文章,

http://prattski.com/2011/10/06/magento-module-hide-empty-categories/

的解决方案都不是为我工作和对我有没有办法知道我做错了什么。任何帮助将非常感激。

+0

你可能会发现这很有http://stackoverflow.com/questions/22822997/remove-empty-categories-from-magento -菜单。 – PedroKTFC

回答

0

最好的办法是创建自己的模板类别树和implemnt条件的功能,使类别树:

foreach ($children as $child) { 
    if ($child->getIsActive() && $this->_hasProducts($child->entity_id)) { 
     $activeChildren[] = $child; 
    } 
} 

功能_hasProducts:

protected function _hasProducts($category_id) { 
    $products = Mage::getModel('catalog/category')->load($category_id) 
     ->getProductCollection() 
     ->addAttributeToSelect('entity_id') 
     ->addAttributeToFilter('status', 1) 
     ->addAttributeToFilter('visibility', 4); 
    return ($products->count() > 0) ? true : false; 
} 
+0

我已经尝试过这种解决方案,仍然存在问题。 –

+0

它适用于我几个月前,我发现我第一次使用的来源,也许它可以帮助http://magento.stackexchange.com/questions/36/hide-categories-with-no-active-products – Martin

+0

这适用于我最后。感谢@Martin –

1

可以执行以下SQL来禁用所有没有产品的类别。

UPDATE `catalog_category_entity_int` AS `status` 
INNER JOIN `eav_attribute` AS `attr` ON `attr`.`attribute_code` = 'is_active' 
AND `attr`.`entity_type_id` = 3 
AND `status`.`attribute_id` = `attr`.`attribute_id` 
SET `status`.`value` = IF((SELECT COUNT(`index`.`product_id`) 
    FROM `catalog_category_product_index` AS `index` 
    WHERE `index`.`category_id` = `status`.`entity_id` GROUP BY `index`.`category_id`) > 0, 1, 0) 
WHERE `status`.`store_id` = 0 

更多的细节,你可以在这里找到http://m-grater.info/all/hide-all-categories-without-products-and-show-categories-with-pr/

0

要隐藏顶部菜单的空类别,请执行下列操作:

转到app/code/core/Mage/Catalog/Block文件夹,复制Navigation.php,并在当地包覆盖Navigation.php

打开你的包Navigation.php并粘贴在该文件下面的代码:

if ($category->getIsActive()) { 
$cat = Mage::getModel('catalog/category')->load($category->getId()); 
$products = Mage::getResourceModel('catalog/product_collection')->addCategoryFilter($cat); 
Mage::getSingleton('catalog/product_status')->addVisibleFilterToCollection($products); 
Mage::getSingleton('catalog/product_visibility')->addVisibleInCatalogFilterToCollection($products); 
Mage::getSingleton('cataloginventory/stock')->addInStockFilterToCollection($products); 
if(count($products)==0) 
return; 
} 
相关问题