Установка значения свойства.

Здравствуйте. Чтобы получить какое то значение свойства используется код:
$test = $modx->getOption('minimal_mf',null,'100');
$modx->setPlaceholder('minimal_mf', $test);
А как установить новое значение?

$modx->setOption('percent_mf','100');
Не работает, информации по setOption не нашел…
Я могу конечно на PDO залезть в modx_system_settings, но мне кажется это все гораздо проще и правильнее делается.
Николай
15 февраля 2014, 14:43
modx.pro
1
6 273
0

Комментарии: 15

Николай
15 февраля 2014, 18:59
0
Кстати с новой версией тикетов появился баг. В куки пишется текст и заголовок нового тикета, даже после того как он опубликован. Я сейчас нажимаю «Написать» и вижу вот такое:
Алексей Карташов
01 марта 2014, 05:17
0
Слушайте, вот я то ли туплю, то ли ни разу с таким не сталкивался, но setOption действительно не сохраняет новое значение.

Т.е. как. Такой код:
$modx->setOption('qweqwe', 'йцуйцу');
echo $modx->getOption('qweqwe');
выведет:
йцуйцу
Меняем код на:
echo $modx->getOption('qweqwe');
, обновляем страницу и выводится старое значение.

Так и должно быть? Если да, то менять значение системной настройки можно только через xPDO/PDO?

p.s. папка с кэшем была предварительно удалена.
    Алексей Карташов
    01 марта 2014, 05:21
    0
    Хм, и вправду
      Алексей Карташов
      01 марта 2014, 06:17
      0
      Что-то я вообще запутался.

      Берём первую же настройку modx в общем списке — «access_category_enabled». Значение «Да» (булевый комбобокс).

      Меняем значение на «Нет». Проверяем:
      $modx->cacheManager->refresh();
      var_dump($modx->getOption('access_category_enabled'));
      echo "
      ";
      $modSetting = $modx->getObject('modSystemSetting', 'access_category_enabled');
      var_dump($modSetting->get('value'));
      string(1) «1»

      string(1) «0»

      getOption-то тот ещё фрукт!
      И так со всеми настройками. ЧЯДНТ?
        Алексей Карташов
        01 марта 2014, 08:19
        0
        Отбой, мой косяк — права на папки (а точнее их владелец) были не правильными. Из-за этого кэш чудил.
          Николай
          01 марта 2014, 10:05
          0
          Я кстати так и не смог разобраться как в modx устанавливать значение свойств…
            Алексей Карташов
            01 марта 2014, 10:07
            0
            Так я ж выше ссылку привёл.

            Только через xPDO/PDO:
            $Setting = $modx->getObject('modSystemSetting', 'site_name');
            $Setting->set('value', 'My New Site Name');
            $Setting->save();
            $modx->cacheManager->refresh(array('system_settings' => array()));
              Николай
              01 марта 2014, 12:51
              0
              Проглядел, я это через чистый PDO решил =)
                Василий Наумкин
                19 января 2015, 17:03
                0
                Кстати говоря, раньше кэш и так чистился при сохранении настроек.

                А теперь, оказывается, убрали.
                  Алексей Карташов
                  19 января 2015, 17:32
                  1
                  0
                  Я для себя написал универсальную функцию изменения системной настройки, которая 100 пудов её изменяет и новое значение доступно сразу же и без дальнейших причуд:
                  function changeSetting ($key = '', $value, $config = array()) {
                    global $modx;
                  
                    if (empty($key)) { return false; }
                  
                    /* @var $response modProcessorResponse */
                    $response = $modx->runProcessor('system/settings/update', array_merge(array(
                      'key' => $key,
                      'value' => $value,
                      'namespace' => 'core'
                    ), $config));
                  
                    if ($response->isError()) {
                      $modx->log(modX::LOG_LEVEL_ERROR, '[avk] Cann\'t update setting with messages: '. print_r($response->getAllErrors()));
                      return false;
                    }
                    $modx->reloadConfig();
                    return true;
                  }

                  Вызывать надо вот так:
                  changeSetting('pdoFetch.class', 'pdotools.mypdofetch', array(
                    'namespace' => 'pdotools'
                  ));

                  Namespace указывать надо обязательно, если настройка из стороннего компонента.
        Илья Уткин
        02 марта 2014, 00:48
        0
        А все дело в том, что значение свойства может быть в трех разных местах. Например, если в настройках системы стоит значение 1, а в настройках контекста web стоит 0, то $modx->getObject('modSystemSetting', $name) вернет 1, а $modx->getOption($name) — 0, так как у настроек контекста преимущество больше.

        Поэтому не все так просто с setOption — куда значение-то записывать?
          Сергей Шлоков
          19 января 2015, 18:26
          0
          А еще настройки пользователя.
          modx::setOption() просто меняет значение в массиве modx::config
          public function setOption($key, $value) {
            $this->config[$key]= $value;
          }
          Константин Ильин
          19 января 2015, 13:58
          0
          Создал простой сниппет, у него есть один параметр — date.

          echo $modx->getOption('date', $scriptProperties);
          $modx->setOption('date','test');
          echo $modx->getOption('date', $scriptProperties);
          Итог работы снипетта выводит одно и то же значение(дефолтное) 2-а раза.

          Мне необходимо чтобы при setOption('date','test'); сохранялась новая дата, т.е. получается динамически параметр сниппета.
          Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
          15