Установка значения свойства.
Здравствуйте. Чтобы получить какое то значение свойства используется код:
Я могу конечно на PDO залезть в modx_system_settings, но мне кажется это все гораздо проще и правильнее делается.
$test = $modx->getOption('minimal_mf',null,'100');
$modx->setPlaceholder('minimal_mf', $test);
А как установить новое значение? $modx->setOption('percent_mf','100');
Не работает, информации по setOption не нашел…Я могу конечно на PDO залезть в modx_system_settings, но мне кажется это все гораздо проще и правильнее делается.
Комментарии: 15
Слушайте, вот я то ли туплю, то ли ни разу с таким не сталкивался, но setOption действительно не сохраняет новое значение.
Т.е. как. Такой код:
Так и должно быть? Если да, то менять значение системной настройки можно только через xPDO/PDO?
p.s. папка с кэшем была предварительно удалена.
Т.е. как. Такой код:
$modx->setOption('qweqwe', 'йцуйцу');
echo $modx->getOption('qweqwe');
выведет:йцуйцуМеняем код на:
echo $modx->getOption('qweqwe');
, обновляем страницу и выводится старое значение.Так и должно быть? Если да, то менять значение системной настройки можно только через xPDO/PDO?
p.s. папка с кэшем была предварительно удалена.
Хм, и вправду…
Что-то я вообще запутался.
Берём первую же настройку modx в общем списке — «access_category_enabled». Значение «Да» (булевый комбобокс).
Меняем значение на «Нет». Проверяем:
getOption-то тот ещё фрукт!
И так со всеми настройками. ЧЯДНТ?
Берём первую же настройку 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-то тот ещё фрукт!
И так со всеми настройками. ЧЯДНТ?
Отбой, мой косяк — права на папки (а точнее их владелец) были не правильными. Из-за этого кэш чудил.
Я кстати так и не смог разобраться как в modx устанавливать значение свойств…
Так я ж выше ссылку привёл.
Только через xPDO/PDO:
Только через xPDO/PDO:
$Setting = $modx->getObject('modSystemSetting', 'site_name');
$Setting->set('value', 'My New Site Name');
$Setting->save();
$modx->cacheManager->refresh(array('system_settings' => array()));
Проглядел, я это через чистый PDO решил =)
Я для себя написал универсальную функцию изменения системной настройки, которая 100 пудов её изменяет и новое значение доступно сразу же и без дальнейших причуд:
Вызывать надо вот так:
Namespace указывать надо обязательно, если настройка из стороннего компонента.
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 указывать надо обязательно, если настройка из стороннего компонента.
А все дело в том, что значение свойства может быть в трех разных местах. Например, если в настройках системы стоит значение 1, а в настройках контекста web стоит 0, то $modx->getObject('modSystemSetting', $name) вернет 1, а $modx->getOption($name) — 0, так как у настроек контекста преимущество больше.
Поэтому не все так просто с setOption — куда значение-то записывать?
Поэтому не все так просто с setOption — куда значение-то записывать?
А еще настройки пользователя.
modx::setOption() просто меняет значение в массиве modx::config
modx::setOption() просто меняет значение в массиве modx::config
public function setOption($key, $value) {
$this->config[$key]= $value;
}
Создал простой сниппет, у него есть один параметр — date.
Мне необходимо чтобы при setOption('date','test'); сохранялась новая дата, т.е. получается динамически параметр сниппета.
echo $modx->getOption('date', $scriptProperties);
$modx->setOption('date','test');
echo $modx->getOption('date', $scriptProperties);
Итог работы снипетта выводит одно и то же значение(дефолтное) 2-а раза.Мне необходимо чтобы при setOption('date','test'); сохранялась новая дата, т.е. получается динамически параметр сниппета.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.