Дело вот в чем, я галочку в первом поле не ставил, она ставится сама. При этом, если убрать все галочки с groupbox - все нормально, но вот если отметить что-нибудь другое, то самая первая все равно поставится.
Тестировал следующим способом (settings.php для плагина):
$plugin_model = new shopPluginModel();
$delivery_methods = $plugin_model->select("`id` as `value`, `name` as `title`, `id` as `description`")->where('`status` = 1')->fetchAll();
return array(
'methods' => array(
'control_type' => 'groupbox',
'title' => 'Способы доставки',
'options' => $delivery_methods,
'description' => '<pre>' . print_r($this->getSettings('methods'), 1) . '</pre>'
),
);
А если я запишу содержимое options вручную, то все нормально, но массивы ничем не отличаются:
$delivery_methods = Array (
Array ( 'value' => 1, 'title' => 'Курьер' ),
Array ( 'value' => 2, 'title' => 'Почта России' ),
Array ( 'value' => 3, 'title' => 'EMS Почта России' )
);
При нажатии "Сохранить", передаются нужные отмеченные поля, но если заново открыть страницу настроек, то, опять же, первое поле становится отмеченным.
Из waHtmlControl меня настораживает только эти строки:
$checkbox_params['value'] = empty($option['value']) ? $option['value'] : 1;
$checkbox_params['checked'] = in_array($option['value'], $params['value'], true) || !empty($params['value'][$option['value']]);
4 комментария
Проблема была в том, что отмеченные поля - строка "1", а значение value возвращается в виде строки, собственно, нужно просто получать value, не совпадающий со строкой "1".
Я об этом баге и на старом форуме писал и на новом. Пока никаких изменений нет.
Дело в том, что, в качестве value нельзя передавать числовые значения.
Если превратить их в строки, то все работает нормально. Напримсер "id1". Потом вырезаем буквы и остаются необходимые значения.
Это принуждение к костылированию. Надеюсь когда-то это исправят.
А кстати.
У меня для вашего случая есть отдельный контрол (возможно, вам придется его переименовать, т.к. у меня обычно свой экшен для настроек и контролы я вручную регистрирую, а для штатного экшена настроек нужно другое именование метода чтоб контрол автоматом регистрировался)
У вас в итоге в настройках получается массив [цифровой_id]=>1. То есть в ключах массива будут нужные id. :)
settings.php
контрол
Колбэк для опций shopMypluginPluginSettingsAction::deliveryMethodsOptions()
Окей, но мне это явно не пригодится, нет смысла подстраивать свой плагин под "забагованность" платформы.
Бтв, в одной версии вебасиста это исправили втихаря, то есть нигде не написали, что оно пофикшено. Так что щас проблемы нет