【问题标题】:Magento: Stop coupon code automatically applyingMagento:停止自动应用优惠券代码
【发布时间】:2014-03-25 11:15:09
【问题描述】:

我制作了一个我正在测试的小模块,它以编程方式根据默认优惠券创建优惠券代码,为客户提供总购物车 5% 的折扣。

优惠券仅供一位客户使用一次。优惠券生成良好,在促销>购物车价格规则下可见,并且规则名称与优惠券代码相同。

我遇到的问题是我希望它创建优惠券但不将其应用于购物篮,直到客户在前端的 折扣代码 字段中输入优惠券代码,而是当我将产品添加到购物篮时,优惠券会应用折扣。

我的问题是如何阻止它自动添加优惠券。

如果有更好的方式以编程方式创建优惠券代码和规则,我想知道。

如果重要的话,我的代码如下:

public function createCoupon() {

    // Get the rule in question
    $rule = Mage::getModel('salesrule/rule')->load(1); //1 = ID of coupon in question

    // Define a coupon code generator model instance
    // Look at Mage_SalesRule_Model_Coupon_Massgenerator for options
    $generator = Mage::getModel('salesrule/coupon_massgenerator');

    $parameters = array(
        'count'=> 1,
        'format'=> 'alphanumeric',
        'dash_every_x_characters'=> 4,
        'prefix'=> 'XXX-',
        'suffix'=> '-CODE5',
        'length'=> 8
    );

    if( !empty($parameters['format']) ) {
        switch( strtolower($parameters['format']) ) {
            case 'alphanumeric':
            case 'alphanum':
                $generator->setFormat( Mage_SalesRule_Helper_Coupon::COUPON_FORMAT_ALPHANUMERIC );
                break;
            case 'alphabetical':
            case 'alpha':
                $generator->setFormat( Mage_SalesRule_Helper_Coupon::COUPON_FORMAT_ALPHABETICAL );
                break;
            case 'numeric':
            case 'num':
                $generator->setFormat( Mage_SalesRule_Helper_Coupon::COUPON_FORMAT_NUMERIC );
                break;
        }
    }

    $generator->setDash( !empty($parameters['dash_every_x_characters'])? (int) $parameters['dash_every_x_characters'] : 0);
    $generator->setLength( !empty($parameters['length']) ? (int) $parameters['length'] : 6);
    $generator->setPrefix( !empty($parameters['prefix']) ? $parameters['prefix'] : '');
    $generator->setSuffix( !empty($parameters['suffix']) ? $parameters['suffix'] : '');

    // Set the generator, and coupon type so it's able to generate
    $rule->setCouponCodeGenerator($generator);
    $rule->setCouponType( Mage_SalesRule_Model_Rule::COUPON_TYPE_AUTO );

    // Get as many coupons as you required
    $count = !empty($parameters['count'])? (int) $parameters['count'] : 1;
    $codes = array();

    for( $i = 0; $i < $count; $i++ ) {
        $coupon = $rule->acquireCoupon();
        $code = $coupon->getCode();
        $codes[] = $code;
    }

    return $codes[0];
}

public function createCouponForLike($couponCode) {
    $model = Mage::getModel('salesrule/rule');

    $model->setName($couponCode);
    $model->setDescription('Discount coupon for liking us on Facebook.');
    $model->setFromDate(date('Y-m-d'));
    $model->setCouponCode($couponCode);
    $model->setUsesPerCoupon(1);
    $model->setUsesPerCustomer(1);
    $model->setCustomerGroupIds('0,1');
    $model->setIsActive(1);
    $model->setConditionsSerialized('a:6:{s:4:"type";s:32:"salesrule/rule_condition_combine";s:9:"attribute";N;s:8:"operator";N;s:5:"value";s:1:"1";s:18:"is_value_processed";N;s:10:"aggregator";s:3:"all";}');
    $model->setActionsSerialized('a:6:{s:4:"type";s:40:"salesrule/rule_condition_product_combine";s:9:"attribute";N;s:8:"operator";N;s:5:"value";s:1:"1";s:18:"is_value_processed";N;s:10:"aggregator";s:3:"all";}');
    $model->setStopRulesProcessing(0);
    $model->setIsAdvanced(1);
    $model->setProductIds('');
    $model->setSortOrder(1);
    $model->setSimpleAction('by_percent');
    $model->setDiscountAmount(5);
    $model->setDiscountStep(0);
    $model->setSimpleFreeShipping(0);
    $model->setTimesUsed(0);
    $model->setIsRss(0);
    $model->setWebsiteIds('1');

    $model->save();
} 

【问题讨论】:

  • 记得添加一项清理旧旧物品的工作,否则您最终会遇到大量购物车价格规则,这可能会降低添加到购物车操作的速度。

标签: magento coupon


【解决方案1】:

我猜你需要为优惠券类型添加一个设置,试试这个:

// The value can be 1 or 2
// If the value is set to 1 the rule will apply without the need of a coupon
$model->setCouponType(2);

有关更多信息,请参阅本指南,实际上那里有很多教程: http://www.demacmedia.com/magento-commerce/mini-tutorial-creating-shopping-cart-rules-programatically/

编辑 很晚才注意到,您已经使用此常量在某一点设置了它:

Mage_SalesRule_Model_Rule::COUPON_TYPE_AUTO

问题可能是我能找到的唯一提及 COUPON_TYPE_AUTO 说它设置为 3,而您可能希望它设置为 2。

【讨论】:

  • 感谢您的回答,但仍然无法更改该行代码。该教程看起来不错,如果我可以让它工作,我会接受这个答案
  • 你给我的那个例子中的函数做了我想要的。现在只需要找到一种以编程方式生成代码的方法
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-08-26
  • 1970-01-01
  • 2016-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多