Установите данные конфигурации Magento только для продолжительности сценария

magento.stackexchange https://magento.stackexchange.com/questions/11286

Вопрос

Можно ли установить опцию конфигурации 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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top