Basicamente, criei uma categoria 'Produtos à venda', que gostaria de conter automaticamente todos os produtos no meu catálogo que tiveram um preço especial aplicado a eles (via Catálogo> Gerenciar produtos). Gostaria que a página retivesse os recursos de navegação e classificação em camadas que uma página padrão da categoria Magento contém.
Parece que isso é algo que seria valioso para a maioria dos usuários do Magento, e estou surpreso por não estar incluído como parte da funcionalidade principal.
Eu tentei mais de uma dúzia de respostas do Stack Exchange, postagens de blog e fóruns, e nada funcionou até agora. Alguém tem uma solução programática para isso?
=== EDIT ===
Com base na crítica do @ pspahn nos comentários abaixo, decidi seguir um método alternativo para obter funcionalidades semelhantes. Dito isto, se você estiver interessado em seguir essa linha, o @ sander-mangel descreve um método que parece totalmente viável.
fonte
Respostas:
A maneira mais fácil de fazer isso é criar uma extensão personalizada que funcione com um Observer e um Cronjob.
Crie uma categoria para os produtos de venda. Dessa forma, você pode usar as funcionalidades normais do Magento no frontend, como navegação em camadas, etc.
Para obter os produtos nessa categoria automaticamente, usaremos o observador e o cronjob. O observador observará o
catalog_product_save_after
evento que é acionado quando um produto é salvo no back-end. Quando isso acontece, você pode verificar ospecial_price
,special_price_from
data especial_date_to
data para determinar se você precisa colocar o produto na categoria de vendas ou removê-lo de lá.O cronjob está lá para as datas especiais de e para. Todas as noites após a meia-noite, esvazie primeiro a categoria de vendas de todos os produtos. Em seguida, use uma coleção para recuperar todos os produtos que têm um preço especial e se enquadram no especial desde e até a data. Nesse caso, mova-os para esta categoria de vendas.
fonte
A solução oferecida pela @SanderMangel é de primeira qualidade. Posso ajudar a expandir isso com algum código, que atualmente uso no meu módulo Produtos de categoria automatizada / dinâmica - que tem a capacidade de executar regras de categoria de produtos em especial
O código ajusta uma coleção de produtos padrão para obter todos os produtos com preço especial definido, no dia em que o código é executado. Você pode usar isso no cron para preencher novamente as categorias às 00:00 e verifique se elas permanecem atualizadas.
Observe que o código é extraído de um módulo maior, portanto eu compactuei as partes relevantes aqui para você. Pode haver uma variável ou duas que não esteja representada nesse extrato, mas seria fácil deduzir ou simplesmente perguntar :)
O objeto $ category é a categoria real que deve conter os produtos. O código abaixo também permitirá que você especifique o desconto em um valor em% :)
Agora, observe que a coleção não retornará produtos, pois contém links para as tabelas de links de produtos do catálogo normal <->. Como você não está interessado nos produtos vinculados atuais, é necessário limpar a relação da tabela da coleção.
Eu uso o seguinte código para fazer isso:
como um bônus adicional, você pode usar a mesma técnica para ajustar a coleção de produtos do catálogo e encontrar produtos que estão em modo especial devido às regras do catálogo:
Depois de ter a coleção de trabalho, tudo o que você precisa fazer é obter todos os IDs da coleção, inverter a matriz e usar
$category->setPostedProducts($products);
e $ category-> save () l; para concluir a atualização.Para completar, eis o meu cron diário que mantém as categorias dinâmicas atualizadas. (mais uma vez, refere-se a métodos não incluídos aqui, mas tenho certeza de que o levará na direção certa
Diverta-se :)
ref: http://www.proxiblue.com.au/magento-dynamic-category-products.html
fonte
Aqui está a coleção que deve fornecer o conjunto de resultados de todos os produtos com preços especiais em seu catálogo, que você pode exibir em uma página
Existem várias maneiras de fazer isso: criar um novo módulo com seu próprio controlador, bloco e modelo muito semelhante ao módulo de categoria Mage ou substituir o módulo de categoria Mage para executar apenas a coleção acima quando a categoria especial for selecionada pelo cliente. Isso pode ser facilmente configurado no sistema -> configuração do seu módulo.
Se você pode gastar alguns quid, então eu recomendaria a seguinte extensão no Magento connect
Para Magento 1 -:
http://www.magentocommerce.com/magento-connect/dynamic-sale-category.html ( http://www.scommerce-mage.co.uk/magento-dynamic-sale-category.html )
Para Magento 2 -:
https://www.scommerce-mage.com/magento2-dynamic-sale-category.html
Espero que ajude!
Cheers S
fonte
Criei uma extensão para o Magento 2, que exibe produtos especiais sob seu próprio controlador com navegação em camadas. Portanto, não há necessidade de categoria ou cron.
https://github.com/DominicWatts/Special
Espero que isso ajude alguém
fonte