mngatoff

mngatoff

Был в сети 11 января 2024, 00:10
Заказы не принимаю
$raw = $this->modx->getCollection('msprRemains', array('product_id' => $product_id));
			
$rem = false;
foreach ($raw as $one) {
	$compare = $one->get('options');
	if ($where == $compare) {
		$rem = $one;
		break;
	}
}
вот так вот у меня заработало. Нестрогое сравнение массивов плюет на тип значений и порядок ключей, что меня полностью устраивает)
Здравствуйте, Сергей!

вылез очень серьезный и глупый баг, связанный с тем, что данные хранятся json строкой.
кейс: используются color,size
остатки импортированы из таблицы.
размеры у кроссовок, например: 34, 34.5, 35, 35.5
в таблице экселя 34 это число, а 34.5 — строка. Так это и пишется в базу — «size»:34 и «size»:«34.5»
а дальше начинается жесть, потому что размер 34 (и все целые числа) не добавить в корзину, хотя остатки есть!
лезу в плагин — вижу метод getRemains
лезу в класс — и в этом методе вижу ПРЯМОЕ СРАВНЕНИЕ JSON строки, сформированной тут же, со строкой из базы!
$rem = $this->modx->getObject('msprRemains', array(
	'product_id' => $product_id
	,'options' => $this->modx->toJSON($where)
));
я понимаю, что как иначе выбрать из базы, но выходит реализация в корне неверная: в скрипте массив собирается из данных post-запроса, а там всё — строки. И в итоге мы пытаемся сравнить «size»:«34» из скрипта с «size»:34 из базы. А поскольку это строка, и ей плевать на сами данные, получаем ошибку.

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

в связи с этим предлагаю изменить метод getRemains — получать там сначала всю коллекцию остатков данного товара, а потом циклом проходить по ней с приведением типов, а не тупо сравнивать строку. Дольше, зато работать будет.
как бы исключать из списка города, в которые доставка не работает? или сообщение выводить — что сюда нельзя?

спасибо, про селект понял.

и еще, было бы здорово добавить функционал выгрузки заказов в сдэк — либо через интеграцию, либо хотя бы в виде экспорта таблицы в нужном формате
я что-то недоразобрался… у меня в селекто вообще нет городов, а в автокомплите всякая шушера — вводишь «Москва», получаешь всё что угодно кроме москвы — все пригороды и т д. Даже если прям написать «Москва», выбирается пригород. в том числе куча мест, при выборе которых не меняется сумма заказа. То есть, туда видимо не доставляют этим способом. Как бы это пофиксить? где я неправ?