Existe uma maneira de ocultar categorias que não têm produtos ativos? Ou, melhor ainda, mostre apenas as categorias que possuem produtos e estoque ativos .
Lembre-se de que o método verifica cada categoria individualmente usando o modelo de catálogo / categoria. Portanto, se você tiver muitas categorias, poderá reescrever o código para não ter problemas de desempenho. Em uma loja menor que estamos executando, isso funciona bem.
É possível colocar isso em uma extensão que pode ser inserida na pasta local? Preocupado com a substituição do código em futuras atualizações do Magento.
MagentoMac
10
Não há recurso interno para ocultar categorias vazias (mas você pode selecionar manualmente Está ativo = Não para cada categoria na área de administração-> catálogo-> gerenciar categorias)
Parece bom, mas por qualquer motivo não esteja funcionando em nossa loja ... alguma idéia de como depurar? Não está recebendo nenhuma mensagem de erro. Siga as instruções para um tee, mas nenhuma alteração no frontend. Já desativada, compilador reativado, e limpou o cache etc.
MagentoMac
4
Se você apenas deseja ocultá-los na navegação do catálogo, adicione uma condição if no modelo para verificar a quantidade de produtos nessa categoria.
Você pode executar o seguinte sql para desativar todas as categorias sem produtos.
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
o que fiz para ocultar categorias vazias é reescrever a Mage_Catalog_Model_Resource_Category_Treeload()função. Tenho que ingressar na coleção de produtos com a coleção de categorias, como abaixo.
Adicionei o campo extra product_count, que contém a contagem real de produtos ativos.
Estou usando um módulo de terceiros para exibir a categoria no menu superior e coloquei as condições com base na contagem de produtos quando o menu é renderizado.
Respostas:
A maneira mais fácil de fazer isso é reescrever o
Mage_Catalog_Block_Navigation
bloco:=> No método que
_renderCategoryMenuItemHtml()
você deseja substituir o loop=> com isso:
=> e da mesma forma no método
renderCategoriesMenuHtml()
substitua o código=> com isso:
=> Por fim, adicione o método que estávamos usando em nosso código:
Lembre-se de que o método verifica cada categoria individualmente usando o modelo de catálogo / categoria. Portanto, se você tiver muitas categorias, poderá reescrever o código para não ter problemas de desempenho. Em uma loja menor que estamos executando, isso funciona bem.
fonte
Não há recurso interno para ocultar categorias vazias (mas você pode selecionar manualmente Está ativo = Não para cada categoria na área de administração-> catálogo-> gerenciar categorias)
Aqui está um link em um ótimo post do blog de Josh Prattski , onde ele escreveu passo a passo sobre como fazer uma extensão para esse fim.
fonte
Se você apenas deseja ocultá-los na navegação do catálogo, adicione uma condição if no modelo para verificar a quantidade de produtos nessa categoria.
fonte
Talvez isso ajude também.
Vá para o back-end da sua loja virtual.
O rótulo
Display Mode
pode ser definido comofonte
Para ocultar uma categoria vazia no menu Superior, faça o seguinte:
fonte
O que funcionou para mim é criar uma árvore de categorias de modelo e implementar uma função de condição que renderiza a árvore de categorias:
fonte
Você pode executar o seguinte sql para desativar todas as categorias sem produtos.
Mais detalhes você pode encontrar aqui http://quicktips.ru/all/hide-all-categories-without-products-and-show-categories-with-pr/
fonte
o que fiz para ocultar categorias vazias é reescrever a
Mage_Catalog_Model_Resource_Category_Tree
load()
função. Tenho que ingressar na coleção de produtos com a coleção de categorias, como abaixo.adicione este código antes
$arrNodes = $this->_conn->fetchAll($select);
desta linha.E envolva esse código com essa condição, essa classe chamada de modelo front-end e back-end também
Adicionei o campo extra product_count, que contém a contagem real de produtos ativos.
Estou usando um módulo de terceiros para exibir a categoria no menu superior e coloquei as condições com base na contagem de produtos quando o menu é renderizado.
fonte