Игорь Игамов

Игорь Игамов

Был в сети Вчера в 11:29
Заказы принимаю
Пообщались и сделали следующее, может кому пригодится.
Добавьте в настройку 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
Здравствуйте. У меня возник вопрос.
Мне необходимо вывести каталог с товарами в модальном окне. Прежде чем приобрести, попробовал на тестовом хостинге это воплотить, товары выводятся, всё гуд, но у меня не работает пагинация, то есть страница обновляется.
Вызов pdopage осуществляется в чанке. При включении ajax в pdopage, товары не появляются вообще.
Не подскажите возможно ли это сделать данным дополнением? Спасибо!
P.S. также пробовал через сниппет с параметрами, тоже самое.
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();
		}
}
Здравствуйте. В обновлении указано что добавили пункты доставок, скажите пожалуйста как их получить?
Как еще получить выбранный город после Ajax запроса? Просто написал свой сниппет, который получает город, но только он работает после перезагрузки.
Спасибо!