Вобщем нашел и причину, и решение (надеюсь временное)
Один из модулей (и пофиг совершенно ядру, что в модулях я все сторонние модули выключил, карт всё равно грузит из таблицы все настройки, и включенных модулей, и выключенных).
К версии 4.12.1 файл Tygh/Settings.php претерпел массу изменений, сильно далеко не углублялся, но видимо где-то на уровне получения данных может какая проверка пропала.
Вобщем, в итоге, на стадии формирования массива settings могут дойти табы настроек модуля, которые имеют записи в таблице settings_sections, но для них нет записей в остальных таблицах (например просто вкладка с информацией и кнопками установки демо данных).
В результате в коде
if ($result) {
foreach ($result as $_row) {
$section_name = ($_row['section_id'] != 0 && isset($_sections[$_row['section_id']])) ? $_sections[$_row['section_id']]['name'] : '';
$section_tab_name = ($_row['section_tab_id'] != 0 && isset($_sections[$_row['section_tab_id']])) ? $_sections[$_row['section_tab_id']]['name'] : '';
$force_parse = $_row['type'] == 'N' ? true : false;
if (!empty($_row['section_tab_id']) && $hierarchy) {
$settings[$section_name][$section_tab_name][$_row['name']] = $this->unserializeValue($_row['value'], $force_parse);
} elseif (!empty($_row['section_id']) && $hierarchy) {
$settings[$section_name][$_row['name']] = $this->unserializeValue($_row['value'], $force_parse);
} else {
$settings[$_row['name']] = $this->unserializeValue($_row['value'], $force_parse);
}
}
$section_name и $section_tab_name - имеют пустые значения, так как
$_row[‘section_id’] и $_row[‘section_tab_id’] имеют значения
а $_sections[$_row[‘section_id’]] и $_sections[$_row[‘section_tab_id’]] - не существуют
однако $_row[‘section_id’] и $_row[‘section_tab_id’] имеют значения, поэтому далее код пытается создать элемент массива
$settings[''][''][$_row['name']]
что и вызывает ошибку
Пока принял решение “в лоб” - добавил проверку на пустое значение
if (!empty($_row['section_tab_id']) && $hierarchy && !empty($section_tab_name)) {
$settings[$section_name][$section_tab_name][$_row['name']] = $this->unserializeValue($_row['value'], $force_parse);
} elseif (!empty($_row['section_id']) && $hierarchy && !empty($section_name)) {
$settings[$section_name][$_row['name']] = $this->unserializeValue($_row['value'], $force_parse);
} else {
$settings[$_row['name']] = $this->unserializeValue($_row['value'], $force_parse);
}
полет нормальный.
Интересует - как обстоят дела с этим файлом в последней версии (пока решил отложить обновление модуля из-за которого возникла такая ситуация, чтобы обновиться дальше, убрать свои правки и посмотреть результат).
На модуль-то грешить тоже не особо хочется, потому что если ядро позволяет в базе создавать такую ситуацию - то проблема в ядре, не в модуле.
@Asya @cs-cart_team - понимаю что на баг пока не тянет, как минимум пока не обновлюсь до последней версии, но всё-равно, звоночек есть.
PS полет не совсем нормальный, нельзя зайти в настройки именно этого модуля, настройки одним списком вне табов (это и понятно). Буду думать.