ИНТЕРНЕТ-МАГАЗИН / Добавляем в Личный кабинет показ заказанных товаров

Заметка создана: 09 февраля 2025 г.

Код ТДС "Пользователи сайта"

<?php

if (!Core::moduleIsActive('siteuser'))
{
    ?>
    <h1>Пользователи сайта</h1>
    <p>Функционал недоступен, приобретите более старшую редакцию.</p>
    <p>Модуль &laquo;<a href="http://www.hostcms.ru/hostcms/modules/users/">Пользователи сайта</a>&raquo; доступен в редакциях &laquo;<a href="http://www.hostcms.ru/hostcms/editions/corporation/">Корпорация</a>&raquo; и &laquo;<a href="http://www.hostcms.ru/hostcms/editions/business/">Бизнес</a>&raquo;.</p>
    <?php
    return ;
}

$Siteuser_Controller_Show = Core_Page::instance()->object;

$xslUserAuthorization = Core_Array::get(Core_Page::instance()->libParams, 'userAuthorizationXsl');

$oSiteuser = $Siteuser_Controller_Show->getEntity();

if ($oSiteuser->id)
{
    if (Core::moduleIsActive('shop'))
    {
        /* Последние заказы пользователя */
        $oShop_Orders = Core_Entity::factory('Shop_Order');

        $oShop_Orders
            ->queryBuilder()
            ->leftJoin('shops', 'shop_orders.shop_id', '=', 'shops.id')
            ->where('shop_orders.siteuser_id', '=', $oSiteuser->id)
            ->where('shops.site_id', '=', CURRENT_SITE)
            ->limit(6)
            ->clearOrderBy()
            ->orderBy('shop_orders.id', 'DESC');

        $aShop_Orders = $oShop_Orders->findAll(FALSE);

        foreach ($aShop_Orders as $oShop_Order)
        {
            $sum = $oShop_Order->sum();

            $aShop_Order_Items = $oShop_Order->Shop_Order_Items->findAll(FALSE);

            foreach ($aShop_Order_Items as $oShop_Order_Item)
            {
                $oShop_Order->addEntity(
                    $oShop_Order_Item->clearEntities()
                );
            }

            $oShop_Order
                ->showXmlOrderStatus(TRUE)
                ->showXmlDelivery(FALSE);

            //Currency
            $oShop_Currency = Core_Entity::factory('Shop_Currency', $oShop_Order->shop_currency_id);

            if (!is_null($oShop_Currency))
            {
                $oShop_Order->addEntity(
                    $oShop_Currency
                );
            }

            $Siteuser_Controller_Show->addEntity(
                $oShop_Order
                    ->addEntity(
                        Core::factory('Core_Xml_Entity')
                        ->name('sum')
                        ->value($sum)
                )
            );



        }
    }

    if (Core::moduleIsActive('maillist'))
    {
        /* Почтовые рассылки */
        $aMaillists = $oSiteuser->getAllowedMaillists();

        if (count($aMaillists))
        {
            $Siteuser_Controller_Show->addEntity(
                    $oMaillistEntity = Core::factory('Core_Xml_Entity')
                        ->name('maillists')
                );

            foreach ($aMaillists as $oMaillist)
            {
                $oMaillist_Siteuser = $oSiteuser->Maillist_Siteusers->getByMaillist($oMaillist->id);

                $oMaillistEntity->addEntity(
                    $oMaillist->clearEntities()
                );

                if (!is_null($oMaillist_Siteuser))
                {
                    $oMaillist->addEntity(
                        $oMaillist_Siteuser->clearEntities()
                    );
                }
            }
        }
    }

    if (Core::moduleIsActive('helpdesk'))
    {
        $aHelpdesks = Core_Entity::factory('Site', CURRENT_SITE)->Helpdesks->findAll(FALSE);

        if (count($aHelpdesks))
        {
            $Siteuser_Controller_Show->addEntity(
                $oTicketEntity = Core::factory('Core_Xml_Entity')
                    ->name('helpdesk_tickets')
            );

            $oHelpdesk = $aHelpdesks[0];

            $oHelpdesk_Tickets = $oHelpdesk->Helpdesk_Tickets;

            $oHelpdesk_Tickets
                ->queryBuilder()
                ->where('helpdesk_tickets.siteuser_id', '=', $oSiteuser->id)
                ->limit(5)
                ->clearOrderBy()
                ->orderBy('helpdesk_tickets.id', 'DESC');

            $aHelpdesk_Tickets = $oHelpdesk_Tickets->findAll(FALSE);

            foreach ($aHelpdesk_Tickets as $oHelpdesk_Ticket)
            {
                $oTicketEntity->addEntity(
                    $oHelpdesk_Ticket->clearEntities()
                        ->showXmlSiteuser(FALSE)
                );

                $oHelpdesk_Messages = $oHelpdesk_Ticket->Helpdesk_Messages;
                $oHelpdesk_Messages
                    ->queryBuilder()
                    ->clearOrderBy()
                    ->orderBy('helpdesk_messages.id', 'ASC')
                    ->limit(1);

                $aHelpdesk_Messages = $oHelpdesk_Messages->findAll(FALSE);

                if (count($aHelpdesk_Messages))
                {
                    $oHelpdesk_Message = $aHelpdesk_Messages[0];

                    $oHelpdesk_Ticket->addEntity(
                        Core::factory('Core_Xml_Entity')
                            ->name('helpdesk_ticket_subject')
                            ->value($oHelpdesk_Message->subject)
                    );
                }
            }
        }
    }

    $Siteuser_Controller_Show->addEntity(
        Core::factory('Core_Xml_Entity')
            ->name('item')
            ->addEntity(
                Core::factory('Core_Xml_Entity')->name('name')->value('Личная информация')
            )
            ->addEntity(
                Core::factory('Core_Xml_Entity')->name('path')->value('registration/')
            )
            ->addEntity(
                Core::factory('Core_Xml_Entity')->name('image')->value('/images/user/info.png')
            )
    );

    if (Core::moduleIsActive('maillist'))
    {
        $Siteuser_Controller_Show->addEntity(
            Core::factory('Core_Xml_Entity')
                ->name('item')
                ->addEntity(
                    Core::factory('Core_Xml_Entity')->name('name')->value('Почтовые рассылки')
                )
                ->addEntity(
                    Core::factory('Core_Xml_Entity')->name('path')->value('maillist/')
                )
                ->addEntity(
                    Core::factory('Core_Xml_Entity')->name('image')->value('/images/user/maillist.png')
                )
        );
    }

    if (Core::moduleIsActive('helpdesk'))
    {
        $Siteuser_Controller_Show->addEntity(
            Core::factory('Core_Xml_Entity')
                ->name('item')
                ->addEntity(
                    Core::factory('Core_Xml_Entity')->name('name')->value('Служба техподдержки')
                )
                ->addEntity(
                    Core::factory('Core_Xml_Entity')->name('path')->value('helpdesk/')
                )
                ->addEntity(
                    Core::factory('Core_Xml_Entity')->name('image')->value('/images/user/helpdesk.png')
                )
        );
    }

    if (Core::moduleIsActive('shop'))
    {
        $Siteuser_Controller_Show->addEntity(
            Core::factory('Core_Xml_Entity')
                ->name('item')
                ->addEntity(
                    Core::factory('Core_Xml_Entity')->name('name')->value('Мои заказы')
                )
                ->addEntity(
                    Core::factory('Core_Xml_Entity')->name('path')->value('order/')
                )
                ->addEntity(
                    Core::factory('Core_Xml_Entity')->name('image')->value('/images/user/order.png')
                )
        );

        if (Core::moduleIsActive('siteuser'))
        {
            $oAffiliate_Plans = Core_Entity::factory('Site', CURRENT_SITE)->Affiliate_Plans;

            $aSiteuserGroupId = array();

            $oSiteuser_Groups = $oSiteuser->Siteuser_Groups->findAll();
            foreach ($oSiteuser_Groups as $oSiteuser_Group)
            {
                $aSiteuserGroupId[] = $oSiteuser_Group->id;
            }

            if (count($aSiteuserGroupId))
            {
                $oAffiliate_Plans->queryBuilder()
                    ->where('siteuser_group_id', 'IN', $aSiteuserGroupId);

                $aAffiliate_Plans = $oAffiliate_Plans->findAll();

                if (count($aAffiliate_Plans))
                {
                    $Siteuser_Controller_Show->addEntity(
                        Core::factory('Core_Xml_Entity')
                            ->name('item')
                            ->addEntity(
                                Core::factory('Core_Xml_Entity')->name('name')->value('Партнерские программы')
                            )
                            ->addEntity(
                                Core::factory('Core_Xml_Entity')->name('path')->value('affiliats/')
                            )
                            ->addEntity(
                                Core::factory('Core_Xml_Entity')->name('image')->value('/images/user/partner.png')
                            )
                    );
                }
            }
        }
    }

    if (Core::moduleIsActive('siteuser'))
    {
        $Siteuser_Controller_Show->addEntity(
            Core::factory('Core_Xml_Entity')
                ->name('item')
                ->addEntity(
                    Core::factory('Core_Xml_Entity')->name('name')->value('Лицевой счет')
                )
                ->addEntity(
                    Core::factory('Core_Xml_Entity')->name('path')->value('account/')
                )
                ->addEntity(
                    Core::factory('Core_Xml_Entity')->name('image')->value('/images/user/account.png')
                )
        );
    }

    if (Core::moduleIsActive('shop'))
    {
        $Siteuser_Controller_Show->addEntity(
            Core::factory('Core_Xml_Entity')
                ->name('item')
                ->addEntity(
                    Core::factory('Core_Xml_Entity')->name('name')->value('Мои объявления')
                )
                ->addEntity(
                    Core::factory('Core_Xml_Entity')->name('path')->value('my_advertisement/')
                )
                ->addEntity(
                    Core::factory('Core_Xml_Entity')->name('image')->value('/images/user/bulletin-board.png')
                )
        );
    }

    if (Core::moduleIsActive('message'))
    {
        $Siteuser_Controller_Show->addEntity(
            Core::factory('Core_Xml_Entity')
                ->name('item')
                ->addEntity(
                    Core::factory('Core_Xml_Entity')->name('name')->value('Мои сообщения')
                )
                ->addEntity(
                    Core::factory('Core_Xml_Entity')->name('path')->value('my_messages/')
                )
                ->addEntity(
                    Core::factory('Core_Xml_Entity')->name('image')->value('/images/user/message.png')
                )
        );
    }

    $Siteuser_Controller_Show->addEntity(
        Core::factory('Core_Xml_Entity')
            ->name('item')
            ->addEntity(
                Core::factory('Core_Xml_Entity')->name('name')->value('Выход')
            )
            ->addEntity(
                Core::factory('Core_Xml_Entity')->name('path')->value('?action=exit')
            )
            ->addEntity(
                Core::factory('Core_Xml_Entity')->name('image')->value('/images/user/exit.png')
            )
    );

}


$Siteuser_Controller_Show->xsl(
    Core_Entity::factory('Xsl')->getByName($xslUserAuthorization)
)

    ->showGroups(true)
    ->show();

// Добавляем заказы Пользователя
if ($oSiteuser->id)
{
$oShop = Core_Entity::factory('Shop', 1);
$Shop_Order_Controller_Show = new Shop_Order_Controller_Show($oShop);

$Shop_Order_Controller_Show
    ->xsl(
        Core_Entity::factory('Xsl')->getByName('СписокЗаказовВЛичномКабинетеNewVersion')
    )
    ->limit(15)
    ->parseUrl()
    ->itemsProperties(TRUE)
    ->show();
}

XSL "СписокЗаказовВЛичномКабинетеNewVersion"

<?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="no" 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="/">
        <xsl:apply-templates select="shop"/>
    </xsl:template>
    
    <!-- Шаблон для списка заказов -->
    <xsl:template match="shop">
        <div class="lk-my-slider">
        <p><span>Сделайте наш сервис еще лучше </span> <br />Оставьте отзывы о купленных вами товарах</p>
            <div class="row">
                <div class="lk-my-slider__main">
                    <!-- Не показываем доставки и купоны -->
                    <xsl:apply-templates select="shop_order/shop_order_item[shop_item_id !=0 and type !=1]"/> 
                    <div class="clearfix"></div>
                </div>
            </div>
        </div>
    </xsl:template>
    
    <!-- Шаблон для элементов заказа -->
    <xsl:template match="shop_order/shop_order_item">
        <div class="col-xs-6 col-sm-4 col-md-3 col-lg-13 margin-top-20">
            <div class="product-card">
                <div class="product-card__img">
                <xsl:if test="shop_item/image_small !=''"><a href="{shop_item/url}"><img src="{shop_item/dir}{shop_item/image_small}" alt="" class="shop_img"/></a></xsl:if>
                </div>
                <!-- /.proguct-card__img -->
                
                <div class="product-card__descr">
                    <a href="{shop_item/url}"><xsl:value-of disable-output-escaping="yes" select="name"/></a>
                </div>
                <!-- /.product-card__descr -->
            </div>
        </div>
    </xsl:template>  
    
    <xsl:template match="shop_currency/code">
        <xsl:param name="value" />
        
        <xsl:variable name="spaced" select="format-number($value, '# ###', 'my')" />
        
        <xsl:choose>
            <xsl:when test=". = 'USD'">$<xsl:value-of select="$spaced"/></xsl:when>
            <xsl:when test=". = 'EUR'">€<xsl:value-of select="$spaced"/></xsl:when>
            <xsl:when test=". = 'GBP'">£<xsl:value-of select="$spaced"/></xsl:when>
        <xsl:when test=". = 'RUR'"><xsl:value-of select="$spaced"/>  <i class="fa fa-ruble"></i></xsl:when>
            <xsl:when test=". = 'AUD'">AU$<xsl:value-of select="$spaced"/></xsl:when>
            <xsl:when test=". = 'CNY'"><xsl:value-of select="$spaced"/>元</xsl:when>
            <xsl:when test=". = 'JPY'"><xsl:value-of select="$spaced"/>¥</xsl:when>
            <xsl:when test=". = 'KRW'"><xsl:value-of select="$spaced"/>₩</xsl:when>
            <xsl:when test=". = 'PHP'"><xsl:value-of select="$spaced"/>₱</xsl:when>
            <xsl:when test=". = 'THB'"><xsl:value-of select="$spaced"/>฿</xsl:when>
            <xsl:when test=". = 'BRL'">R$<xsl:value-of select="$spaced"/></xsl:when>
        <xsl:when test=". = 'INR'"><xsl:value-of select="$spaced"/><i class="fa fa-inr"></i></xsl:when>
        <xsl:when test=". = 'TRY'"><xsl:value-of select="$spaced"/><i class="fa fa-try"></i></xsl:when>
        <xsl:when test=". = 'ILS'"><xsl:value-of select="$spaced"/><i class="fa fa-ils"></i></xsl:when>
            <xsl:otherwise><xsl:value-of select="$spaced"/> <xsl:value-of select="." /></xsl:otherwise>
        </xsl:choose>
    </xsl:template>
    
</xsl:stylesheet>