Вопрос

Я обнаружил, что у Magento есть два отдельных способа обработки специальных цен, но я не знаю, что лучше для моего случая. Я обнаружил, что правила цены в каталоге очень мощные, но я не знаю, как пройти через них, не жестко кодируя идентификатор правила.

Моему клиенту нужно иметь два вида специальных цен: обычные скидки (скидка 20-30% от некоторых продуктов) и «флэш-продажи», которые длится короткое время (1-2 дня). Мне нужно, чтобы они появились на домашней странице и на страницах категории, те, которые в доме должны быть выбраны администратором из бэкэнда, а те, которые на страницах категории тоже будут установлены из 4 продуктов на каждом Страница (те, которые на страницах категории должны быть из указанной категории). Тогда у меня есть ссылка на страницу со всеми продуктами, которые имеют специальные цены на них.

«Выбор» часть сделки, которую я действительно не знаю, как сделать, но до сих пор я даже не могу получить продукты с правилом цены каталога, чтобы отображаться на моей домашней странице. У меня есть блок для них, и я нашел этот код:

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

Но я предполагаю ->load(1); Является ли жесткий кодирование идентификатора промо, что, если пользователь создает новое правило цены? Как мне пройти через все продукты, которые имеют правило в них?

Я знаю, как пройти через продукты специальных цен, и, возможно, я мог бы использовать их для промо -акций Flash, но я думаю, что усложню их с остальными функциями, которые мне нужно реализовать.

Кроме того, если у вас есть какие -либо советы о том, как справиться с тем фактом, что пользователю нужно выбрать 4 избранных продукта, я был бы очень благодарен.

Это было полезно?

Решение

Возможно, рассмотрите следующую настройку:

Применение нормальных скидок (скидка 20-30% от некоторых продуктов)
Либо делайте это вручную на каждом продукте, либо создайте категорию, называемую «товары продажи», и под этой подкатегорией для каждой скидки, например, «20 процентов», «30 процентов» и т. Д. Вы можете использовать правила цены каталога на каждом из них Категории, чтобы получить желаемые скидки.

Flash Sales
Опять же, создайте категорию для продажи Flash, а затем создайте в этой категории продукты дисконтирования ценой каталога в этой категории. Вы можете установить дату «до» и «от» на это правило цены.

Показ продажи продукции на домашней странице
Чтобы показать продукты, которые имеют специальную цену, применяемую к ним, я обычно создаю новый блок под названием Namespace_Module_Block_Product_List_Special (Special.php). Он должен расширить Mage_Catalog_Block_Product_List. Анкет Затем вы можете перезаписать _getProductCollection(). Анкет Вот весь файл блока:

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

}

Чтобы использовать его, вам нужно добавить это в свой config.xml под <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>

А затем покажите его на домашней странице, как:

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

Или через макет XML:

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

Вы можете использовать тот же метод для отображения специальных продуктов в каждой категории, но это потребует изменения в _getProductCollection() Метод, который проверяет текущую категорию. Посмотри на Mage_Catalog_Block_Product_list::_getProductCollection() Для некоторых идей на коде для этого для этого.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top