Как подменять значение свойства на лету?

Как в плагине на ходу подставлять значение системной настройки, в зависимости от условия?

Ситуация: адреса менеджеров минишопа хранятся в системной настройке ms2_email_manager. В зависимости от условия нужно подставлять нужный адрес, в данном случае в зависимости от выбранного пользовтаелем города, заказы должны высылаться только в нужный город, а не всем менеджерам.

$modx->setOption('ms2_email_manager', $new_email);
Такой вариант не срабатывает.

modx.pro/help/2658/ — а вариант настоящей смены системных настроек тоже не вариант, т.к. нужно подменять только для конкретного пользователя, а не для всех.

Как подсунуть минишопу нужную системную настройку «на лету» не меняя её оригинал?

UPD:
Решение плагином:
case 'msOnChangeOrderStatus':
	// $city_email = тут получаем нужный нам емайл в зависимости от условия        
        $modx->setOption('ms2_email_manager', $city_email);
    break;
Василий Столейков
03 августа 2017, 04:40
modx.pro
3
2 037
0
Поблагодарить автора Отправить деньги

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

Наумов Алексей
03 августа 2017, 09:17
0
Вот можно попробовать почитать, предпоследнее сообщение

forums.modx.com/thread/72525/setoption-in-plugin-placeholder-not-working

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

Ну и все это нужно в плагине делать, где-то пораньше…
    Александр
    03 августа 2017, 12:36
    +2
    echo $modx->getOption('ttest');
    echo "< br >";
    $modx->setOption('ttest', '999');
    echo $modx->getOption('ttest');
    Результат:
    7
    999
    Тестировал код из консоли. При повторном выполнении — результат тотже.
    Из чего следует, что опция проставляется только на время выполнения скрипта.

    Логическим путем пошел в код ms2. Нам нужно куда-то вклиниться в процесс отправки писем.
    Ближайший эвент перед отправкой писем: msOnChangeOrderStatus
    Пишем плагин:
    switch ($modx->event->name) {
        case 'msOnChangeOrderStatus':
            $modx->setOption('ms2_email_manager', 'Нужный email');
        break;
    }
    Итог:
    Email менеджера подменился и письмо ушло на 'Нужный email'.
    Настройка ms2_email_manager осталась неизменной
      Василий Столейков
      03 августа 2017, 13:05
      0
      Так и сделал — работает!
      Системная настройка не затирается физически, а подменяется.
      Спасибо!
      Сергей Шлоков
      03 августа 2017, 12:57
      0
      А где ты его меняешь? Меняй в плагине на событие OnMODXInit. Если в $_REQUEST'е есть город, то меняй настройку.
        Александр
        03 августа 2017, 13:19
        +1
        Как вариант и OnMODXInit. Но лишняя микронагрузка (смена опции) на каждую инициализацию? Может у него там запрос на определение города по ip на сторонний сервер. Зачем OnMODXInit если есть msOnChangeOrderStatus?
        Всмысле зачем вызывать всегда, когда не нужно, если можно «когда нужно»? =)
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        5