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?

Était-ce utile?

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à magento.stackexchange
scroll top