Категории

Личный кабинет пользователя в интернет-магазине MODx Revolution + Shopkeeper

  • Создаём сниппет include и вставляем следующее содержимое:
<?php
if (file_exists(MODX_BASE_PATH.$file)){
   $o = include MODX_BASE_PATH.$file;
}else{ $o = 'File not found at: '.$file; }
return $o;
  • Создаём файл core/components/user_orders.php и вставляем туда следующее содержимое:
<?php
 
/*
 
Выводит заказы пользователя
 
*/
 
@date_default_timezone_set('Europe/Moscow');
@setlocale (LC_ALL, 'ru_RU.UTF-8');
 
$output = '';
 
$usergroup = $modx->getOption('usergroup',$scriptProperties,'Покупатели');
$limit = 0;
$start = 0;
 
$user = $modx->user;
$user_id = $modx->user->get('id');
$profile = $user->getOne('Profile');
if(!$profile || !$user->isMember($usergroup)) return $output;
 
require_once MODX_CORE_PATH.'components/shopkeeper/model/shopkeeper.class.php';
require_once MODX_CORE_PATH."components/shopkeeper/model/shk_mgr.class.php";
$SHKmanager = new SHKmanager($modx);
$SHKmanager->getModConfig();
$SHKmanager->config['orderDataTpl'] = $modx->getOption('orderDataTpl',$scriptProperties,'@FILE orderData.tpl');
$SHKmanager->config['additDataTpl'] = $modx->getOption('additDataTpl',$scriptProperties,'@FILE additData.tpl');
 
$c = $modx->newQuery('SHKorder');
$c->where(array('userid:=' => $user_id));
$count = $modx->getCount('SHKorder',$c);
$c->sortby('date','DESC');
if ($limit) $c->limit($limit,$start);
$orders = $modx->getCollection('SHKorder', $c);
 
//Повтор заказа
if(isset($_GET['action']) && $_GET['action']=='repeat'){
     
    $order_id = isset($_GET['id']) ? trim($_GET['id']) : 0;
    if($order_id){
         
        $order = $modx->getObject('SHKorder',array('id'=>$order_id, 'userid' => $user_id));
        if($order){
             
            $new_order = $modx->newObject('SHKorder');
            $new_order->fromArray($order->toArray());
            $new_order->set('status',0);
            $new_order->set('date',strftime('%Y-%m-%d %H:%M:%S'));
            $new_order->save();
             
        }
        $modx->sendRedirect($modx->makeUrl($modx->resource->get('id')));
        exit;
         
    }
 
}
 
//Вывод заказов
if($count>0){
     
    $index = 0;
    foreach($orders as $order){
         
        $purchases = unserialize($order->get('content'));
        $addit_params = unserialize($order->get('addit'));
        $date = $order->get('date');
        $allowed = $order->get('allowed');
         
        $orderData = $SHKmanager->getOrderData($purchases,$addit_params);
         
        $chunkArr = array(
            'index' => $index,
            'orderID' => $order->get('id'),
            'date' => $date,
            'status_id' => $order->get('status'),
            'status' => isset($SHKmanager->config['statuses'][$order->get('status')]) ? $SHKmanager->config['statuses'][$order->get('status')][0] : ''
        );
         
        $chunk_data = $SHKmanager->getChunk('@INLINE '.$orderData);
        $output .= $SHKmanager->parseTpl($chunk_data, $chunkArr);
        $index++;
         
    }
 
}
 
return $output;
  • В нужном месте вызываем сниппет include со следующими настройками:
[[!include?
&file=`core/components/user_orders.php`
&usergroup=`Покупатели`
&orderDataTpl=`user_orderDataTpl`
]]
  • Создаём чанк user_orderDataTpl (пример core/components/shopkeeper/elements/chunks/ru/orderData.tpl), в который копируем ниже лежащий код:
<p>Дата заказа: [[+date]]</p>

<table>

[[+loop]]
    [[+name:is=`Доставка`:then=`
    <tr>
        <td>
            [[+s]]<b>[[+name]]</b> [[+shk_delivery]][[+/s]]
        </td>
        <td></td>
        <td>[[+price_total]] [[+currency]]</td>
    </tr>
    `:else=`
    <tr>
        <td>
            [[+s]]
            <b><a href="[[+link]]">[[+name]]</a></b>
            [[+addit_data]]
            [[+/s]]
        </td>
        <td>
            [[+s]][[+count]] шт.[[+/s]]
        </td>
        <td>
            [[+s]][[+price]] [[+currency]][[+/s]]
        </td>
    </tr>
    `]]
[[+end_loop]]
    
    <tr>
        <td align="right" colspan="2"><b>Итого:</b></td>
        <td><b>[[+price_total]] [[+currency]]</b></td>
    </tr>
    
</table>

<br/>
  • Если необходимо повторить заказ, можно ниже в шаблоне указать ссылку, код которой указан ниже:
<a href="[[~[[*id]]]]?action=repeat&id=[[+orderID]]">Повторить заказ</a>

Наверх ↑

закрыть х
Новые уроки на постоянной основе!

Некоторые уроки вы сможете посмотреть на моем канале YouTube, но полноценный доступ только для email-подписчиков. Необходимо подписаться на рассылку, чтобы получать оповещения о новых уроках на почту

  • Fireworks, Photoshop, Illustrator
  • HTML, CSS, JavaScript
  • PHP, MySQL
  • CMS, PHP фреймворки, JS библиотеки
  • Инфобизнес, Email-маркетинг
Бесплатно!

Только для email-подписчиков!