Magento 2 Создайте Правило Цены Каталога Программно
Я использовал приведенный ниже код для программного создания правила цены каталога. Это создает правило, но условия не сохраняются.
$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();
7
1 answers
Проверьте код ниже.
Ссылка: \Magento\Catalogrule\Контроллер\Adminhtml\Промо\Каталог\Сохранить
Перед сохранением правила проверьте данные, которые помогают сохранить правильное значение
$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();
}
3
Author: Bhavik, 2017-01-24 08:49:25