Magento 2 Katalogpreisregel programmgesteuert erstellen

7

Ich habe den folgenden Code verwendet, um die Katalogpreisregel programmgesteuert zu erstellen. Es erstellt die Regel, aber die Bedingungen werden nicht gespeichert.

$catalogPriceRule = $this->_objectManager->create('Magento\CatalogRule\Model\Rule');
$catalogPriceRule
    ->setName('name')
    ->setDescription('description')
    ->setIsActive(1)
    ->setCustomerGroupIds(array(1))
    ->setWebsiteIds(array(1))
    ->setFromDate('')
    ->setToDate('')
    ->setSimpleAction('by_fixed')
    ->setDiscountAmount(10)
    ->setStopRulesProcessing(0);

$conditions = array();
$conditions[1] = array(
    'type' => 'catalogrule/rule_condition_combine',
    'aggregator' => 'any',
    'value' => "1",
    'new_child' => ''
);

$i = 1;
$conditions['1--1'] = array(
    'type' => 'catalogrule/rule_condition_product_found',
    'value' => 1,
    'aggregator' => 'all',
    'new_child' => '',
);

$conditions['1--1--1'] = array(
    'type' => 'catalogrule/rule_condition_product',
    'attribute' => 'sku',
    'operator' => '==',
    'value' => '24-UB02',
);
$catalogPriceRule->setData('conditions',$conditions);
$catalogPriceRule->loadPost($catalogPriceRule->getData());
$catalogPriceRule->save();
$catalogPriceRule->applyAll();
Jancy Abraham
quelle
Kannst du erklären, welchen Zustand du versuchst zu bauen?
Bhavik
Möchten Sie einige Skus in den Zustand hinzufügen.
Jancy Abraham
Wie kann ich eine Warenkorbregel mit Bedingung erstellen?
Senthil

Antworten:

3

Überprüfen Sie unten Code.

Referenz: \ Magento \ CatalogRule \ Controller \ Adminhtml \ Promo \ Catalog \ Save

Vor dem Speichern von Regeln validieren Sie Daten. Dies hilft beim Speichern des korrekten Werts

$model = $objectManager->create('Magento\CatalogRule\Model\Rule');
$model->setName('name') 
    ->setDescription('description') 
    ->setIsActive(1) 
    ->setCustomerGroupIds(array(1))
    ->setWebsiteIds(array(1)) 
    ->setFromDate('') 
    ->setToDate('') 
    ->setSimpleAction('by_fixed') 
    ->setDiscountAmount(10) 
    ->setStopRulesProcessing(0);  

$conditions = array();
$conditions["1"] = array
        (
            "type" => "Magento\CatalogRule\Model\Rule\Condition\Combine",
            "aggregator" => "all",
            "value" => 1,
            "new_child" => ""
        );
$conditions["1--1"] = array
        (
            "type" => "Magento\CatalogRule\Model\Rule\Condition\Product",
            "attribute" => "sku",
            "operator" => "==",
            "value" => "24-UB02"
        );

$model->setData('conditions',$conditions);

// Validating rule data before Saving
$validateResult = $model->validateData(new \Magento\Framework\DataObject($model->getData()));
if ($validateResult !== true) {
    foreach ($validateResult as $errorMessage) {
        echo $errorMessage;
    }                                       
    return;
}

try {                   
    $model->loadPost($model->getData());
    $model->save(); 

    $ruleJob = $objectManager->get('Magento\CatalogRule\Model\Rule\Job');
    $ruleJob->applyAll();
    echo "rule created";
} catch (Exception $e) {                    
   echo $e->getMessage();
}
Bhavik
quelle