Comment les actions de SalesRules évaluer les valeurs de la catégorie?
-
16-10-2019 - |
Question
J'ai brièvement fait un pas par quelques-uns des scénarios de SalesRule et le code, et il semble que tout ce qui touche à la catégorie params est ignorée. D'une part, cela est logique, comme éléments de citation ont aucune notion de catégories. D'autre part, pourquoi est-ce une option?
La solution
Il suffit de garder pas à pas dans. Vous aurez à Mage_SalesRule_Model_Rule_Condition_Product. Et même si nous testons un élément de devis au début nous alors charger le produit et continuer de valider la place du produit associé:
/**
* Validate Product Rule Condition
*
* @param Varien_Object $object
*
* @return bool
*/
public function validate(Varien_Object $object)
{
$product = false;
if ($object->getProduct() instanceof Mage_Catalog_Model_Product) {
$product = $object->getProduct();
} else {
$product = Mage::getModel('catalog/product')
->load($object->getProductId());
}
$product
->setQuoteItemQty($object->getQty())
->setQuoteItemPrice($object->getPrice()) // possible bug: need to use $object->getBasePrice()
->setQuoteItemRowTotal($object->getBaseRowTotal());
return parent::validate($product);
}
Et puis où la validation a lieu, il y a une manipulation particulière de l'affaire de category_ids dans Mage_Rule_Model_Condition_Product_Abstract
public function validate(Varien_Object $object)
{
$attrCode = $this->getAttribute();
if ('category_ids' == $attrCode) {
return $this->validateAttribute($object->getAvailableInCategories());
Quant à savoir pourquoi -. Il est plus commode pour sélectionner une catégorie que d'avoir à sélectionner chaque individu sku