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);
            }
        }
    }
}
Était-ce utile?

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é.

Licencié sous: CC-BY-SA avec attribution
Non affilié à magento.stackexchange
scroll top