我试图隐藏前端的所有类别和子类别,而没有活跃的产品,但我不想使用管理后端手动执行此操作。我想只在顶级导航中显示那些产品数量大于零的类别。我已尝试过以下链接中给出的先前解决方案:
https://magento.stackexchange.com/a/80/6099
&安培; Josh Prattski的博客文章,
http://prattski.com/2011/10/06/magento-module-hide-empty-categories/
没有一个解决方案对我有用,我无法知道我做错了什么。任何帮助将非常感激。
答案 0 :(得分:2)
您可以执行以下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://quicktips.ru/all/hide-all-categories-without-products-and-show-categories-with-pr/
答案 1 :(得分:0)
最好的方法是创建自己的模板类别树,并为呈现类别树的函数实现条件:
foreach ($children as $child) {
if ($child->getIsActive() && $this->_hasProducts($child->entity_id)) {
$activeChildren[] = $child;
}
}
功能有产品:
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;
}
答案 2 :(得分:0)
要从“顶层”菜单隐藏空类别,请执行以下操作:
转到var values = JSON.parse(localStorage.getItem("store_owner_ad_contacts"));
values.forEach(values, function(item, i) {
// you get object like this {id: "100033"}
// so to access id do like normal object
if (item.id === '100033') {
// do something
}
});
文件夹,在本地包中复制app/code/core/Mage/Catalog/Block
和覆盖Navigation.php
。
打开您的软件包Navigation.php
并将以下代码粘贴到此文件中:
Navigation.php
答案 3 :(得分:0)
我应该以以下内容开头所有这些内容,适用于magento 2.3,可能是2.x及更高版本...目前我正在研究2.3 ...
我仍在努力处理存储库和工厂,以上所有或我可以找到的关于此的代码均未使用存储库或工厂,即使在magento 2.3中,这似乎仍然是一个问题,所以我所做的只是如果您有多个商店,则可能需要在mysql中的两行中进行修改...首先,禁用所有类别,然后启用具有任何产品的任何类别,要比另一种方法容易得多,因此禁用一行mysql shell或phpmyadmin前端树中的所有类别...
update catalog_category_entity_int set catalog_category_entity_int.value = 0 where catalog_category_entity_int.store_id = 0 and catalog_category_entity_int.attribute_id = (select attribute_id from eav_attribute where attribute_code = 'include_in_menu') or catalog_category_entity_int.attribute_id = (select attribute_id from eav_attribute where attribute_code = 'is_active');
然后将其激活,并在菜单中包括所有库存产品的类别
update catalog_category_entity_int left join catalog_category_product on catalog_category_product.category_id = catalog_category_entity_int.entity_id left join cataloginventory_stock_item on cataloginventory_stock_item.product_id = catalog_category_product.product_id set catalog_category_entity_int.value = 1 where catalog_category_entity_int.store_id = 0 and cataloginventory_stock_item.qty > 0 and catalog_category_entity_int.attribute_id = (select attribute_id from eav_attribute where attribute_code = 'include_in_menu') or cataloginventory_stock_item.qty > 0 and catalog_category_entity_int.attribute_id = (select attribute_id from eav_attribute where attribute_code = 'is_active');
某处的扩展名尚未针对较新的magento更新,有人在https://magento.stackexchange.com/questions/36/hide-categories-with-no-active-products
处遇到了与此stackexchange有关的问题两行很简单,甚至可以做成一个过程。
这绝不是最终的解决方案,但应该把工作做好,直到将这种东西内置到内核中为止……不必为这种简单的事情编写扩展代码... < / p>