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

Модератор
#
Последний заказ
Решение предназначенное для вывода товаров последнего заказа в магазине. Позволит пользователям увидеть когда был сделан последний заказ и что купили.

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() &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>


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

Вы только что начали читать предложение, чтение которого вы уже заканчиваете.
#
Re: Последний заказ
не работает...
CASHBOOM.ru
Модератор
#
Re: Последний заказ
Это печально.
Вы только что начали читать предложение, чтение которого вы уже заканчиваете.
#
Re: Последний заказ
сделал все по инструкции. а на странице выводиться весь код...
CASHBOOM.ru
#
Re: Последний заказ
Здравствуйте!
Все замечательно работает, вот только хотелось бы вывести количество для каждого товара в заказе. Александр Егоров написал, что количество выводится по умолчанию, достаточно сделать вывод количества в XSL шаблоне. Но в XML количества товара я не вижу, такого параметра quantity там просто нет.
Подскажите, как все-таки вывести количество товара?
#
Re: Последний заказ
Нужно переписать код Если выводишь к примеру по 3 заказа товары не как не связать...
// Последний заказ
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;
               $oShop_Order->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();
   }
}
Skype:ferdinant1988 ICQ:311960596 E-mail: ferdinant@i.ua
#
Re: Последний заказ
Подскажите как правильно построить запрос:
Нужно последние N товаров заказанных в магазине которые есть в наличии. С отключением всего не нужного в XML
Skype:ferdinant1988 ICQ:311960596 E-mail: ferdinant@i.ua
#
Re: Последний заказ
ferdinant,
$Shop_Controller_Show = new Shop_Controller_Show(Core_Entity::factory('Shop', 123));

$Shop_Controller_Show
   ->xsl(
      Core_Entity::factory('Xsl')->getByName('МагазинПоследниеТоварыЗаказов')
   )
   ->group(FALSE)
   ->groupsMode('none')
   ->warehouseMode('in-stock') // только товары в наличии
   //->forbidSelectModifications()
   ->limit(4);

$dateTime = Core_Date::timestamp2sql(strtotime('-7 day', time()));

$Shop_Controller_Show->shopItems()
   ->queryBuilder()
      ->select('shop_items.*')
      ->join('shop_order_items', 'shop_order_items.shop_item_id', '=', 'shop_items.id', array(
         array('AND' => array('shop_order_items.deleted', '=', 0)),
      ))
      ->join('shop_orders', 'shop_orders.id', '=', 'shop_order_items.shop_order_id', array(
         array('AND' => array('shop_orders.canceled', '=', 0)),
         array('AND' => array('shop_orders.deleted', '=', 0)),
      ))
      //->where('shop_orders.datetime', '>=', $dateTime) // за последние 7 дней
      //->where('shop_orders.paid', '=', 1) // только оплаченные заказы
      ->clearOrderBy()
      ->orderBy('shop_order_items.id','DESC')
      ->groupBy('shop_items.id')
;

$Shop_Controller_Show->show();
www.morozovpimnev.ru - создание, поддержка и продвижение сайтов | Наш канал https://asmp.su/channel
Авторизация