Скаут

Скаут

Был в сети 25 сентября 2025, 12:54
Заказы не принимаю
речь именно про первый заказ.

Получается нужен сниппет: определяем клиента, ищем его заказы, если ничего не нашли — присуждаем скидку.
Присуждение скидки — просто в массиве корзины изменяем значение итога, добавив ключ «старый итог» для визуальной составляющей. Получается так?
ниже мой коммент с решением проблемы.

идентификатор адреса — что-то странное, не очень понял где и как он используется… Но получается, что проблема в модуле, неправильно там написан запрос, оттуда и вся возня на два дня… (
а, об этом речь, думал какое-то еще логирование)
проверил эти два метода — там всё ок.

Отложил процесс покупки, проблема именно в получении объекта
modx->getObject('msOrderAddress', 523);
Проверил на заранее уже существующем заказе в консоли и получил вообще другие заказ.
[_fields] => Array
        (
            [id] => 523
            [order_id] => 515
            [user_id] => 208
            [createdon] => 2024-07-21 11:38:48
            [updatedon] => 
            [receiver] => Пример ФИО
            [phone] => +79999999
            [email] => test@test.test
            [country] => 
            [index] => 
            [region] => 
            [city] => 
            [metro] => 
            [street] => 
            [building] => 
            [entrance] => 
            [floor] => 
            [room] => 
            [comment] => 
            [text_address] => 
            [properties] => 
        )
То есть я запросил данные заказа 523, а мне вернулся заказ 515.
Что за id и order_id?
ни в modx логах, ни в логах php ошибок в процессе формирования не возникает (только что проверил и под гостем и под админом).
В логах проскакивают ошибки и notice, но они связаны с другими страницами, модулями и возникают совершенно в другие временные эпизоды.
да, передавались не те. Еще одну особенность обнаружил: всё вышеописанное происходит, когда я тестирую из-под админа. Если же пробую всё то же самое из-под гостя, то объект $user возвращает NULL.
При этом в админке если проверять заказ, то там данные верны (имя записывает то, что указано, если почта уникальный — создается новый пользователь, если почта уже есть в базе, то цепляется к существующему пользователю).
Как так происходит не понимаю…
Да, если вводится уникальная почту, то новый пользователь создаётся.

Идеи есть, куда копать, как разобраться?

Кстати, в объекте $user если смотреть данные вложенных объектов (modRequest, msProductRemains), то там данные покупателя корректные.
да, так и сделал:
внутри функции filterDefault дописал
foreach ($resources as $id) {
				    
				    $remains = $this->modx->getCollection('msprRemains', array('product_id' => $id));
                	$remainsResult = array();
                	foreach ($remains as $remain) {
						$options = $remain->get('options');
                		$remainsResult[$options['size']] = array(
                			'id'      => $remain->get('id'),
                			'remains' => (int) $remain->get('remains')
                		);
                	}
				    
					if (isset($tmp[$id])) {
						if ( $remainsResult[$value]['remains'] > 0 ) {
							$matched[] = $id;
						}
					}
				}
потыкал, вроде, корректно работает. Но в вызове всё равно нужен leftJoin из документации.
нагуглил два варианта:
этот:
$parent = 2;

$query = $modx->newQuery('modResource');
$query->where(array('parent' => $parent));
$childs = $modx->getCollection('modResource',$query);

foreach ($childs as $child) {
  $child->set('class_key','msProduct');
  $result = $child->save();
  if(!$result){
      echo 'Error for id='.$child->get('id');
  }
}
echo 'Done!';
и такой, более простой:
$parent = 2; 
foreach ($modx->getIterator('modResource', array('parent' => $parent)) as $resource) {
	$resource->set('class_key','msProduct');
}
Оба работают, но, также, оба в лог высыпают ошибку:
(ERROR in modProcessor::run @ /home/s17279/www/core/model/modx/modprocessor.class.php: 177) Flat file processor support is deprecated since version 2.7.0.


Я так понимаю, какая-то устаревшая функция используется? Какая можете подсказать? Не критично, но всё же
Спасибо за ответ.
Поправь, если ошибусь. Тут идет завязка именно на свойства товаров в минишопе, т.е. они где-то в какой-то момент были все заданы, а потом при создании ресурса (назовем его категорией) во вкладке суперселекта выбираем нужные? Не понял, где и каким образом при формировании списка опций устанавливается вид отображения опции (список, чекбокс и т.п.)?

если, предположим, постараться обойтись без минишопа, то можно ли всё это дело завязать на обычные ТВ? И как-то можно создавать эти ТВ не из обычной вкладки, а наподобие опций минишопа?
Мне кажется, для таких целей надо использовать migx.
На его основе можно создавать так называемые «повторяющиеся» строки (repeatable field), т.е. каждому ресурсу задавать столько сколько нужно при создании/редактировании.
Хранится все это в виде json, и дёргаться бд будет один раз для всех полей, а не 1 ТВ — 1 запрос.
выводится тоже, одним вызовом все что есть.

вроде так, а вот код-пример уже подсказать не смогу.