カタログ価格ルールの有効期限を取得する方法は?


7

カタログページで、「N日で期限切れ」というオファーを表示する必要があります。たとえば、各製品が特別価格と日付を個別に定義している場合は簡単に達成できます$this->getProduct()->getSpecialToDate();が、カタログ価格ルールを介して割引を設定した場合、製品には現在適用されている割引やその他の関連データに関する情報がありません。

日付のように使用されている現在の製品割引ルールに関する情報を入手するにはどうすればよいですか。

回答:


2

私はこれを試していませんが、可能だと思います。正確なコードはありませんが、本当に必要な場合は、空き時間があるときに後で提供することができます。このアプローチは非常に簡単です。

製品と顧客グループごとの割引catalogrule_productを格納するというテーブルがありCatalog Price Rulesます。に変更を加えるたびに、このテーブルにインデックスを付ける必要があることに注意してくださいCatalog Price Rules。これを行うには、インデクサーを使用するか、このページの[ルールを適用]をクリックします(多くの製品を使用している場合、これには時間がかかる場合があります)。

カタログ(または任意の)ページにある特定の製品について、entity_idそれを取得して調べますcatalogrule_product.product_id。必ず確認してくださいcustomer_group_id。探している行が見つかると、この行にはタイムスタンプ(秒単位)がfrom_timeありto_time、指定された適用ルール(rule_id)があります。

ルールについてさらに情報が必要な場合は、それrow_idを入手して調べてくださいcatalogrule。あなたが見つけたエントリーにはとcatalogrulefrom_dateありto_date、それらはあなたが望むものを計算するために必要なすべてです。


1
このアプローチは良いと思いますが、注意してください。同じ製品に2つのルールがある場合はどうなるでしょうか。列sort_orderがありますが、計算されますが、多分それは役に立ちますか?
Fabian Blechschmidt 2014年

特定の製品に複数のルールが適用される可能性がありますが、Magentoは特定の製品に適用されるルールのみにインデックスを付ける場合があります。私はこれをテストしていません。OPはおそらくいくつかのテストシナリオを実行できますか?
musicliftsme 2014年

0

これがこの場合に私のために働いたコードです...

物事をソートするための1つの関数を作成しました。

function getCatalogSalePrice($_product)
{
 $productId = $_product->getId();
 $storeId = $_product->getStoreId();
 $websiteId = Mage::app()->getStore($storeId)->getWebsiteId();
 $timeStamp = Mage::app()->getLocale()->storeTimeStamp($storeId);
 $customerGroupId = 1;

 $resource = Mage::getResourceModel('catalogrule/rule');
 $rules = $resource->getRulesFromProduct($timeStamp, $websiteId, $customerGroupId, $productId);
 foreach($rules as $ruleval)
 {
  $catalogRuleID = $ruleval['rule_id']; //If more than one rule
  if($catalogRuleID)
  {
   $catalogRulObj = Mage::getModel('catalogrule/rule')->load($catalogRuleID);
   $conditions_serialized = unserialize($catalogRulObj->getConditionsSerialized());
   $actions_serialized = unserialize($catalogRulObj->getActionsSerialized());
   $ruleToDate = $catalogRulObj->getToDate();
  }
 }
 $now = time(); // or your date as well
 $saleEndDate = strtotime($ruleToDate);
 $datediff = $now - $saleEndDate;
 $datediff = floor($datediff / (60 * 60 * 24));

 if($datediff <= 0)
 {
  if($datediff < 0) {
   $message = abs($datediff). " Days Left";
  }
  else
  {
  $message = "Few Hours Left";
  }
 } 
 return $message;   
}

うまくいけば乾杯。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.