Wie erhalte ich das Ablaufdatum der Katalogpreisregel?

7

Auf der Katalogseite muss ich das Angebot "läuft in N Tagen ab" anzeigen . Dies kann leicht erreicht werden, wenn für jedes Produkt beispielsweise der Sonderpreis und das Datum einzeln definiert wurden. $this->getProduct()->getSpecialToDate();Wenn Sie jedoch den Rabatt über die Katalogpreisregel festlegen, enthält das Produkt keine Informationen zum aktuell angewendeten Rabatt und zu anderen zugehörigen Daten.

Ich wandere, wie kann ich Informationen über aktuelle Produktrabattregeln erhalten, die wie das Datum verwendet werden?

Nazariy
quelle

Antworten:

2

Ich habe das nicht versucht, aber ich glaube, es ist möglich. Ich habe nicht den genauen Code, aber ich kann ihn Ihnen später zur Verfügung stellen, wenn ich mehr Freizeit habe, wenn Sie ihn wirklich brauchen. Dieser Ansatz ist ziemlich einfach.

Es gibt eine Tabelle mit dem Namen catalogrule_product, in der Catalog Price RulesRabatte pro Produkt und Kundengruppe gespeichert sind. Beachten Sie, dass diese Tabelle jedes Mal indiziert werden muss, wenn Sie Änderungen an Ihrer vornehmen Catalog Price Rules. Sie können dies mit dem Indexer tun oder indem Sie auf dieser Seite auf "Regeln anwenden" klicken (dies kann lange dauern, wenn Sie viele Produkte haben).

Holen Sie sich für ein bestimmtes Produkt, das Sie auf einer Katalogseite (oder einer beliebigen anderen Seite) haben, dessen entity_idund schlagen Sie es nach catalogrule_product.product_id. Stellen Sie sicher, dass Sie dies ebenfalls überprüfen customer_group_id. Sobald Sie die gesuchten Zeilen gefunden haben, haben diese Zeilen Zeitstempel (in Sekunden) from_timeund to_timefür die angegebene angewandte Regel ( rule_id).

Holen Sie sich seine row_idund schauen catalogruleSie nach, wenn Sie weitere Informationen zur Regel benötigen. Der Eintrag, den Sie finden, catalogrulehat from_dateund to_date, und das sind alles, was Sie brauchen, um zu berechnen, was Sie wollen.

musicliftsme
quelle
1
Ich denke, dieser Ansatz ist gut, aber seien Sie vorsichtig. Ich denke darüber nach, was passiert, wenn Sie zwei Regeln für dasselbe Produkt haben. Es gibt eine Spalte sort_order, aber sie wird berechnet, vielleicht ist es nützlich?
Fabian Blechschmidt
Es ist möglich, dass für ein bestimmtes Produkt mehr als eine Regel gilt, Magento indiziert jedoch möglicherweise nur die Regel, die für ein bestimmtes Produkt gilt. Ich habe das nicht getestet. OP könnte wahrscheinlich ein paar Testszenarien ausführen?
musicliftsme
0

Hier ist der Code, der in diesem Fall für mich funktioniert hat .....

Erstellt eine Funktion zum Sortieren der Dinge.

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

Prost, wenn es funktioniert.

Nidhishanker Modi
quelle