Решение предназначенное для вывода товаров последнего заказа в магазине. Позволит пользователям увидеть когда был сделан последний заказ и что купили.
1. Вызов в макете для интернет-магазина:
// Последний заказ if (Core::moduleIsActive('shop') && Core_Array::get(Core_Page::instance()->libParams, 'shopId')) { $oShop = Core_Entity::factory('Shop', Core_Page::instance()->libParams['shopId']); $Shop_Controller_Show = new Shop_Controller_Show( $oShop ); $Shop_Controller_Show ->xsl( Core_Entity::factory('Xsl')->getByName('МагазинПоследнийЗаказ') ) ->groupsMode('none') ->limit(0); $oShop_Orders = $oShop->Shop_Orders; $oShop_Orders ->queryBuilder() ->where('shop_orders.paid', '=', 1) ->clearOrderBy() ->orderBy('shop_orders.id', 'DESC') ->limit(1); $aShop_Orders = $oShop_Orders->findAll(); if (count($aShop_Orders)) { foreach($aShop_Orders as $oShop_Order) { $aShop_Order_Items = $oShop_Order->Shop_Order_Items->findAll(); foreach($aShop_Order_Items as $oShop_Order_Item) { if($oShop_Order_Item->shop_item_id) { $oShop_Item = $oShop_Order_Item->Shop_Item; $Shop_Controller_Show->addEntity( $oShop_Item ->addForbiddenTag('text') ->addForbiddenTag('description') ->addForbiddenTag('shop_producer') ->showXmlComments(FALSE) ->showXmlAssociatedItems(FALSE) ->showXmlModifications(FALSE) ->showXmlSpecialprices(FALSE) ->showXmlTags(FALSE) ->showXmlWarehousesItems(FALSE) ->showXmlSiteuser(FALSE) ->showXmlProperties(FALSE) ); } } $Shop_Controller_Show->addEntity( $oShop_Order
->showXmlCurrency(TRUE)
->showXmlCountry(TRUE)
->showXmlItems(TRUE)
->showXmlDelivery(TRUE)
->showXmlPaymentSystem(TRUE)
->showXmlOrderStatus(TRUE) ); } $Shop_Controller_Show ->itemsForbiddenTags(array('text')) ->show(); } }
2. В CSS макета блок:
.filter{ border: 1px solid rgba(228, 228, 228, 0.82); border-collapse: collapse; border-radius: 4px 4px 4px 4px; box-shadow: 0 1px 1px rgba(217, 215, 207, 0.5); padding: 15px 15px 15px 15px; margin-bottom: 20px; font-size: .8em; color: #888; }
меняется на:
.filter, .lastOrder { border: 1px solid rgba(228, 228, 228, 0.82); border-collapse: collapse; border-radius: 4px 4px 4px 4px; box-shadow: 0 1px 1px rgba(217, 215, 207, 0.5); padding: 15px 15px 15px 15px; margin-bottom: 20px; font-size: .8em; color: #888; } .lastOrder { padding: 0 15px; }
3. В разделе "XSL-шаблоны" создаете шаблон "МагазинПоследнийЗаказ":
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE xsl:stylesheet>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:hostcms="https://www.hostcms.ru/"
exclude-result-prefixes="hostcms">
<xsl:output xmlns="http://www.w3.org/TR/xhtml1/strict" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" encoding="utf-8" indent="yes" method="html" omit-xml-declaration="no" version="1.0" media-type="text/xml"/>
<!-- МагазинПоследнийЗаказ -->
<xsl:decimal-format name="my" decimal-separator="," grouping-separator=" "/>
<xsl:template match="/shop">
<p class="h1 red">Последний заказ</p>
<div class="lastOrder">
<p class="h2">Заказ от <xsl:value-of disable-output-escaping="yes" select="substring(shop_order/payment_datetime, 1, 10)"/> г. </p>
<xsl:apply-templates select="shop_item[position() < 3]"/>
</div>
</xsl:template>
<xsl:template match="shop_item">
<!-- Изображение для товара, если есть -->
<div style="height:{image_small_height + 10}px;">
<xsl:choose>
<xsl:when test="image_small != ''">
<div style = "float:left; margin: 0 15px 10px 0; width:100px">
<a href="{url}" target="_blank"><img src="{dir}{image_small}" /></a>
</div>
</xsl:when>
<xsl:otherwise>
<div style = "float:left;">
<img src="/images/no-image.png" />
</div>
</xsl:otherwise>
</xsl:choose>
<div style="margin-top: 15px">
<a href="{url}"><xsl:value-of disable-output-escaping="yes" select="name"/></a>
<br/><br/>
<span class="category_name">
<xsl:value-of select="format-number(price, '### ##0,00', 'my')"/><xsl:text> </xsl:text><xsl:value-of select="currency"/><xsl:text> </xsl:text>
</span>
</div>
</div>
<xsl:if test="position() != last()">
<hr/>
</xsl:if>
<div style="clear:both"></div>
</xsl:template>
</xsl:stylesheet>
В стандартном макете "Корпорация" это выглядит так:
Здравствуйте!
Подскажите, как в данном примере вывести количество товара и дополнительное свойство товара.
Работа с дополнительными свойствами описана тут: http://www.hostcms.ru/forums/2/7143/
Количество идет по умолчанию, просто выводите в XSL.
А вот дополнительные свойства товара в XML как раз присутствуют. Вот только если выводить не последний заказ, а (например) последние 10 заказов, то вместе со всеми товарами в всех десяти заказах выводятся дополнительные свойства последнего товара в последнем заказе, а у остальных товаров как-бы своих свойств и нет. Хотя в XML они присутствуют.
Здравствуйте, Александр!
Возможно я что-то делаю не так, но в XML количество товара я не наблюдаю.
Соответственно и вывести не получается.
Вывожу так:
Результат нулевой.
К сожалению, не готов вести переписку в комментариях о проблемах с выводом свойств. Для этого есть форум и поддержка. Пишите там.
Здравствуйте!
Полезная штука. Хотелось бы несколько расширить данный функционал.