Вывод содержимого корзины конкретного пользователя — различия между версиями
Davidov (обсуждение | вклад) (Новая страница: «В системе UMI.CMS нет функционала по выводу содержимого корзины конкретного пользователя. Эт…») |
(нет различий)
|
Версия 14:34, 4 июня 2012
В системе UMI.CMS нет функционала по выводу содержимого корзины конкретного пользователя. Эта функция весьма полезна и позволит проводить мониторинг того, что люди в данный момент собираются купить. Для реализации такого функционала доработаем макрос %emarket order()%. Скопируем код оригинального макроса в файл ~/classes/modules/emarket/__custom.php после строки //TODO: Write here your own macroses и внесём необходимые изменения. Наш код будет выглядеть примерно так:
<?php
public function getBasketOrderByUserId($customerId,$template = 'default'){
//----------наш код--------------------------------------------------
$cmsController = cmsController::getInstance();
$domain = $cmsController->getCurrentDomain();
$domainId = $domain->getId();
$sel = new selector('objects');
$sel->types('object-type')->name('emarket', 'order');
$sel->where('customer_id')->equals($customerId);
$sel->where('domain_id')->equals($domainId);
//$sel->where('status_id')->isnull(true);
$sel->order('id')->desc();
$result = $sel->result();
$order=$result[0];
$orderId=$order->id;
//-------------------------------------------------------------------
if(!$template) $template = 'default';
$permissions = permissionsCollection::getInstance();
$orderId = (int) ($orderId ? $orderId : getRequest('param0'));
if(!$orderId) {
throw new publicException("You should specify order id");
}
$order = order::get($orderId);
if($order instanceof order == false) {
throw new publicException("Order #{$orderId} doesn't exists");
}
if(!$permissions->isSv() && ($order->getName() !== 'dummy') &&
(customer::get()->getId() != $order->customer_id) &&
!$permissions->isAllowedMethod($permissions->getUserId(), "emarket", "control")) {
throw new publicException(getLabel('error-require-more-permissions'));
}
list($tpl_block, $tpl_block_empty) = def_module::loadTemplates("emarket/".$template,
'order_block', 'order_block_empty');
$discount = $order->getDiscount();
$totalAmount = $order->getTotalAmount();
$originalPrice = $order->getOriginalPrice();
$actualPrice = $order->getActualPrice();
$deliveryPrice = $order->getDeliveryPrice();
if($originalPrice == $actualPrice) {
$originalPrice = null;
}
$discountAmount = ($originalPrice) ? $originalPrice + $deliveryPrice - $actualPrice : 0;
$result = array(
'attribute:id' => ($orderId),
'xlink:href' => ('uobject://' . $orderId),
'customer' => ($order->getName() == 'dummy') ? null : $this->renderOrderCustomer($order, $template),
'subnodes:items'=> ($order->getName() == 'dummy') ? null : $this->renderOrderItems($order, $template),
'summary' => array(
'amount' => $totalAmount,
'price' => $this->formatCurrencyPrice(array(
'original' => $originalPrice,
'delivery' => $deliveryPrice,
'actual' => $actualPrice,
'discount' => $discountAmount
))
)
);
if ($order->number) {
$result['number'] = $order->number;
$result['status'] = selector::get('object')->id($order->status_id);
}
if(sizeof($result['subnodes:items']) == 0) {
$tpl_block = $tpl_block_empty;
}
$result['void:total-price'] = $this->parsePriceTpl($template, $result['summary']['price']);
$result['void:delivery-price'] = $this->parsePriceTpl($template, $this->formatCurrencyPrice(array('actual' => $deliveryPrice)));
$result['void:total-amount'] = $totalAmount;
$result['void:discount_id'] = false;
if($discount instanceof discount) {
$result['discount'] = array(
'attribute:id' => $discount->id,
'attribute:name' => $discount->getName(),
'description' => $discount->getValue('description')
);
$result['void:discount_id'] = $discount->id;
}
return def_module::parseTemplate($tpl_block, $result, false, $order->id);
}
?>
В нём добавлены строки, которые получают id заказа, который является текущей корзиной пользователя, id которого указали в качестве первого параметра. Шаблонами он оперирует теми же что и макрос %emarket order()%. Не забудьте также, что метод нужно прописать в permissions.custom.php, чтобы можно было работать с ним не только супервайзеру.