Правила цен на каталог против специальной цены
-
16-10-2019 - |
Вопрос
Я обнаружил, что у 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()
Для некоторых идей на коде для этого для этого.