Как работают параметры данных конфигурации ядра


У меня есть вопрос, связанный с core_config_data. Нужны некоторые эксперты magento, чтобы прояснить это.

Например:

У меня по умолчанию отключено расширение PayPal. Когда вы включаете его из интерфейса администратора, он включает расширение и создает довольно мало настроек в таблице core_config_data.

Я хочу включить расширение PayPal, используя скрипт данных в пользовательском расширении. Для этого я использую следующий код

    <?php
     $installer = $this;
     $installer->startSetup();
     $setup = new Mage_Core_Model_Config();
     $setup->saveConfig('payment/paypal_express/active', '1', 'default', 0);
     $installer->endSetup();
    ?>

Но когда я запускаю это в новой среде, это сохраняет только один параметр (payment/paypal_express/active) в таблице core_config_data. Остальные настройки отсутствуют в core_config_data. Как мне запустить создание настроек восстановления через мое расширение.

Author: 7ochem, 2015-09-08

2 answers

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

Но, к делу: вам придется установить каждое значение самостоятельно. В настройке значений конфигурации очень мало магии. Здесь нет автоматизации. Поэтому просто убедитесь, что вы добавили все пути со значениями.

app/code/(community|local)/[Namespace]/[Module]/data/[namespace]_[module]_setup/data-install-[version].php

$config = array(
    array(
        'path' => 'payment/paypal_express/active',
        'value' => '1',
    ),
    array(
        'path' => 'some/custom/config_value',
        'value' => '1',
    ),
);

foreach ($config as $item) {
  $setup = new Mage_Core_Model_Config();
  $setup->saveConfig($item['path'], $item['value'], 'default', 0);
}
 3
Author: Sander Mangel, 2015-09-08 16:55:45

Как это работает

Параметры, на которые вы ссылаетесь, устанавливаются при сохранении представления конфигурации системы на панели администратора.

Однако они не будут сохранены, если для значений задано значение "наследовать от родителя" или из внешней области, такой как веб-сайт или глобальный.

Конфигурация XML в модуле etc/config.xml является последним резервным вариантом, и Magento загрузит их, если не найдет ничего другого, сохраненного в core_config_data.

Проблема

Вы сохраняете только один ключ. Если вы взглянете на форму POST, сохранив ее в бд, мы отправим все возможные значения.

Решение

Решение Сандера правильное, вы хотите предоставить полный набор настроек. Но я предлагаю, чтобы, если вы не переопределяете значения по умолчанию, в конфигурацию нужно было вставлять только измененные значения.

Поэтому позвольте ему максимально вернуться к конфигурации XML и вставьте в конфигурацию бд только те значения, которые вам нужны. Старайтесь избегать вызов saveConfig в цикле, так как это может вызвать некоторые накладные расходы на бд.

Для этого вы можете сохранять отдельные ключи, как вы это делаете, или в массовом порядке. Magento делает это, сохраняя структурированные массивы в виде "групп". Взгляните на то, как они справляются с этим в Mage_Adminhtml_System_ConfigController::saveAction:

$section = $this->getRequest()->getParam('section');
$website = $this->getRequest()->getParam('website');
$store   = $this->getRequest()->getParam('store');
Mage::getSingleton('adminhtml/config_data')
    ->setSection($section)
    ->setWebsite($website)
    ->setStore($store)
    ->setGroups($groups)
    ->save();

Одна проблема, которую я вижу здесь, заключается в том, что сохранение конфигурации не обязательно помечает старую конфигурацию как недействительную. Это может создать проблему. Этот контроллер администратора сам сталкивается с проблемой повторного запуска конфигурации и вызываю диспетчерскую:

// reinit configuration
Mage::getConfig()->reinit();
Mage::dispatchEvent('admin_system_config_section_save_after', array(
    'website' => $website,
    'store'   => $store,
    'section' => $section
));
Mage::app()->reinitStores();

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

Желаю удачи!

 4
Author: philwinkle, 2015-09-08 17:11:29