Frage

Ich habe festgestellt, dass Magento zwei getrennte Möglichkeiten zur Behandlung von Sonderpreisen hat, aber ich weiß nicht, was für meinen Fall das Beste ist. Ich fand heraus, dass Katalogpreisregeln sehr leistungsfähig sind, aber ich weiß nicht, wie ich sie durchschlägen kann, ohne die ID der Regel festzuhalten.

Mein Kunde muss über zwei Arten von Sonderpreisen verfügen: normale Rabatte (20-30% Rabatt auf einige Produkte) und "Flash-Verkäufe", die eine kurze Zeit (1-2 Tage) dauern. Ich muss sie auf der Homepage und auf den Kategorienseiten angezeigt werden, die von dem Administrator aus dem Backend ausgewählt werden müssen, und die auf den Kategorienseiten sind auch 4 Produkte auf jeweils festgelegt. Seite (die auf den Kategorienseiten müssen aus der Kategorie stammen). Dann habe ich einen Link zu einer Seite mit allen Produkten, die spezielle Preise haben.

Der Teil des Deals "Auswählen" Ich weiß wirklich nicht, wie ich es tun soll, aber bisher kann ich die Produkte nicht einmal mit einer Katalogpreisregel auf meiner Startseite erhalten. Ich habe einen Block für sie und habe diesen Code gefunden:

$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); 

Aber ich vermute das ->load(1); Ist die ID der Promo hartcodiert, was ist, wenn der Benutzer dann eine neue Preisregel erstellt? Wie schaue ich alle Produkte durch, die eine Regel in ihnen haben?

Ich weiß, wie man Sonderpreisprodukte durchschlägt, und vielleicht könnte ich sie für die Flash -Promos verwenden, aber ich denke, ich werde es mit den restlichen Funktionen, die ich implementieren muss, komplizieren.

Auch wenn Sie Ratschläge haben, wie Sie mit der Tatsache umgehen können, dass der Benutzer die 4 vorgestellten Produkte auswählen muss, wäre ich sehr dankbar.

War es hilfreich?

Lösung

Betrachten Sie vielleicht das folgende Setup:

Normale Rabatte anwenden (20-30% auf einige Produkte)
Tun Sie dies entweder manuell in jedem Produkt oder erstellen Sie eine Kategorie namens "Verkaufsartikel" und unter dieser Unterkategorie für jede Rabatthalterung, z. B. "20 Prozent", "30 Prozent" usw. Sie können dann für jede dieser Kategorien, um die gewünschten Rabatte zu erhalten.

Blitzverkäufe
Erstellen Sie erneut eine Kategorie für den Flash -Verkauf und erstellen Sie dann eine Katalogpreisregel in dieser Kategorie. Sie können ein Datum "zu" und "ab" von dieser Preisregel festlegen.

Verkaufsprodukte auf der Homepage zeigen
Um Produkte zu zeigen, bei denen ein Sonderpreis angewendet wird, erstelle ich normalerweise einen neuen Block namens Namespace_Module_Block_Product_List_Special (Special.php). Es muss sich erstrecken Mage_Catalog_Block_Product_List. Sie können dann das überschreiben _getProductCollection(). Hier ist die gesamte Blockdatei:

<?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;
    }

}

Um es zu verwenden, müssen Sie dies zu Ihrem hinzufügen config.xml unter dem <global> Schild:

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

Und dann auf der Homepage wie so anzeigen:

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

Oder über Layout XML:

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

Sie könnten dieselbe Methode verwenden, um die speziellen Produkte in jeder Kategorie anzuzeigen, aber dies erfordert eine Änderung des _getProductCollection() Methode, die für die aktuelle Kategorie prüft. Sich ansehen Mage_Catalog_Block_Product_list::_getProductCollection() Für einige Ideen auf dem Code, die dafür verwendet werden können.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit magento.stackexchange
scroll top