groupe Magento upsell produits par catégorie
-
22-10-2019 - |
Question
Je suis un débutant à magento, par défaut en utilisant $this->getItemCollection()->getItems()
(upsell.phtml) affichant tout la vente de produits.
Je me demande comment regrouper ces résultats par sa catégorie.
Exemple, j'ai 4 produits en vente de,
3 Products from category A,
1 Product from category B
Le point de vue que je dois écran comme celui-ci,
Category A,
Product 1 | product 2 | Product 3
Category B,
Product 4
Jusqu'à présent, a créé un module, la structure de ci-dessous,
local
Fugen
Accessories
etc
config.php
Model
Observer.php
Mon Module est config.xml
<?xml version="1.0"?>
<config>
<modules>
<Fugen_Accessories>
<version>1.0</version>
</Fugen_Accessories>
</modules>
<frontend>
<events>
<catalog_product_upsell>
<observers>
<Fugen_Accessories>
<class>Fugen_Accessories/observer</class>
<method>updateUpsells</method>
</Fugen_Accessories>
</observers>
</catalog_product_upsell>
</events>
</frontend>
</config>
Mon Observer.php
class Fugen_Accessories
{
public function __construct()
{
// leave empty
}
public function updateUpsells(Varien_Event_Observer $oObserver)
{
$iCurrentCategory = Mage::registry('current_category')->getId();
$oUpsellCollection = $oObserver->getCollection();
foreach ($oUpsellCollection->getItems() as $key => $oUpsellProduct) {
$aCategoriesIds = $oUpsellProduct->getCategoryIds();
if (!in_array($iCurrentCategory, $aCategoriesIds)) {
$oUpsellCollection->removeItemByKey($key);
}
}
}
}
La solution
Jetez un coup d'oeil dans Mage_Catalog_Block_Product_List_Upsell::_prepareData()
.
Il jette l'événement avec la collecte des produits de vente incitative.
Mage::dispatchEvent('catalog_product_upsell', array(
'product' => $product,
'collection' => $this->_itemCollection,
'limit' => $this->getItemLimit()
));
Nous pouvons créer observateur, joindre à l'événement et le changement de catalog_product_upsell
upsell collection de produits que nous souhaitons.
<?xml version="1.0"?>
<config>
<modules>
<Fugen_Accessories>
<version>1.0</version>
</Fugen_Accessories>
</modules>
<global>
<models>
<fugen_accessories>
<class>Fugen_Accessories_Model</class>
</fugen_accessories>
</models>
</global>
<frontend>
<events>
<catalog_product_upsell>
<observers>
<fugen_accessories>
<class>fugen_accessories/observer</class>
<method>updateUpsells</method>
</fugen_accessories>
</observers>
</catalog_product_upsell>
</events>
</frontend>
</config>
observateur méthode create
class Fugen_Accessories_Model_Observer
{
public function updateUpsells(Varien_Event_Observer $oObserver)
{
$iCurrentCategory = Mage::registry('current_category')->getId();
$oUpsellCollection = $oObserver->getCollection();
foreach ($oUpsellCollection->getItems() as $key => $oUpsellProduct) {
$aCategoriesIds = $oUpsellProduct->getCategoryIds();
if (!in_array($iCurrentCategory, $aCategoriesIds)) {
$oUpsellCollection->removeItemByKey($key);
}
}
}
}
Aussi ne pas oublier d'ajouter le module initialisation config dans app/etc/modules
Fugen_Accessories.xml
<?xml version="1.0"?>
<config>
<modules>
<Fugen_Accessories>
<active>true</active>
<codePool>local</codePool>
<depends>
<Mage_Catalog/>
</depends>
</Fugen_Accessories>
</modules>
</config>
Faites attention solution n'a pas été testé.