Скаут

Скаут

С нами с 22 мая 2017; Место в рейтинге пользователей: #361
Скаут
28 августа 2024, 11:17
0
авторизации нет, но обязательный ввод почты и телефона есть в корзине, так что клиента определить возможно.
Скаут
27 августа 2024, 21:06
0
речь именно про первый заказ.

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

идентификатор адреса — что-то странное, не очень понял где и как он используется… Но получается, что проблема в модуле, неправильно там написан запрос, оттуда и вся возня на два дня… (
Скаут
21 июля 2024, 22:44
0
проблема решилась изменением запроса, а именно
было
$user = $this->modx->getObject('msOrderAddress', $order_id);
сделал
$user = $this->modx->getObject('msOrderAddress', ['order_id' => $order_id]);
Скаут
21 июля 2024, 22:27
0
спасибо за инфу, но нет, не в этом проблема)
Скаут
21 июля 2024, 22:26
0
а, об этом речь, думал какое-то еще логирование)
проверил эти два метода — там всё ок.

Отложил процесс покупки, проблема именно в получении объекта
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?
Скаут
21 июля 2024, 19:21
0
ни в modx логах, ни в логах php ошибок в процессе формирования не возникает (только что проверил и под гостем и под админом).
В логах проскакивают ошибки и notice, но они связаны с другими страницами, модулями и возникают совершенно в другие временные эпизоды.
Скаут
21 июля 2024, 17:40
0
да, передавались не те. Еще одну особенность обнаружил: всё вышеописанное происходит, когда я тестирую из-под админа. Если же пробую всё то же самое из-под гостя, то объект $user возвращает NULL.
При этом в админке если проверять заказ, то там данные верны (имя записывает то, что указано, если почта уникальный — создается новый пользователь, если почта уже есть в базе, то цепляется к существующему пользователю).
Как так происходит не понимаю…
Скаут
21 июля 2024, 10:49
0
Да, если вводится уникальная почту, то новый пользователь создаётся.

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

Кстати, в объекте $user если смотреть данные вложенных объектов (modRequest, msProductRemains), то там данные покупателя корректные.
Скаут
04 июня 2024, 00:57
0
да, так и сделал:
внутри функции 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 из документации.
Скаут
15 мая 2019, 09:56
0
спасибо)
если я правильно понял, то всё же внутри сниппета валидатора можно получить все поля формы
$allFormValues = $formit->request->dictionary->toArray();
Скаут
31 января 2019, 20:53
0
нагуглил два варианта:
этот:
$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.


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

если, предположим, постараться обойтись без минишопа, то можно ли всё это дело завязать на обычные ТВ? И как-то можно создавать эти ТВ не из обычной вкладки, а наподобие опций минишопа?
Скаут
15 апреля 2018, 16:40
0
а как расширение определить? как вариант брать то что идёт после последней точки? или как-то заюзать PATHINFO_EXTENSION
Скаут
26 февраля 2018, 16:29
+1
наверное, преобразовать обе даты при помощи strtotime и дальше использовать операторы "><=".
Скаут
03 февраля 2018, 15:05
0
Мне кажется, для таких целей надо использовать migx.
На его основе можно создавать так называемые «повторяющиеся» строки (repeatable field), т.е. каждому ресурсу задавать столько сколько нужно при создании/редактировании.
Хранится все это в виде json, и дёргаться бд будет один раз для всех полей, а не 1 ТВ — 1 запрос.
выводится тоже, одним вызовом все что есть.

вроде так, а вот код-пример уже подсказать не смогу.
Скаут
28 января 2018, 16:47
0
{if $filters != 'тут ошибка, когда нет фильтров, т.е. сюда надо Нечего фильтровать '}
	{$filters}
	// тут начинка, если фильтры есть: кнопки всякие, элементы верстки блока
{/if}
Скаут
20 января 2018, 18:36
0
Хорошо, спасибо. Попробую. А то в инете находил инструкции просто офигеть с какой последовательностью действий…
Скаут
20 января 2018, 18:12
0
Оффтоп и всё же, смена кодировки по данной инструкции не нарушит таблицу? буквы е/ё не спутаются?