instantsoft / icms2

Self-hosted Site Management System
https://instantcms.ru
GNU General Public License v2.0
294 stars 120 forks source link

Значение по-умолчанию в виджетах. Баг #1385

Closed asnenne closed 2 years ago

asnenne commented 2 years ago

Используемая версия InstantCMS: 2.14.3

Версия PHP: 7.4

Не знаю, с какой версии это случилось, раньше было всё нормально. А теперь значения по-умолчанию прибиты гвоздями, значения опций не применяются.

0

Вот здесь если написано 10, то при изменении опций шаблона всё равно останется 10. Из-за этого перестали настраиваться многие виджеты, где раньше было оказано это значение по-умолчанию. Проверено на нескольких сайтах на множестве виджетов.

Спасибо.

fuzegit commented 2 years ago

Работает, как работало. Метод getOption ищет в опциях и если такого ключа нет или он пустой, то возвращается второй параметр.

fuzegit commented 2 years ago

Проверил, всё работает как надо.

Выделение_014 Выделение_015 Выделение_016

asnenne commented 2 years ago

Странно, конечно. У Вас работает, а у меня не работает. Ну ладно.

asnenne commented 2 years ago

Ага, вот в чем подвох, дошло. Это про чекбоксы. Если чекбокс не отмечен, то там пусто и подставляется значение по-умолчанию. Наверное, вместо единицы надо что-то другое писать. В каких-то еще полях сталкивался.

В общем, раньше было не так. Раньше работало таким образом, что это значение применялось только в том случае, если с этой опцией еще не сохранили виджет. А потом применялись опции из настроек. А сейчас, получается, если поле не заполнено, то берется это значение? А если нам надо оставить значение пустым?

asnenne commented 2 years ago

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

asnenne commented 2 years ago

Видимо не отсутствие ключа проверяется, а и пустое значение тоже.

asnenne commented 2 years ago

Метод getOption ищет в опциях и если такого ключа нет или он пустой, то возвращается второй параметр.

Да, вот про это я и говорю. Иногда надо по-умолчанию указать значение, но сохранить пустое поле. Если нет ключа - вот с этим согласен. А если пустое значение - здесь не согласен.

fuzegit commented 2 years ago

Такс, что-то я невнимательный стал, об опциях полей говорил)

В виджетах всё корректно, во всяком случае в текущей версии с гита, проверьте.

https://github.com/instantsoft/icms2/blob/master/system/core/widget.php#L57

asnenne commented 2 years ago

Может быть, 2.15 не ставил, не проверял. В 2.14.3 есть такая проблема. Если поле не заполнено, то тянет значение по-умолчанию.

fuzegit commented 2 years ago

В 2.14.3 точно так же https://github.com/instantsoft/icms2/blob/2.14.3/system/core/widget.php#L57

fuzegit commented 2 years ago

А, всё понятно, в значении в options null.

Поправлю в общем.

asnenne commented 2 years ago

Да, вот это return $value !== null ? $value : $default;

fuzegit commented 2 years ago
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

asnenne commented 2 years ago

Да я у себя поправил. Люди жалуются, что опции не работают.

asnenne commented 2 years ago

Спасибо.