Как программно генерировать правила корзины покупок?


Я пытаюсь динамически сгенерировать правило корзины покупок для конкретного продукта, соответствующего моему артикулу в состоянии. Правило генерируется, но часть условия не настраивается. мой код:

        $data = array(
        'product_ids' => null,
        'name' => sprintf('discount', Mage::getSingleton('customer/session')->getCustomerId()),
        'description' => 'Auto generated',
        'is_active' => 1,
        'website_ids' => array(1),
        'customer_group_ids' => array(1),
        'coupon_type' => 2,
        'coupon_code' => Mage::helper('core')->getRandomString(16),
        'uses_per_coupon' => 1,
        'uses_per_customer' => 1,
        'from_date' => null,
        'to_date' => null,
        'sort_order' => null,
        'is_rss' => 1,
        'rule' => array(
        'conditions' => array(
            array(
            'type' => 'salesrule/rule_condition_product_found',
            'attribute' => 'sku',
            'operator' => '==',
            'value' => 'tp'
            )
        )
        ),
        'simple_action' => 'by_fixed',
        'discount_amount' => 30,
        'discount_qty' => 0,
        'discount_step' => null,
        'apply_to_shipping' => 0,
        'simple_free_shipping' => 0,
         'stop_rules_processing' => 0,
        'rule' => array(
        'actions' => array(
            array(
            'type' => 'salesrule/rule_condition_product_found',
            'attribute' => 'sku',
            'operator' => '==',
            'value' => 'tp'
            )
        )
        ),
        'store_labels' => array('30% Summer discount')
    );
          $model = Mage::getModel('salesrule/rule');
          $data = $this->_filterDates($data, array('from_date', 'to_date'));
          $validateResult = $model->validateData(new Varien_Object($data));
           if ($validateResult == true) {
           if (isset($data['simple_action']) && $data['simple_action'] == 'by_percent'
            && isset($data['discount_amount'])) {
        $data['discount_amount'] = min(100, $data['discount_amount']);
        }
        if (isset($data['rule']['conditions'])) {
        $data['conditions'] = $data['rule']['conditions'];
        }
        if (isset($data['rule']['actions'])) {
        $data['actions'] = $data['rule']['actions'];
        }
        unset($data['rule']);
        $model->loadPost($data);
        $model->save();
    }
Author: Teja Bhagavan Kollepara, 2013-08-13

1 answers

Вот сценарий, который сработал для меня. Основная идея состоит в том, чтобы создать массив, который выглядит точно так же, как массив $_POST при создании правила скидки с использованием интерфейса.
Если это не сработает для вас, попробуйте создать правило скидки в панели администратора и зарегистрировать данные, отправленные через $_POST, затем сравните их с вашими данными и посмотрите различия.

 4
Author: Marius, 2013-08-13 11:48:33