Решение предназначенное для вывода товаров последнего заказа в магазине. Позволит пользователям увидеть когда был сделан последний заказ и что купили.
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
);
}
$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="http://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>
В стандартном макете "Корпорация" это выглядит так: