Александр

Александр

Был в сети 03 февраля 2025, 17:16
Заказы принимаю
Как вариант и OnMODXInit. Но лишняя микронагрузка (смена опции) на каждую инициализацию? Может у него там запрос на определение города по ip на сторонний сервер. Зачем OnMODXInit если есть msOnChangeOrderStatus?
Всмысле зачем вызывать всегда, когда не нужно, если можно «когда нужно»? =)
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 осталась неизменной
Блин, честно, продал бы почку, на эти деньги бы свалил из проклятой столицы на такие условия и отдавал бы душу за такую работу.
Жена последний курс МАРХИ заканчивает, завязаны на учебе вместе…
Уже предвижу цепочку…
Делаю тот самый модуль для б24 => начальству не нравится => следует увольнение => переезжаю в питер
А вообще если переезжать, то как Василий, ближе к морю. Я ему люто завидую (доброй завистью). Не каждый осмелится плюнуть на все, взять семью в охапку и свалить по-дальше.
Так вот, браузеры запоминают такие запросы, и при повторном обновлении страницы идёт новый запрос на добавление товара.


Именно такое поведение и описано в вопросе
добавление последнего добавленного товара в корзину при обновлении страницы
Точнее может сказать только автор, поглядев у себя в консоль браузера.
Пардон, вчитался, про добавление последнего товара не обратил внимания.
ставите тип вывода «Текст», далее создаете плагин на событие OnDocFormSave:
switch ($modx->event->name) {
    case 'OnDocFormSave':
			$directory = 'images'; //Имя директории
			$tvName = 'image'; //Имя TV
			$tv = $modx->getObject('modTemplateVar', array('name' => $tvName));
			$curTv = $tv->getValue($resource);
			if (!preg_match('/'.$directory.'\//',$curTv)){
                              if(!$resource->setTVValue($tvName, $directory.'/'.$curTv)) {
                                 $modx->log(modX::LOG_LEVEL_ERROR, 'There was a problem setting the TV value.');
                              }
			}
        break;
    default:
        return;
}
При сохранении документа плагин проверяет встречается ли имя нужной директории в папке, если нет, то дописывает в ТВ нужную директорию. Кстати, даже после дописанной директории в админке превью также выводится.
P.S.
Я понимаю, что в чанках, вызовах сниппетов и т.д., я сам могу дописывать путь к [[*img_1]] или [[+img_1]], но это, мягко говоря, совсем не устраивает.
А вы пробовали не дописывать путь?
Логика MODX построена так, что при работе с TV система смотрит на
baseUrl: images/
у источника файлов.
После этого берет этот baseUrl и дописывает туда значение из img_1.
Текстовые редакторы в modx делают по-иному. При добавлении картинки в контент — также смотрят на baseUrl, но уже при выборе картинки дописывают baseUrl автоматом. В итоге при вставке того же TinyMCE у Вас вставится
images/other/test.jpg
автоматически.