Что config.xml настройки можно задать в базе данных?


Я хочу узнать больше о внутренностях Magento!

Недавно я использовал учебник Inchoo, чтобы позволить администраторам устанавливать расписание crontab в разделе Система > Конфигурация. Смотрите это здесь. В нем я заметил, что параметр, который обычно задается в config.xml, вместо этого устанавливается в таблице базы данных core_config_data.

Обычный config.xml метод:

<crontab>
    <jobs>
        <my_custom_crontab>
            <schedule><cron_expr>* * * * *</cron_expr></schedule>
            <run><model>mymodule/observer::hookMethod</model></run>
        </my_custom_crontab>
    </jobs>
</crontab>

Альтернативная Запись Базы данных:

scope   scope_id    path                                                value
default 0           crontab/jobs/my_custom_crontab/schedule/cron_expr   * * * * *

Может ли кто-нибудь сказать я

  • Какие параметры конфигурации могут быть расположены в базе данных, или все ли они могут быть.
  • Где живет логика (код) Magento для извлечения этих значений из базы данных.
  • Как выглядит иерархия / чему отдается приоритет.

Один побочный эффект, который я заметил при хранении этих настроек config.xml в базе данных, заключается в том, что у них внезапно появляется область действия. (по умолчанию, веб-сайт, магазин, просмотр магазина.) Я не знаю о репликации такой области в файлах config.xml, поэтому я также интересно, как это фигурирует.

Спасибо!

Author: Tyler V., 2014-07-04

1 answers

Теоретически вы можете установить любое значение конфигурации в базе данных (таблица core_config_data).
Но в большинстве случаев сохраненные там значения имеют столбец path, подобный этому: section/group/field. Итак, всего 3 части. Расписание cron является исключением.

Общая конфигурация Magento взята из разных источников. Все эти источники объединены в один большой xml. В случае, если есть 2 узла с одинаковым xpath, каждый источник перезапишет предыдущий источник.
Вот порядок загрузки конфигурация.

  1. Все XML-файлы, расположенные в app/etc (без вложенных папок). Это загружается в Mage_Core_Model_App::_initBaseConfig().
  2. Все модули. Файлы, расположенные в app/etc/modules. Это делается с помощью Mage_Core_Model_Config::_loadDeclaredModules()
  3. config.xml для всех активных модулей, загруженных ранее. Сделано в Mage_Core_Model_Config::loadModules()
  4. core_config_data табличные значения. Сделано в Mage_Core_Model_Config::loadDb.

Из всего этого magento создает один большой конфигурационный xml и меньшие для каждого веб-сайта и представления магазина, вытекающие из основного.

И вот пример.
Допустим, у вас есть это внутри config.xml модуля.

<default> <!-- config scope node -->
   <some_section>
       <some_group>
           <some_field>2</some_field>
       </some_group>
   </some_section>  
</default>

И у вас в бд есть строка с тем же путем some_section/some_group/some_field и областью действия default, но значение равно 1.
В большой конфигурации конечным значением будет 1, потому что конфигурация бд загружается последней.

Дополнительная заметка. При чтении значения из конфигурации вы не можете знать, взято ли значение из какого-либо xml-файла или из базы данных, и вам должно быть все равно.

 7
Author: Marius, 2014-07-23 10:32:22