Последний заказ

Решение предназначенное для вывода товаров последнего заказа в магазине. Позволит пользователям увидеть когда был сделан последний заказ и что купили.
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() &lt; 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>

В стандартном макете "Корпорация" это выглядит так:

Не нашли ответ на свой вопрос в документации? Направьте обращение в службу поддержки или онлайн чат.

Комментарии

  • Последний заказ

    Здравствуйте!
    Подскажите, как в данном примере вывести количество товара и дополнительное свойство товара.

    20.11.2014 01:06:17
    rozamimoza
    rozamimoza

    Без темы

    Работа с дополнительными свойствами описана тут: http://www.hostcms.ru/forums/2/7143/

    Количество идет по умолчанию, просто выводите в XSL.

    20.11.2014 08:56:12
    alexander.egorov

    Последний заказ

    А вот дополнительные свойства товара в XML как раз присутствуют. Вот только если выводить не последний заказ, а (например) последние 10 заказов, то вместе со всеми товарами в всех десяти заказах выводятся дополнительные свойства последнего товара в последнем заказе, а у остальных товаров как-бы своих свойств и нет. Хотя в XML они присутствуют.

    20.11.2014 23:57:08
    rozamimoza
    rozamimoza

    Последний заказ

    Здравствуйте, Александр!
    Возможно я что-то делаю не так, но в XML количество товара я не наблюдаю.
    Соответственно и вывести не получается.
    Вывожу так:

    Результат нулевой.

    20.11.2014 23:21:46
    rozamimoza
    rozamimoza

    Без темы

    К сожалению, не готов вести переписку в комментариях о проблемах с выводом свойств. Для этого есть форум и поддержка. Пишите там.

    21.11.2014 16:17:39
    alexander.egorov
  • Последний заказ

    Здравствуйте!
    Полезная штука. Хотелось бы несколько расширить данный функционал.

    18.11.2014 23:10:45
    rozamimoza
    rozamimoza