Как подменять значение свойства на лету?
Как в плагине на ходу подставлять значение системной настройки, в зависимости от условия?
Ситуация: адреса менеджеров минишопа хранятся в системной настройке ms2_email_manager. В зависимости от условия нужно подставлять нужный адрес, в данном случае в зависимости от выбранного пользовтаелем города, заказы должны высылаться только в нужный город, а не всем менеджерам.
modx.pro/help/2658/ — а вариант настоящей смены системных настроек тоже не вариант, т.к. нужно подменять только для конкретного пользователя, а не для всех.
Как подсунуть минишопу нужную системную настройку «на лету» не меняя её оригинал?
UPD:
Решение плагином:
Ситуация: адреса менеджеров минишопа хранятся в системной настройке 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;
Поблагодарить автора
Отправить деньги
Комментарии: 5
Вот можно попробовать почитать, предпоследнее сообщение
forums.modx.com/thread/72525/setoption-in-plugin-placeholder-not-working
Правда старая темка, может новое что появилось — не знаю.
Ну и все это нужно в плагине делать, где-то пораньше…
forums.modx.com/thread/72525/setoption-in-plugin-placeholder-not-working
Правда старая темка, может новое что появилось — не знаю.
Ну и все это нужно в плагине делать, где-то пораньше…
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 осталась неизменной
Так и сделал — работает!
Системная настройка не затирается физически, а подменяется.
Спасибо!
Системная настройка не затирается физически, а подменяется.
Спасибо!
А где ты его меняешь? Меняй в плагине на событие OnMODXInit. Если в $_REQUEST'е есть город, то меняй настройку.
Как вариант и OnMODXInit. Но лишняя микронагрузка (смена опции) на каждую инициализацию? Может у него там запрос на определение города по ip на сторонний сервер. Зачем OnMODXInit если есть msOnChangeOrderStatus?
Всмысле зачем вызывать всегда, когда не нужно, если можно «когда нужно»? =)
Всмысле зачем вызывать всегда, когда не нужно, если можно «когда нужно»? =)
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.