Игорь Игамов

Игорь Игамов

С нами с 05 февраля 2016; Место в рейтинге пользователей: #178
Игорь Игамов
13 октября 2020, 14:26
0
Пообщались и сделали следующее, может кому пригодится.
Добавьте в настройку msstatorders_grid_order_fields поле address_properties
Если вы хотите сделать вывод столбцов меток, нужно написать плагин на событие msStatOrdersOnPrepareObjectRow
пример для utm_source
<?php
if (!is_object($self) OR $self->classKey !== 'msOrder' OR $type !== 'getlist') {
    return;
}
$data = is_array($data) ? $data : array();
$properties = is_array($data['address_properties']) ? $data['address_properties'] : json_decode($data['address_properties'], 1);
$data['utm_source'] = isset($properties['utm_source']) ? $properties['utm_source'] : '';
$modx->event->returnedValues['data'] = $data;
и уже потом в msstatorders_grid_order_fields добавить utm_source
Игорь Игамов
15 июля 2020, 19:59
0
Да, планируется.
В minishop2 есть поле properties :)
Игорь Игамов
12 июля 2018, 02:24
-1
Ну если хотите сделать вывод заказов на своем сайте, имею ввиду не в админке, то ничего сложного в этом нет. Читаете документацию и вперед.
Есть кстати уже готовое, только не приходилось использовать https://modstore.pro/packages/integration/mslistorders
Игорь Игамов
28 декабря 2017, 20:50
0
А пробовали phpThumbOn запускать без кеша?
Игорь Игамов
28 декабря 2017, 19:07
0
А зачем использовать @INLINE?
Игорь Игамов
16 ноября 2017, 21:42
0
Наверное попробую реализовать через AjaxSnippet
Игорь Игамов
16 ноября 2017, 17:39
0
Здравствуйте. У меня возник вопрос.
Мне необходимо вывести каталог с товарами в модальном окне. Прежде чем приобрести, попробовал на тестовом хостинге это воплотить, товары выводятся, всё гуд, но у меня не работает пагинация, то есть страница обновляется.
Вызов pdopage осуществляется в чанке. При включении ajax в pdopage, товары не появляются вообще.
Не подскажите возможно ли это сделать данным дополнением? Спасибо!
P.S. также пробовал через сниппет с параметрами, тоже самое.
Игорь Игамов
02 мая 2017, 16:08
+2
PS Совсем забыл выложить готовый код. Сейчас пользователя не перекидывает на оплату, а просто выводиться страница с его оформленными заказами и там уже ссылки на оплату. А как это сделать, уже совсем другая история :)
Сейчас после оформления заказов формируются след. вида ссылки: domain.ru/cart?msorder=23,24.
Просто нужно скопировать сниппет msGetOrder и немного его переделать :)
<?php
class msTest extends msOrderHandler {
	public function submit($data = array())
		{
			$response = $this->ms2->invokeEvent('msOnSubmitOrder', array(
				'data' => $data,
				'order' => $this,
			));
			if (!$response['success']) {
				return $this->error($response['message']);
			}
			if (!empty($response['data']['data'])) {
					$this->set($response['data']['data']);
			}

			$response = $this->getDeliveryRequiresFields();
			if ($this->ms2->config['json_response']) {
					$response = json_decode($response, true);
			}
			$requires = $response['data']['requires'];

			$errors = array();
			foreach ($requires as $v) {
					if (!empty($v) && empty($this->order[$v])) {
							$errors[] = $v;
					}
			}
			if (!empty($errors)) {
					return $this->error('ms2_order_err_requires', $errors);
			}

			$cart = $this->ms2->cart->get();
			$products = array();
			$partners = array();
			$idOrders = array();
			foreach ($cart as $v) {
			  if(!in_array($v['vendor'],$partners)){
				  $partners[] = $v['vendor'];
			  }
			}
			foreach ($partners as $partner){
				$user_id = $this->ms2->getCustomerId();
				$cart_status = $this->ms2->cart->status();
				$delivery_cost = $this->getCost(false, true);
				$createdon = date('Y-m-d H:i:s');
				$cart_cost = 0;
				$weight_cost = 0;

				// Adding products
				foreach ($this->ms2->cart->get() as $v) {
					if ($partner == $v['vendor']){
						if ($tmp = $this->modx->getObject('msProduct', $v['id'])) {
								$name = $tmp->get('pagetitle');
						} else {
								$name = '';
						}
						/** @var msOrderProduct $product */
						$product = $this->modx->newObject('msOrderProduct');
						$product->fromArray(array_merge($v, array(
								'product_id' => $v['id'],
								'name' => $name,
								'cost' => $v['price'] * $v['count'],
							)));
						$cart_cost = $cart_cost + ($v['price'] * $v['count']); //собираем стоимость заказа для партнера
						$weight_cost = $weight_cost + $v['weight'];
						$products[] = $product;
						$key = md5($v['id'] . $v['price'] . $v['weight'] . $v['vendor'] . (json_encode($v['options'])));
						$remove = $this->ms2->cart->remove($key); //Удаляем товар из корзины
					}
				}
				/** @var msOrder $order */
				$order = $this->modx->newObject('msOrder');
				$order->fromArray(array(
					'user_id' => $user_id,
					'createdon' => $createdon,
					'num' => $this->getNum(),
					'delivery' => $this->order['delivery'],
					'payment' => $this->order['payment'],
					'cart_cost' => $cart_cost,
					'weight' => $weight_cost,
					'delivery_cost' => $delivery_cost,
					'cost' => $cart_cost + $delivery_cost,
					'status' => 0,
					'context' => $this->ms2->config['ctx'],
					'partner' => $partner,
				));
				// Adding address
				/** @var msOrderAddress $address */
				$address = $this->modx->newObject('msOrderAddress');
				$address->fromArray(array_merge($this->order, array(
					'user_id' => $user_id,
					'createdon' => $createdon,
				)));
				$order->addOne($address);
				$order->addMany($products);
				$response = $this->ms2->invokeEvent('msOnBeforeCreateOrder', array(
					'msOrder' => $order,
					'order' => $this,
				));
				if (!$response['success']) {
					return $this->error($response['message']);
				}

				if ($order->save()) {
					$response = $this->ms2->invokeEvent('msOnCreateOrder', array(
						'msOrder' => $order,
						'order' => $this,
				));
				if (!$response['success']) {
					return $this->error($response['message']);
				}
				if (empty($_SESSION['minishop2']['orders'])) {
					$_SESSION['minishop2']['orders'] = array();
				}
				$_SESSION['minishop2']['orders'][] = $order->get('id');	
				// Trying to set status "new"
				$response = $this->ms2->changeOrderStatus($order->get('id'), 1);
				if ($response !== true) {
					return $this->error($response, array('msorder' => $order->get('id')));
				}
				unset($products);
				} else{
					$this->modx->log(1, 'Oh no, the wand failed to save!');
				}
				$idOrders[] = $order->get('id');
		}
			$this->ms2->cart->clean();
			$this->clean();
			/*$this->modx->sendRedirect(
												$this->modx->context->makeUrl(
														$this->modx->resource->id,
														array('msorder' => $response['data']['msorder'])
												)
										);*/
				
						/** @var msPayment $payment */
						/*if ($payment = $this->modx->getObject('msPayment',
								array('id' => $order->get('payment'), 'active' => 1))
						) {
								$response = $payment->send($order);
								if ($this->config['json_response']) {
										@session_write_close();
										exit(is_array($response) ? json_encode($response) : $response);
								} else {
										if (!empty($response['data']['redirect'])) {
												$this->modx->sendRedirect($response['data']['redirect']);
										} elseif (!empty($response['data']['msorder'])) {
												$this->modx->sendRedirect(
														$this->modx->context->makeUrl(
																$this->modx->resource->id,
																array('msorder' => $response['data']['msorder'])
														)
												);
										} else {
												$this->modx->sendRedirect($this->modx->context->makeUrl($this->modx->resource->id));
										}

										return $this->success();
								}
						} 
						else {*/
			if ($this->ms2->config['json_response']) {
				return $this->success('', array('msorder' => implode(",", $idOrders)));
			} else {
				$this->modx->sendRedirect(
					$this->modx->context->makeUrl(
						$this->modx->resource->id,
						array('msorder' => implode(",", $idOrders))
					)
				);
			}
			return $this->success();
			return $this->error();
		}
}
Игорь Игамов
20 апреля 2017, 15:43
0
Спасибо большое за алгоритм!!!
Игорь Игамов
20 апреля 2017, 12:34
0
Ахах ну хорошо, буду думать дальше))

Пока понял только то, что я
return $this->success();
в цикле, а не после его выполнения, из-за этого приходится несколько раз нажимать оформить заказ.
Игорь Игамов
19 апреля 2017, 17:03
1
+2
Вот так получить можно содержимое корзины.
P.S/ смотрите в журнале ошибок
$tmp = $cart->get();
$modx->log(1, print_r($tmp, 1));
Игорь Игамов
16 февраля 2017, 02:14
0
Здравствуйте. В обновлении указано что добавили пункты доставок, скажите пожалуйста как их получить?
Как еще получить выбранный город после Ajax запроса? Просто написал свой сниппет, который получает город, но только он работает после перезагрузки.
Спасибо!
Игорь Игамов
10 февраля 2017, 18:08
0
Московское метро. Только без МЦК.

Просто нет API Яндекс.Метро, ну или я не нашел :c
Игорь Игамов
10 февраля 2017, 17:54
0
Если необходим поиск по карте метро, то могу выслать исходники. (сама схема png + JS)
Что-то сравнение в демо не работает
Игорь Игамов
03 февраля 2017, 20:15
0
Спасибо за смайлики. А не подскажите, как сделать, чтобы в
<code></code>
они не отображались? Спасибо!