Установите данные конфигурации Magento только для продолжительности сценария
-
16-10-2019 - |
Вопрос
Можно ли установить опцию конфигурации Magento только на продолжительность одного сценария?
Я пытаюсь программировать и рекурсивно создавать заказы в Magento. Я хочу включить Flat Rate Shipping
метод и установить стоимость на 5.00
, Например. Как только сценарий запускается, я хочу, чтобы значение было установлено через постоянство, как обычно, из БД.
Я использую основную функцию, чтобы определить, в какой итерации мы находимся. Если это первое, установите метод доставки. Сценарий называется через Ajax.
...
try {
if (isFirstIteration($_iteration)) {
$_flatShipping = Mage::getStoreConfig('carriers/flatrate/active', $_storeId);
if ($_flatShipping == 0) {
Mage::getConfig()->setNode('carriers/flatrate/active', '1');
Mage::getConfig()->setNode('carriers/flatrate/price', '5.00');
}
}
} catch(Exception $e) {
$html .= '<div class="error">Error: ' . $e->getMessage() . '</div>';
}
...
Это делает нет Работа; Magento бросает исключение Please specify a shipping method
на цитате сохранение.
Однако я могу установить метод доставки в БД. Этот делает Работа:
...
try {
if (isFirstIteration($_iteration)) {
$_flatShipping = Mage::getStoreConfig('carriers/flatrate/active', $_storeId);
if ($_flatShipping == 0) {
$_mageConfig = new Mage_Core_Model_Config();
$_mageConfig->saveConfig('carriers/flatrate/active', '1', 'default', 0);
$_mageConfig->saveConfig('carriers/flatrate/price', '5.00', 'default', 0);
Mage::getConfig()->reinit();
Mage::app()->reinitStores();
}
}
} catch(Exception $e) {
$html .= '<div class="error">Error: ' . $e->getMessage() . '</div>';
}
...
Я предполагаю setNode
Не работает так, как я думаю. Любая информация была бы полезна, за исключением того, что я избил меня за создание подобных заказов :) Спасибо.
Решение
Проблема с setNode()
это то, что он не обновляет кэш конфигурации в Mage_Core_Model_Store
. Анкет Это не кэш Magento, а массив PHP, заполненный во время выполнения при инициализации хранилища для конкретной конфигурации хранилища и когда значение конфигурации читается для глобальной или конкретной конфигурации веб -сайта.
Так setNode()
не работает для конкретных значений или значений, которые были прочитаны ранее.
Но есть метод, который устанавливает узел, а также кэшированное значение:
Mage::app()->getStore()
->setConfig('section/group/field', $value);
Другие советы
Ты прав. setNode()
использует полный XPath. Вам нужно будет установить данные хранилища, используя абсолютный путь:
stores/[code]/carriers/flatrate/active