Модуль просмотра заказов из evoShop

Надо было сделать простой магазин без оплат и т.д. Решил попробовать evoShop.
Достаточно простая настройка через js, минимум кода вообще. А модуля управления заказами нет, но они в базу пишутся, неплохо было бы их хотя бы просматривать.

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



Функционал простейший — просмотр таблицы с заказами, и возможность удаления строки, можно, разумеется, расширить за счет смены статусов и т.п. — поля для статуса в БД есть, но лучше подождать официальный модуль.

Код модуля
if(IN_MANAGER_MODE!='true' && !$modx->hasPermission('exec_module')) die('<b>INCLUDE_ORDERING_ERROR</b><br /><br />Please use the MODX Content Manager instead of accessing this file directly.');

$moduleurl = 'index.php?a=112&id='.$_GET['id'].'&';

$txt = $modx->runSnippet('DocLister',   array( 'controller' => 'onetable', 
										  'table' => 'evoshop_orders', 
										  'idField' => 'id', 
										  'tpl' => '@CODE:<tr><td>[+id+]</td><td>[+orderdata+]</td><td><b>[+price+]</b></td><td>[+date+]</td><td>[+email+]</td><td>[+phone+]</td><td align="center"><a href="'.$moduleurl.'action=remove&eid=[+id+]"><i class="fa fa-trash-o"></i></a></td></tr>',
											'orderBy'=>'id ASC', 
											  'selectFields'=>'id,price,date,email,phone,content',
											  'showParent'=>'-1',
											  'idType'=>'documents',
											  'ignoreEmpty'=>'1',
											 	'prepare'=>'shoptable_prepare'
										 ));	

switch ($_GET['action']) {
		case 'remove':
		$id = intval($_REQUEST['eid']);
		$table = $modx->getFullTableName('evoshop_orders');
		$sql = "delete from $table where id=$id";
        $result = $modx->db->query($sql);   

		if ($result){
			header( 'Location: '.$moduleurl.'delete=success', true, 301 );
		} else {
			header( 'Location: '.$moduleurl.'delete=fail', true, 301 );
		}
		break;
}

?>
<!DOCTYPE html>
<html>
<head>
    <title>Просмотр заказов</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <meta name="viewport" content="initial-scale=1.0,user-scalable=no,maximum-scale=1,width=device-width">
    <meta name="theme-color" content="#1d2023">
    <link rel="stylesheet" type="text/css" href="media/style/default/style.css?v=1.3.6">
	<link rel="stylesheet" type="text/css" href="media/style/common/font-awesome/css/font-awesome.min.css?v=4.7.0">
    <script src="media/script/jquery/jquery.min.js" type="text/javascript"></script>
</head>
<body>
	<div class="container container-body">
		<h1>Инфомация о заказах</h1>
		<p>Внимание! Удаление заказа невозможно отменить!</p>
		<? if ($_GET['delete']){
			switch ($_GET['delete']) {
			case 'success':
				$message='Запись удалена успешно';
				break;
			case 'fail':
				$message='Чет не очень вышло';
				break;
			}
			echo "<p>$message</p>";
		}?>
		<table width="100%" class="sortabletable">
			<thead>
				<tr>
					<th width="1">id</th>
					<th>Содержание</th>
					<th>Стоимость</th>
					<th>Дата</th>
					<th>E-mail</th>
					<th>Телефон</th>
					<th></th>
				</tr>
			</thead>
			<tbody>
				<? echo $txt;?>
			</tbody>
		</table>
	</div>
</body>
</html>


prepare-сниппет shoptable_prepare для форматирования списка товаров в ячейке состава заказа (подсмотрел в аналогичный при отправке письма в evoShop)
<?php
$content = $data['content'];
$itemsArr = json_decode($content, true);	
foreach($itemsArr as $k => $v){
	$evoShopItems .='<li><b><a target="_blank" href='.$modx->config['site_url'].$v['link'].'>'.$v['name'].'</a></b> x '.$v['quantity'].' шт, <b>'.$v['price'].'</b> руб</li>';
	$total = $total + ($v['quantity']*$v['price']);
}
$evoShopItems .= '</ul>';

$data['orderdata'] = $evoShopItems;
return serialize($data);

5 комментариев

avatar
return serialize($data);


Можно без serialize, просто return $data.
avatar
О спасибо :) уже лучше и приятней ) если есть жеаление могу кинуть сырой код модуля на базе webix если оформите будет гуд а то никак не доберусь :(
avatar
Боюсь, что мне это не по зубам, нету системного подхода, да и знания в программировании у меня никакие, я лучше донат отправлю :)
avatar
А можно я попробую?
avatar
Напиши плз в почту или телеграмм
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.