MIGO Web-Development - разработка и cоздание сайтов в Киеве, Украине

Создание сайтов, поисковое продвижение в Google. Сопровождение, тех.поддержка


звонить: +38 (093) 636 78 08
писать: web@migo.com.ua


Вывод заказов пользователя и товаров заказа для minishop2 в MODX

Вывод заказов пользователя и товаров заказа для minishop2 в MODX

Создаем снипеты и чанки для вывода перечня заказов пользователя и товаров в заказах для minishop2 в MODX

Возникла необходимость вывода заказов клиента и перечня товаров из этих заказов в Личном кабинете пользователя. На маркетплейсе дополнений для MODX MODSTORE.PRO есть конечно замечательное дополнение Office которое, помимо нужного мне функционала, имеет и ряд других полезных плюшек, но поскольку во-первых, дополнительные функции мне без надобности, а во-вторых, данное дополнение стоит довольно не дешево - было принято решение своими силами интегрировать нужный функционал…

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

1) Начнем из создания сниппета msOrders для вывода заказов текущего пользователя:

<?php
  // снипет выводит заказы текущего пользователя
  $user_id = $modx->user->get('id');
  $tpl = $modx->getOption('tpl',$scriptProperties,'tpl.order');

  // подхватываем заказы текущего пользователя
  $q = $modx->newQuery('msOrder', array('user_id' => $user_id));
  $results = $modx->getCollection('msOrder', $q);

  // выводим или чанками или предупреждением что заказов пока нет
  foreach ($results as $result) {
    if ( $result ) {
      $resultArray = $result->toArray();
      $output .= $modx->getChunk($tpl,$resultArray);
    } else {
      $output = 'У вас пока еще нет заказов.';
    }
  }
  return $output;

2) Далее создаем чанк tpl.order для отображения заказов на сайте:

<div>
  <div> Заказ <span>[[+num]]</span> от <span>[[+createdon]]</span> года</div>
  <div>
    [[!msOrdersProducts? 
      &order=[[+id]]
      &tpl=`tpl.order_row`
      &tpl_empty=`tpl.order_row_empty`
    ]]
  </div>
</div>

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

3) Теперь сниппет msOrdersProducts для вывода перечня данных товаров в заказе:

<?php
// выводит товары заказа.
$tpl = $modx->getOption('tpl',$scriptProperties,'tpl.order_row'); // если товар найден
$tpl_empty = $modx->getOption('tpl',$scriptProperties,'tpl.order_row_empty'); // если товар не найден

// ищем товар по id заказа
$q = $modx->prepare("SELECT * FROM ".$modx->getOption('table_prefix')."ms2_order_products WHERE order_id=".$order);
$q->execute();
$results = $q->fetchAll(PDO::FETCH_ASSOC);

$output;
// перебором либо выводим нужный заказ, либо оповещаем что его уже нет
foreach ($results as $result) {
  $res = $modx->getObject('modResource', array('pagetitle'=>$result[name]));
  
  if ($res) {
    $resArray = $res->toArray();
    $output .= $modx->getChunk($tpl,$resArray);
  } else {
    $prodName = $modx->setPlaceholder('name', $result[name]);
    $output .= $modx->getChunk($tpl_empty);
  }
}
return $output;

4) После чего создаем чанк tpl.order_row для отображения на сайте данных по товару:

<div>
  <span><a href="[[~[[+id]]]]">[[+pagetitle]]</a></span>
  <span>[[+price]] [[%ms2_frontend_currency]]</span>
</div>

5) И напоследок, создаем чанк для отображения товара которого уже нет на сайте:

<div>
  <span>[[+pagetitle]]</span>
  <span>не найден</span>
</div>

На этом все. Как обычно, вопросы и замечания - в комментариях.

Удачи!

проспект И.Мазепы 5 07300 Украина, Киевская обл., г. Вышгород, +38 (093) 636 78 08
Рассказать друзьям:

comments powered by Disqus