Closed asnenne closed 2 years ago
Работает, как работало. Метод getOption ищет в опциях и если такого ключа нет или он пустой, то возвращается второй параметр.
Проверил, всё работает как надо.
Странно, конечно. У Вас работает, а у меня не работает. Ну ладно.
Ага, вот в чем подвох, дошло. Это про чекбоксы. Если чекбокс не отмечен, то там пусто и подставляется значение по-умолчанию. Наверное, вместо единицы надо что-то другое писать. В каких-то еще полях сталкивался.
В общем, раньше было не так. Раньше работало таким образом, что это значение применялось только в том случае, если с этой опцией еще не сохранили виджет. А потом применялись опции из настроек. А сейчас, получается, если поле не заполнено, то берется это значение? А если нам надо оставить значение пустым?
Было удобно при обновлениях, если поля новые в опциях появлялись. После обновления всё продолжало работать без ошибок даже без пересохранения. А если надо - пересохранили и применилось то, что сохранили. А теперь нифига так не выйдет.
Видимо не отсутствие ключа проверяется, а и пустое значение тоже.
Метод getOption ищет в опциях и если такого ключа нет или он пустой, то возвращается второй параметр.
Да, вот про это я и говорю. Иногда надо по-умолчанию указать значение, но сохранить пустое поле. Если нет ключа - вот с этим согласен. А если пустое значение - здесь не согласен.
Такс, что-то я невнимательный стал, об опциях полей говорил)
В виджетах всё корректно, во всяком случае в текущей версии с гита, проверьте.
https://github.com/instantsoft/icms2/blob/master/system/core/widget.php#L57
Может быть, 2.15 не ставил, не проверял. В 2.14.3 есть такая проблема. Если поле не заполнено, то тянет значение по-умолчанию.
В 2.14.3 точно так же https://github.com/instantsoft/icms2/blob/2.14.3/system/core/widget.php#L57
А, всё понятно, в значении в options null.
Поправлю в общем.
Да, вот это
return $value !== null ? $value : $default;
public function getOption($key, $default = false){
$is_array = strpos($key, ':');
if ($is_array === false){
$value = array_key_exists($key, $this->options) ? $this->options[$key] : $default;
} else {
$value = array_value_recursive($key, $this->options);
if($value === null){
$value = $default;
}
}
return $value;
}
/system/core/widget.php
Да я у себя поправил. Люди жалуются, что опции не работают.
Спасибо.
Используемая версия InstantCMS: 2.14.3
Версия PHP: 7.4
Не знаю, с какой версии это случилось, раньше было всё нормально. А теперь значения по-умолчанию прибиты гвоздями, значения опций не применяются.
Вот здесь если написано 10, то при изменении опций шаблона всё равно останется 10. Из-за этого перестали настраиваться многие виджеты, где раньше было оказано это значение по-умолчанию. Проверено на нескольких сайтах на множестве виджетов.
Спасибо.