Magento Установить код скидки для конкретного продукта на лету - PullRequest
0 голосов
/ 28 октября 2010

Заранее спасибо ..

Как и в моем предыдущем вопросе, я установил код скидки на продукт на лету, он работает нормально, но я хочу применить это правило только для конкретного продукта, возможно ли это путем изменения предыдущего кода.

пожалуйста, помогите мне ...

Спасибо, Джитендра

для вашей информации код здесь ....

function generateUniqueId($length = null)
    {
        $rndId = crypt(uniqid(rand(),1));
        $rndId = strip_tags(stripslashes($rndId));
        $rndId = str_replace(array(".", "$"),"",$rndId);
        $rndId = strrev(str_replace("/","",$rndId));
            if (!is_null($rndId)){
            return strtoupper(substr($rndId, 0, $length));
            }
        return strtoupper($rndId);
    }
    /* create unique coupan code */

        $productId  = (int) $this->getRequest()->getParam('id'); 
        $discountprice=$_POST['product']['discountprice']; 
        $model = Mage::getModel('salesrule/rule');
        $couponCode=generateUniqueId(8);
        $model->setName($couponCode);
        $model->setDescription('Discount coupon for Surger.');
        $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($productId);
        $model->setSortOrder('0');
        $model->setSimpleAction('by_percent');
        $model->setDiscountAmount($discountprice);
        $model->setDiscountStep(0);
        $model->setSimpleFreeShipping(0);
        $model->setCouponType(2);
        $model->setCouponCode($couponCode);
        $model->setUsesPerCoupon(1);
        $model->setTimesUsed(0);
        $model->setIsRss(0);
        $model->setWebsiteIds('1');
        $model->save();

Вот идеальный код для применения скидки на конкретный продукт. Я нашел решение. Этот код отлично работает для применения скидки на конкретный продукт.

function generateUniqueId($length = null)
    {
        $rndId = crypt(uniqid(rand(),1));
        $rndId = strip_tags(stripslashes($rndId));
        $rndId = str_replace(array(".", "$"),"",$rndId);
        $rndId = strrev(str_replace("/","",$rndId));
            if (!is_null($rndId)){
            return strtoupper(substr($rndId, 0, $length));
            }
        return strtoupper($rndId);
    }
    /* create unique coupan code */
        $productId  = (int) $this->getRequest()->getParam('id'); 
        $sku=$this->getRequest()->getParam('sku');
        $discountprice=$_POST['product']['discountprice']; 
        $model = Mage::getModel('salesrule/rule');
        $couponCode=generateUniqueId(8);
        $model->setName($couponCode);
        $model->setDescription('Discount coupon for Surger.');
        $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($productId);
        $model->setSortOrder('0');
        $model->setSimpleAction('by_percent');
        $model->setDiscountAmount($discountprice);
        $model->setDiscountStep(0);
        $model->setSimpleFreeShipping(0);
        $model->setCouponType(2);
        $model->setCouponCode($couponCode);
        $model->setUsesPerCoupon(1);
        $model->setTimesUsed(0);
        $model->setIsRss(0);
        $model->setWebsiteIds('1');

         $sku=$_POST['product']['sku'];
        print $sku;
/*$skuCond = Mage::getModel('salesrule/rule_condition_product')
           ->setType('salesrule/rule_condition_product')
           ->setAttribute('sku')
           ->setOperator('==')
           ->setValue($sku);
    print_r($skuCond); exit;       
$found = Mage::getModel('salesrule/rule_condition_product_found')
         ->setType('salesrule/rule_condition_product_found')
         ->setValue(1)           // 1 == FOUND
         ->setAggregator('all'); // match ALL conditions         

$model->loadPost($found);*/

$conditions = array();
$conditions[1] = array(
'type' => 'salesrule/rule_condition_combine',
'aggregator' => 'all',
'value' => 1,
'new_child' => ''
);
$conditions['1--1'] = array
(
'type' => 'salesrule/rule_condition_product_found',//-> means 'if all of the following are true' - same rules as above for 'aggregator' and 'value'
//other values for type: 'salesrule/rule_condition_product_subselect' 'salesrule/rule_condition_combine'
'value' => 1,
'aggregator' => 'all',
'new_child' => '',
);

$conditions['1--1--1'] = array
(
'type' => 'salesrule/rule_condition_product',
'attribute' => 'sku',
'operator' => '==',
'value' => $sku,
);

$model->setData('conditions',$conditions);
$model->loadPost($model->getData());
$model->save();

кто-нибудь знает, как применить эту скидку к одному продукту, что происходит в следующем случае, когда скидка переходит к общей сумме, но я хочу применить эту скидку к тому продукту, для которого я ввел код скидки, любой может помочь мне отделить эта скидка.

пожалуйста, помогите ...

спасибо, Jitendra

Ответы [ 2 ]

2 голосов
/ 28 октября 2010

Из того, что я могу сказать о системе скидок, вам нужно будет сделать следующее перед сохранением правила. Как вы можете видеть, это работает, ища любой продукт корзины с определенной SKU.

$sku = 'ABCD';            // Put your product SKU here
$found = Mage::getModel('salesrule/rule_condition_product_found')
         ->setType('salesrule/rule_condition_product_found')
         ->setValue(1)           // 1 == FOUND
         ->setAggregator('all'); // match ALL conditions
$model->getConditions()->addCondition($found);
$skuCond = Mage::getModel('salesrule/rule_condition_product')
           ->setType('salesrule/rule_condition_product')
           ->setAttribute('sku')
           ->setOperator('==')
           ->setValue($sku);
$found->addCondition($skuCond);
1 голос
/ 30 октября 2010

Это ответ на мой собственный вопрос:

кто-нибудь знает, как применить эту скидку к одному продукту, что происходит в следующем случае, когда скидка переходит к общей сумме, но я хочу применить эту скидку к тому продукту, для которого я ввел код скидки, любой может помочь мне отделить эта скидка. ???

Спасибо, Джитендра Дхоби

 function generateUniqueId($length = null)
        {
            $rndId = crypt(uniqid(rand(),1));
            $rndId = strip_tags(stripslashes($rndId));
            $rndId = str_replace(array(".", "$"),"",$rndId);
            $rndId = strrev(str_replace("/","",$rndId));
                if (!is_null($rndId)){
                return strtoupper(substr($rndId, 0, $length));
                }
            return strtoupper($rndId);
        }
        /* create unique coupan code */
            $productId  = (int) $this->getRequest()->getParam('id'); 
            $sku=$this->getRequest()->getParam('sku');
            $discountprice=$_POST['product']['discountprice']; 
            $model = Mage::getModel('salesrule/rule');
            $couponCode=generateUniqueId(8);
            $model->setName($couponCode);
            $model->setDescription('Discount coupon for Surger.');
            $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($productId);
            $model->setSortOrder('0');
            $model->setSimpleAction('by_percent');
            $model->setDiscountAmount($discountprice);
            $model->setDiscountStep(0);
            $model->setSimpleFreeShipping(0);
            $model->setCouponType(2);
            $model->setCouponCode($couponCode);
            $model->setUsesPerCoupon(1);
            $model->setTimesUsed(0);
            $model->setIsRss(0);
            $model->setWebsiteIds('1');

             $sku=$_POST['product']['sku'];
            print $sku;
    /*$skuCond = Mage::getModel('salesrule/rule_condition_product')
               ->setType('salesrule/rule_condition_product')
               ->setAttribute('sku')
               ->setOperator('==')
               ->setValue($sku);
        print_r($skuCond); exit;       
    $found = Mage::getModel('salesrule/rule_condition_product_found')
             ->setType('salesrule/rule_condition_product_found')
             ->setValue(1)           // 1 == FOUND
             ->setAggregator('all'); // match ALL conditions         

    $model->loadPost($found);*/

    $conditions = array();
    $conditions[1] = array(
    'type' => 'salesrule/rule_condition_combine',
    'aggregator' => 'all',
    'value' => 1,
    'new_child' => ''
    );
    $conditions['1--1'] = array
    (
    'type' => 'salesrule/rule_condition_product_found',//-> means 'if all of the following are true' - same rules as above for 'aggregator' and 'value'
    //other values for type: 'salesrule/rule_condition_product_subselect' 'salesrule/rule_condition_combine'
    'value' => 1,
    'aggregator' => 'all',
    'new_child' => '',
    );

    $conditions['1--1--1'] = array
    (
    'type' => 'salesrule/rule_condition_product',
    'attribute' => 'sku',
    'operator' => '==',
    'value' => $sku,
    );

    $actions=array();
    $actions[1]=array(
    'type' => 'salesrule/rule_condition_product_combine',
    'aggregator' => 'all',
    'value' => 1,
    'new_child' => ''
    );
    //$actions['1--1'] = array
    //(
    //'type' => 'salesrule/rule_condition_product_found',//-> means 'if all of the following are true' - same rules as above for 'aggregator' and 'value'
    //other values for type: 'salesrule/rule_condition_product_subselect' 'salesrule/rule_condition_combine'
    //'value' => 1,
    //'aggregator' => 'all',
    //'new_child' => '',
    //);
    $actions['1--1'] = array
    (
    'type' => 'salesrule/rule_condition_product',
    'attribute' => 'sku',
    'operator' => '==',
    'value' => $sku,
    );

    //a:7:{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";s:10:"conditions";a:1:{i:0;a:5:{s:4:"type";s:32:"salesrule/rule_condition_product";s:9:"attribute";s:3:"sku";s:8:"operator";s:2:"==";s:5:"value";s:6:"asdsad";s:18:"is_value_processed";b:0;}}}

    $model->setData('conditions',$conditions);
    $model->setData('actions',$actions);
    $model->loadPost($model->getData());
    $model->save();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...