$modx->setOption нужен совет
Добрый день.
В отдельном файле я подключаю класс modx.class.php, создаю новый объект этого класса. Инициализирую контекст.
Могу получить значение системной настройки через getOption(), однако не могу ничего записать в системную настройку через setOption().
информация на офф сайта крайне скудна и говорит, что нужно просто указать имя настройки и значение.
docs.modx.com/xpdo/2.x/class-reference/xpdoobject/configuration-accessors/setoption
Но почему-то у меня не срабатывает и значение в системную настройку не добавляется.
И как-то становиться непонятно, ведь системные настройки располагаются в определенных пространствах имен.По идее может существовать одинаковое название системной настройки, но просто в другом нэймспейсе. Это не должно как-то учитываться при задании значение через setOption? Там я пытаюсь в созданную мной системную настройку USA в моем пространстве имен custom записать значение.
Вот код.
В отдельном файле я подключаю класс modx.class.php, создаю новый объект этого класса. Инициализирую контекст.
Могу получить значение системной настройки через getOption(), однако не могу ничего записать в системную настройку через setOption().
информация на офф сайта крайне скудна и говорит, что нужно просто указать имя настройки и значение.
docs.modx.com/xpdo/2.x/class-reference/xpdoobject/configuration-accessors/setoption
Но почему-то у меня не срабатывает и значение в системную настройку не добавляется.
И как-то становиться непонятно, ведь системные настройки располагаются в определенных пространствах имен.По идее может существовать одинаковое название системной настройки, но просто в другом нэймспейсе. Это не должно как-то учитываться при задании значение через setOption? Там я пытаюсь в созданную мной системную настройку USA в моем пространстве имен custom записать значение.
Вот код.
@include(dirname(__FILE__) . '/../../../config.core.php');
//if (!defined('MODX_CORE_PATH')) define('MODX_CORE_PATH', dirname(__FILE__) . '/core/');
/* include the modX class */
if (!@include_once (MODX_CORE_PATH . "model/modx/modx.class.php")) {
$errorMessage = 'Site temporarily unavailable';
@include(MODX_CORE_PATH . 'error/unavailable.include.php');
header($_SERVER['SERVER_PROTOCOL'] . ' 503 Service Unavailable');
echo "<html><title>Error 503: Site temporarily unavailable</title><body><h1>Error 503</h1><p>{$errorMessage}</p></body></html>";
exit();
}
/* Create an instance of the modX class */
$modx= new modX();
if (!is_object($modx) || !($modx instanceof modX)) {
ob_get_level() && @ob_end_flush();
$errorMessage = '<a href="setup/">MODX not installed. Install now?</a>';
@include(MODX_CORE_PATH . 'error/unavailable.include.php');
header($_SERVER['SERVER_PROTOCOL'] . ' 503 Service Unavailable');
echo "<html><title>Error 503: Site temporarily unavailable</title><body><h1>Error 503</h1><p>{$errorMessage}</p></body></html>";
exit();
}
$modx->initialize('mgr');
$test = $modx->getOption('emailsender', null, 'i couldt find this');
$modx->setOption('USA','just some text');
echo $test; Комментарии: 11
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
Запускать из корневой директории сайта
но в принципе это ничем не отличается от моего кода.
Просто здесь ваш файл находится в корне, поэтому вы делаете А мой файл должен находиться не в корне, поэтому я там отдельно подключаю файл с настройками, потом файл с классом и создаю объект и инициализирую контекст.
Не могли бы вы пояснить, что именно в вашем коде заставляет его работать, а мой — нет.
пример минус 2 директории, к примеру файл лежит в assets/api/
А в системных настройках присутствует запись USA?
ЗЫ: у себя проверил все работает.
Попробуй еще так
У меня ведь объект создается без всяких проблем. И контекст инициализируется и getOption() работает.
Да, такая системная настройка есть.
Сам пока не пойму, что не так…
Меня вот лично смущает тот факт, что системные настройки располагаются в пространствах имен, но эти пространства никак не учитываются в методах getOption() и setOption()…
А через setOption() не работает.
Но правда ради чистоты эксперимента нужно попробовать обратиться к объекту напрямую не через консоль в админке а из файла.
Если через метод setOption() то не ок.
Остается только признать, что о том, что этот метод работает не так как ожидается, нам старались намекнуть в документации.
docs.modx.com/xpdo/2.x/class-reference/xpdoobject/configuration-accessors/setoption
фразой
Использование setOption не приводит к постоянному обновлению опции?? Но загружаются при каждом запросе… ересь какая-то
Читать системные настройки читает, а вот ничего не записал в USA.
Странно.
пример минус 2 директории, к примеру файл лежит в assets/api/
А в системных настройках присутствует запись USA?
ЗЫ: у себя проверил все работает.
Попробуй еще так
Больше деталей можно почитать тут — github.com/modxcms/revolution/issues/4494
Мы с vectorserver методом проб и ошибок тоже пришли к такому мнению.