Question

J'ai trouvé que magento a deux façons distinctes de la manipulation des prix spéciaux, mais je ne sais pas qui est le meilleur pour mon cas. J'ai constaté que les règles de prix de catalogue sont très puissants mais je ne sais pas comment faire une boucle à travers eux sans hardcoding l'ID de la règle.

Mon client a besoin d'avoir deux types de prix spéciaux: réductions normales (20-30% de rabais sur certains produits) et « ventes flash » qui durent un peu de temps (1-2 jours). Je dois les faire apparaître dans la page d'accueil et dans les pages de catégorie, ceux de la nécessité de la maison à choisir par l'administrateur du serveur et celles dans les pages de catégorie aussi, ils seront ensemble de 4 produits sur chaque page (ceux dans les pages de catégorie doivent être de ladite catégorie). Ensuite, j'ai un lien vers une page avec tous les produits qui ont des prix spéciaux sur eux.

La « sélection » une partie de l'affaire, je ne sais vraiment pas comment faire, mais jusqu'à présent, je ne peux pas même les produits avec une règle de prix catalogue pour afficher sur ma page d'accueil. J'ai un bloc pour eux et je trouve ce code:

$rule = Mage::getModel('catalogrule/rule')->load(1);   
$rule->setWebsiteIds("1"); $productIdsArray = $rule->getMatchingProductIds(); 
$productsCollection = Mage::getModel('catalog/product')->getCollection() ->addAttributeToSelect("*") ->addAttributeToFilter("entity_id", array("in", $productIdsArray)); 
$this->setProductCollection($collection); 

Mais je devine la ->load(1); est hardcoding l'ID de la promo, si l'utilisateur crée une nouvelle règle de prix alors? Comment faire boucle je tout à travers tous les produits qui ont une règle en eux?

Je ne sais comment faire une boucle à travers des produits de prix spéciaux et peut-être que je pourrais les utiliser pour les promos flash mais je pense que je vais compliquer avec le reste des caractéristiques que je dois mettre en œuvre.

Aussi, si vous avez des conseils sur la façon de gérer le fait que les besoins des utilisateurs pour sélectionner les 4 produits en vedette, je serais très reconnaissant.

Était-ce utile?

La solution

Peut-être considérer la configuration suivante:

Application des remises normales (20-30% de rabais sur certains produits) Soit le faire manuellement sur chaque produit ou créer une catégorie appelée « Articles de vente » et sous cette sous-catégorie pour chaque tranche d'escompte, par exemple « 20 pour cent », « 30 pour cent », etc. Vous pouvez utiliser des règles de prix de catalogue sur chacun de ces catégories pour obtenir les réductions souhaitées.

Ventes Flash Encore une fois, créer une catégorie pour la vente flash, puis créer une règle de produits actualisation prix catalogue dans cette catégorie. Vous pouvez définir un « à » et « de » date à cette règle de prix.

Affichage vente des produits sur la page d'accueil Pour afficher les produits qui ont un prix spécial appliqué à eux, je crée habituellement un nouveau bloc appelé Namespace_Module_Block_Product_List_Special (Special.php). Il a besoin d'étendre Mage_Catalog_Block_Product_List. Vous pouvez ensuite remplacer le _getProductCollection(). Voici l'ensemble du fichier bloc:

<?php
class Namespace_Module_Block_Product_List_Special extends Mage_Catalog_Block_Product_List
{

    //default item limit
    protected $_defaultItemLimit = 4;


    public function _construct() {
        parent::_construct();
    }

    /**
     * Retrieve product collection
     *
     * @return Mage_Eav_Model_Entity_Collection_Abstract
     */
    protected function _getProductCollection()
    {

        $todayStartOfDayDate  = Mage::app()->getLocale()->date()
            ->setTime('00:00:00')
            ->toString(Varien_Date::DATETIME_INTERNAL_FORMAT);

        $todayEndOfDayDate  = Mage::app()->getLocale()->date()
            ->setTime('23:59:59')
            ->toString(Varien_Date::DATETIME_INTERNAL_FORMAT);


        $collection = Mage::getResourceModel('catalog/product_collection');
        $collection->setVisibility(Mage::getSingleton('catalog/product_visibility')->getVisibleInCatalogIds());
        $collection = $this->_addProductAttributesAndPrices($collection)
            ->addStoreFilter()
            ->addAttributeToFilter('special_from_date', array('date' => true, 'to' => $todayStartOfDayDate))
            ->addAttributeToFilter('special_to_date', array('or'=> array(
                0 => array('date' => true, 'from' => $todayStartOfDayDate),
                1 => array('is' => new Zend_Db_Expr('null')))
            ), 'left')
            ->addAttributeToSort('special_from_date', 'desc')
        ;


        $itemLimit = $this->getItemLimit();
        $collection->setPageSize($itemLimit);
        return $collection;
    }

    public function getItemLimit() {

        if($this->hasData('item_limit')) {
            return $this->getData('item_limit');
        }

        return $this->_defaultItemLimit;
    }

}

Pour l'utiliser, vous devez ajouter à votre config.xml sous la balise <global>:

    <blocks>
        <modulename>
            <class>Namespace_Module_Block</class>
        </modulename>
        <catalog>
            <rewrite>
                <product_list_special>Namespace_Module_Block_Product_List_Special</product_list_special>
            </rewrite>
        </catalog>
    </blocks>

Et puis l'afficher sur la page d'accueil comme ceci:

{{block type="catalog/product_list_special" name="homepage.products.special" template="catalog/product/list.phtml"}}

Ou via XML de mise en page:

<block type="catalog/product_list_special" name="hometabs.products.special" template="catalog/product/list.phtml"/>

Vous pouvez utiliser la même méthode pour afficher les produits spéciaux dans chaque catégorie, mais cela nécessiterait une modification de la méthode _getProductCollection() qui vérifie la catégorie actuelle. Jetez un oeil à Mage_Catalog_Block_Product_list::_getProductCollection() pour quelques idées sur le code à utiliser pour cela.

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