カタログ価格ルールと特別価格
-
16-10-2019 - |
質問
Magentoには特別な価格を処理する2つの別々の方法があることがわかりましたが、どちらが私のケースに最適かはわかりません。カタログ価格ルールは非常に強力であることがわかりましたが、ルールのIDをハードコードせずにそれらをループする方法がわかりません。
私のクライアントには、通常の割引(一部の製品の20〜30%オフ)と短い時間(1〜2日)の「フラッシュ販売」という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);
ハードコードはプロモーションのIDですが、ユーザーが新しい価格ルールを作成した場合はどうなりますか?ルールがあるすべての製品をすべてループするにはどうすればよいですか?
私は特別な価格製品をループする方法を知っています、そして多分私はそれらをフラッシュプロモーションに使用することができるかもしれませんが、私は私が実装する必要がある残りの機能にそれを複雑にすると思います。
また、ユーザーが4つの注目製品を選択する必要があるという事実を処理する方法についてアドバイスがある場合は、非常に感謝しています。
解決
おそらく次のセットアップを考慮してください。
通常の割引を適用します(一部の製品の20〜30%オフ)
各製品でこれを手動で行うか、「販売アイテム」と呼ばれるカテゴリを作成し、その下で各割引ブラケットのサブカテゴリ、「20パーセント」、「30パーセント」などを作成します。これらのそれぞれでカタログ価格ルールを使用できます。目的の割引を取得するためのカテゴリ。
フラッシュ販売
繰り返しますが、Flash Saleのカテゴリを作成し、このカテゴリで製品を割引するカタログ価格ルールを作成します。この価格ルールの「to」と「from」を設定できます。
ホームページで販売製品を表示します
特別価格がそれらに適用されている製品を表示するために、私は通常、呼ばれる新しいブロックを作成します 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()
これに使用するコードに関するいくつかのアイデアについて。