Конфигурация магазина Magento - получить массив


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

Для примера я хочу следующее:

array('myvals' => 
    array('key1' => 'val1'),    array('key1' => 'val2', 'key1' => 'val3'),

)

Но я хочу, чтобы это управлялось с помощью конфигурации хранилища и извлекалось с помощью Mage::getStoreConfig('myvals');

Возможно ли это в любом случае?

Author: Marty Wallace, 2013-09-02

2 answers

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

<backend_model>adminhtml/system_config_backend_serialized_array</backend_model>

С помощью этого бэкенда вы можете создать свою собственную модель интерфейса, которая расширяет Mage_Adminhtml_Block_System_Config_Form_Field_Array_Abstract, здесь вы можете определить свои собственные поля, которые вам нужны (по умолчанию могут быть созданы только текстовые вводы). При сохранении это создаст массив, который будет храниться сериализованным в базе данных, поэтому при чтении значения, которое вам нужно будет отменить, это:

$myvals = unserialize(Mage::getStoreConfig('myvals'));

ОБНОВЛЕНИЕ: Если вам не нужны внутренние поля ввода, вы также можете сохранить их самостоятельно (и вы должны иметь возможность использовать многомерность):

Mage::getConfig()->saveConfig('myvals',serialize($myvals));
 11
Author: Vladimir Kerkhoff, 2013-09-02 13:01:16

В Magento нет стандартного способа сделать это. Вам придется написать собственный код. Вы можете использовать пользовательские запросы в таблице core_config_data. Например, пользовательский модуль с методом getConfig(), который выполняет этот запрос:

SELECT * FROM core_config_data WHERE path LIKE 'myvals/%'

, А затем метод toArray(), который разделяет результат с помощью explode('/', $row), чтобы вы могли использовать такой код:

$vals = Mage::getModel('custom_config')->getConfig('myvals');
$val3 = $vals['key1'];

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

Кстати, каков ваш вариант использования? Есть ли еще какая-то причина, кроме более красивого кода, по которой вам это нужно?

 0
Author: Jacques, 2017-01-31 09:51:32