Как реализовать подтверждение заказа

#
Как реализовать подтверждение заказа
В конце оформления, мы видим сообщение
"Ваш заказ оформлен
Спасибо, заказ оормлен. В ближайшее время мы свяжемся с Вами. "
А как реализовать табличку, с данными, где будет собрана информация по заказу и предоставлена заказчику

"
Ваш заказ оформлен
Спасибо, заказ оормлен. В ближайшее время мы свяжемся с Вами.

Детали:
Имя: ---
Фамилия: ----
АДрес: ---
Телефон: ---
Список товаров: ---
На сумму: ---
"
Модератор
#
Re: Как реализовать подтверждение заказа
Weber,
воспользуйтесь XSL-шаблоном в следующей модификации (внести изменения по желанию):
<?xml version="1.0" encoding="windows-1251"?>
<!DOCTYPE xsl:stylesheet>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output xmlns="http://www.w3.org/TR/xhtml1/strict" encoding="Windows-1251" indent="yes" method="text" omit-xml-declaration="no" version="1.0" />

<xsl:template match="/document_list">
Здравствуйте, <xsl:value-of select="order_list/site_user_fio"/>!

Вами был сделан заказ на сайте http://<xsl:value-of select="order_list/shop/site_alias_name"/>

<xsl:apply-templates select="order_list"/>

Заказанные товары:
-------------------------------------------------------------
<xsl:apply-templates select="items_order"/>
-------------------------------------------------------------
Итого: <xsl:value-of select="order_list/sum"/>&#xA0;<xsl:value-of select="order_list/currency/currency_name"/>

Через некоторое время с Вами свяжется наш менеджер, чтобы согласовать заказанный товар и время доставки.

Спасибо за использование услуг нашего магазина.
</xsl:template>

<!-- Шаблон вывода данных о заказе -->
<xsl:template match="order_list">

Данные доставки:
1. ФИО: <xsl:value-of select="site_user_fio"/>
2. E-mail: <xsl:value-of select="site_users_email"/>
3. Телефон: <xsl:value-of select="site_users_phone"/>
4. Факс: <xsl:value-of select="site_users_fax"/>
<xsl:variable name="country" select="country_name"/>
<xsl:variable name="location">, <xsl:value-of select="location_name"/></xsl:variable>
<xsl:variable name="city">, <xsl:value-of select="city_name"/></xsl:variable>
<xsl:variable name="city_area">, <xsl:value-of select="city_area_name"/></xsl:variable>

Адрес доставки:
<xsl:value-of select="$country"/>
<xsl:value-of select="$location"/>
<xsl:value-of select="$city"/>
<xsl:value-of select="$city_area"/>&#xA0;<xsl:value-of select="address"/>
Индекс: <xsl:value-of select="index"/>
<xsl:if test="phone!=''">
Телефон: <xsl:value-of select="phone"/></xsl:if>
</xsl:template>

<!-- Данные о товарах -->
<xsl:template match="items_order">
<xsl:variable name="quantity"><xsl:value-of select="order_items_quantity"/></xsl:variable>
<xsl:variable name="price"><xsl:value-of select="order_items_price"/></xsl:variable>
<xsl:value-of select="order_items_name"/>&#xA0;<xsl:value-of select="$quantity"/>&#xA0;<xsl:value-of select="item/mesure"/> * <xsl:value-of select="$price"/> = <xsl:value-of select="$quantity*$price"/>&#xA0;<xsl:value-of select="//order_list/currency/currency_name"/>
<xsl:if test="item/path != ''">&#xA0;http://<xsl:value-of select="//order_list/shop/site_alias_name"/><xsl:value-of select="//order_list/shop/shop_path"/><xsl:value-of select="item/fullpath"/><xsl:value-of select="item/path"/>/</xsl:if>&#xA0;
</xsl:template>

</xsl:stylesheet>
#
Re: Как реализовать подтверждение заказа
Ошибка номер 30 XSL преобразования шаблона 'ОплатаПриПолучении':
XSL element 'template' can only be used at the top level
#
Re: Как реализовать подтверждение заказа
Точнее:
Ошибка номер 0 XSL преобразования шаблона 'ОплатаПриПолучении':

если не менять ваш код
Модератор
#
Re: Как реализовать подтверждение заказа
Weber,
проверьте, правильно ли Вы скопировали данный шаблон. Создайте обращение в суппорт с указанием данных доступа и указанием на проблему.
Модератор
#
Re: Как реализовать подтверждение заказа
Указанный шаблон отлично работает, вероятно Вы его неверно скопировали. Ответ дан по эл. почте
Модератор
#
Re: Как реализовать подтверждение заказа
Weber,
Для реализации вывода пользователю информации о заказанных им товарах после оформления заказа необходимо в обработчиках форм оплаты заменить:
         /* Формируем XML */
         $xmlData = '<?xml version="1.0" encoding="'.SITE_CODING.'"?>'."\n";
         $xmlData .= '<order>';
         
         /* Ссылака на версию для печати */
         $shop_row = $GLOBALS['shops']->GetShop($shop_id);
         if ($shop_row)
         {
            /* Получаем путь к магазину */
            $Structure = new Structure();
            $shop_path = "/".$Structure->GetStructurePath($shop_row['structure_id'], 0);
            $shop_path .= "cart/print/$order_id/";
            $xmlData .= "<print_link>".$shop_path."</print_link>";
         }
         $xmlData .= "</order>\n";

на
         /* Формируем XML */
         $xmlData = '<?xml version="1.0" encoding="'.SITE_CODING.'"?>'."\n";
         $xmlData .= '<document_list>'."\n";
         
         /* Ссылака на версию для печати */
         $shop_row = $GLOBALS['shops']->GetShop($shop_id);
         if ($shop_row)
         {
            /* Получаем путь к магазину */
            $Structure = new Structure();
            $shop_path = "/".$Structure->GetStructurePath($shop_row['structure_id'], 0);
            $shop_path .= "cart/print/$order_id/";
            $xmlData .= "<print_link>".$shop_path."</print_link>";
         }
         
         $xmlData .= $GLOBALS['shops']->GetXmlForOrder($order_id, false, true);
         $xmlData .= $GLOBALS['shops']->GetXmlForItemsOrder($order_id);
         $xmlData .= '</document_list>'."\n";


и внести корректировки в XSL-шаблоны:
ОплатаПриПолучении

<?xml version="1.0" encoding="windows-1251"?>
<!DOCTYPE xsl:stylesheet>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output xmlns="http://www.w3.org/TR/xhtml1/strict" encoding="Windows-1251" indent="yes" method="html" omit-xml-declaration="no" version="1.0" />

<!-- Шаблон "ОплатаПриПолучении" -->

<xsl:template match="/document_list">
<h1>Ваш заказ оформлен</h1>

<xsl:apply-templates select="order_list"/>

<h2>Заказанные товары</h2>
<table cellpadding="2" cellspacing="0">
<tr class="shop_cart_table">
<td>Наименование</td>
<td>Количество</td>
<td>Цена</td>
<td>Сумма</td>
</tr>
<xsl:apply-templates select="items_order"/>
<tr class="shop_cart_table">
<td colspan="4" align="right">
Итого: <xsl:value-of select="order_list/sum"/>&#xA0;<xsl:value-of select="order_list/currency/currency_name"/>
</td>
</tr>
</table>

<p>Через некоторое время с Вами свяжется наш менеджер, чтобы согласовать заказанный товар и время доставки.</p>

<p>Спасибо за использование услуг нашего магазина.</p>

</xsl:template>

<!-- Шаблон вывода данных о заказе -->
<xsl:template match="order_list">

<h2>Данные доставки</h2>
<p>ФИО: <xsl:value-of select="site_user_fio"/></p>
<p>E-mail: <xsl:value-of select="site_users_email"/></p>
<p>Телефон: <xsl:value-of select="site_users_phone"/></p>
<p>Факс: <xsl:value-of select="site_users_fax"/></p>

<xsl:variable name="country" select="country_name"/>
<xsl:variable name="location">, <xsl:value-of select="location_name"/></xsl:variable>
<xsl:variable name="city">, <xsl:value-of select="city_name"/></xsl:variable>
<xsl:variable name="city_area">, <xsl:value-of select="city_area_name"/></xsl:variable>

<p>Адрес доставки:
<xsl:value-of select="$country"/>
<xsl:value-of select="$location"/>
<xsl:value-of select="$city"/>
<xsl:value-of select="$city_area"/>&#xA0;<xsl:value-of select="address"/></p>

<p>Индекс: <xsl:value-of select="index"/></p>

<xsl:if test="phone!=''">
   <p>Телефон: <xsl:value-of select="phone"/></p>
</xsl:if>

</xsl:template>

<!-- Данные о товарах -->
<xsl:template match="items_order">

<xsl:variable name="quantity"><xsl:value-of select="order_items_quantity"/></xsl:variable>
<xsl:variable name="price"><xsl:value-of select="order_items_price"/></xsl:variable>

<tr class="shop_cart_table">
<td>
   <xsl:choose>
   <xsl:when test="item/path != ''">
      <a href="http://{//order_list/shop/site_alias_name}{//order_list/shop/shop_path}{item/fullpath}{item/path}/"><xsl:value-of select="order_items_name"/></a>
   </xsl:when>
   <xsl:otherwise>
      <xsl:value-of select="order_items_name"/>
   </xsl:otherwise>
   </xsl:choose>
</td>
<td><xsl:value-of select="$quantity"/> <xsl:value-of select="item/mesure"/></td>
<td><xsl:value-of select="$price"/>&#xA0;<xsl:value-of select="//order_list/currency/currency_name"/></td>
<td><xsl:value-of select="$quantity*$price"/>&#xA0;<xsl:value-of select="//order_list/currency/currency_name"/></td>
</tr>

</xsl:template>

</xsl:stylesheet>


ОплатаПоФормеПД4
<?xml version="1.0" encoding="windows-1251"?>
<!DOCTYPE xsl:stylesheet>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output xmlns="http://www.w3.org/TR/xhtml1/strict" encoding="Windows-1251" indent="yes" method="html" omit-xml-declaration="no" version="1.0" />

<!-- XSL-шаблон "ОплатаПоФормеПД4" -->

<xsl:template match="/document_list">
<h1>Ваш заказ оформлен</h1>

<xsl:apply-templates select="order_list"/>

<h2>Заказанные товары</h2>
<table cellpadding="2" cellspacing="0">
<tr class="shop_cart_table">
<td>Наименование</td>
<td>Количество</td>
<td>Цена</td>
<td>Сумма</td>
</tr>
<xsl:apply-templates select="items_order"/>
<tr class="shop_cart_table">
<td colspan="4" align="right">
Итого: <xsl:value-of select="order_list/sum"/>&#xA0;<xsl:value-of select="order_list/currency/currency_name"/>
</td>
</tr>
</table>

<p>Распечатайте <a href="{/document_list/print_link}" target="_blank">бланк квитанции по форме ПД-4</a>, вырежьте бланк квитанции и оплатитите его в отделении банка.</p>

<p>Через некоторое время с Вами свяжется наш менеджер, чтобы согласовать заказанный товар и время доставки.</p>

<p>Спасибо за использование услуг нашего магазина.</p>

</xsl:template>

<!-- Шаблон вывода данных о заказе -->
<xsl:template match="order_list">

<h2>Данные доставки</h2>
<p>ФИО: <xsl:value-of select="site_user_fio"/></p>
<p>E-mail: <xsl:value-of select="site_users_email"/></p>
<p>Телефон: <xsl:value-of select="site_users_phone"/></p>
<p>Факс: <xsl:value-of select="site_users_fax"/></p>

<xsl:variable name="country" select="country_name"/>
<xsl:variable name="location">, <xsl:value-of select="location_name"/></xsl:variable>
<xsl:variable name="city">, <xsl:value-of select="city_name"/></xsl:variable>
<xsl:variable name="city_area">, <xsl:value-of select="city_area_name"/></xsl:variable>

<p>Адрес доставки:
<xsl:value-of select="$country"/>
<xsl:value-of select="$location"/>
<xsl:value-of select="$city"/>
<xsl:value-of select="$city_area"/>&#xA0;<xsl:value-of select="address"/></p>

<p>Индекс: <xsl:value-of select="index"/></p>

<xsl:if test="phone!=''">
   <p>Телефон: <xsl:value-of select="phone"/></p>
</xsl:if>

</xsl:template>

<!-- Данные о товарах -->
<xsl:template match="items_order">

<xsl:variable name="quantity"><xsl:value-of select="order_items_quantity"/></xsl:variable>
<xsl:variable name="price"><xsl:value-of select="order_items_price"/></xsl:variable>

<tr class="shop_cart_table">
<td>
   <xsl:choose>
   <xsl:when test="item/path != ''">
      <a href="http://{//order_list/shop/site_alias_name}{//order_list/shop/shop_path}{item/fullpath}{item/path}/"><xsl:value-of select="order_items_name"/></a>
   </xsl:when>
   <xsl:otherwise>
      <xsl:value-of select="order_items_name"/>
   </xsl:otherwise>
   </xsl:choose>
</td>
<td><xsl:value-of select="$quantity"/> <xsl:value-of select="item/mesure"/></td>
<td><xsl:value-of select="$price"/>&#xA0;<xsl:value-of select="//order_list/currency/currency_name"/></td>
<td><xsl:value-of select="$quantity*$price"/>&#xA0;<xsl:value-of select="//order_list/currency/currency_name"/></td>
</tr>

</xsl:template>

</xsl:stylesheet>


ОплатаБезналичнаяОтЮрЛица
<?xml version="1.0" encoding="windows-1251"?>
<!DOCTYPE xsl:stylesheet>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output xmlns="http://www.w3.org/TR/xhtml1/strict" encoding="Windows-1251" indent="yes" method="html" omit-xml-declaration="no" version="1.0" />

<!-- Шаблон "ОплатаБезналичнаяОтЮрЛица" -->

<xsl:template match="/document_list">
<h1>Ваш заказ оформлен</h1>

<xsl:apply-templates select="order_list"/>

<h2>Заказанные товары</h2>
<table cellpadding="2" cellspacing="0">
<tr class="shop_cart_table">
<td>Наименование</td>
<td>Количество</td>
<td>Цена</td>
<td>Сумма</td>
</tr>
<xsl:apply-templates select="items_order"/>
<tr class="shop_cart_table">
<td colspan="4" align="right">
Итого: <xsl:value-of select="order_list/sum"/>&#xA0;<xsl:value-of select="order_list/currency/currency_name"/>
</td>
</tr>
</table>

<p>Распечатайте <a href="{/document_list/print_link}" target="_blank">бланк счета</a> и передайте его в бухгалтерию.</p>

<p>Через некоторое время с Вами свяжется наш менеджер, чтобы согласовать заказанный товар и время доставки.</p>

<p>Спасибо за использование услуг нашего магазина.</p>

</xsl:template>

<!-- Шаблон вывода данных о заказе -->
<xsl:template match="order_list">

<h2>Данные доставки</h2>
<p>ФИО: <xsl:value-of select="site_user_fio"/></p>
<p>E-mail: <xsl:value-of select="site_users_email"/></p>
<p>Телефон: <xsl:value-of select="site_users_phone"/></p>
<p>Факс: <xsl:value-of select="site_users_fax"/></p>

<xsl:variable name="country" select="country_name"/>
<xsl:variable name="location">, <xsl:value-of select="location_name"/></xsl:variable>
<xsl:variable name="city">, <xsl:value-of select="city_name"/></xsl:variable>
<xsl:variable name="city_area">, <xsl:value-of select="city_area_name"/></xsl:variable>

<p>Адрес доставки:
<xsl:value-of select="$country"/>
<xsl:value-of select="$location"/>
<xsl:value-of select="$city"/>
<xsl:value-of select="$city_area"/>&#xA0;<xsl:value-of select="address"/></p>

<p>Индекс: <xsl:value-of select="index"/></p>

<xsl:if test="phone!=''">
   <p>Телефон: <xsl:value-of select="phone"/></p>
</xsl:if>

</xsl:template>

<!-- Данные о товарах -->
<xsl:template match="items_order">

<xsl:variable name="quantity"><xsl:value-of select="order_items_quantity"/></xsl:variable>
<xsl:variable name="price"><xsl:value-of select="order_items_price"/></xsl:variable>

<tr class="shop_cart_table">
<td>
   <xsl:choose>
   <xsl:when test="item/path != ''">
      <a href="http://{//order_list/shop/site_alias_name}{//order_list/shop/shop_path}{item/fullpath}{item/path}/"><xsl:value-of select="order_items_name"/></a>
   </xsl:when>
   <xsl:otherwise>
      <xsl:value-of select="order_items_name"/>
   </xsl:otherwise>
   </xsl:choose>
</td>
<td><xsl:value-of select="$quantity"/> <xsl:value-of select="item/mesure"/></td>
<td><xsl:value-of select="$price"/>&#xA0;<xsl:value-of select="//order_list/currency/currency_name"/></td>
<td><xsl:value-of select="$quantity*$price"/>&#xA0;<xsl:value-of select="//order_list/currency/currency_name"/></td>
</tr>

</xsl:template>

</xsl:stylesheet>
#
Re: Как реализовать подтверждение заказа
Может быть тогда подскажете как наименее затратно сформировать XML с данными?
Интересует
$xmlData .= $GLOBALS['shops']->GetXmlForOrder($order_id, false, true);

и особенно этот кусок:

<site_user_login><site_user_login>
<site_user_email><site_user_email>
<site_users_id>0</site_users_id>
<site_users_login></site_users_login>
<site_users_email></site_users_email>
<site_users_name></<site_users_name>
...


В том дело, что регистрация мне не нужна. Достаточно обычной капчи, а str_replacом, или через DOM/SAX разбирать эту XML как-то гнило.

Подскажите?..
Модератор
#
Re: Как реализовать подтверждение заказа
qfox,
Поясните, Вам нужно сформировать XML или разобрать его и получить данные? Из Вашего сообщения это не ясно. Если разобрать - то зачем из XML, если нужным методом можно просто извлечь данные из БД?
#
Re: Как реализовать подтверждение заказа
Цитирую себя: "Может быть тогда подскажете как наименее затратно _сформировать XML_ с данными?"

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

К тому же, выбирать данные из базы в любом месте, где вздумается, плохой тон. Такие вещи должны быть инкапсулированы в модели. В данном случае, наш shop является как контроллером, так и моделью - то есть, все запросы к таблицам shop'а должны быть в нем, а не в шаблонах или где-то еще...

И база мне не особо нужна, кроме как для данных текущего заказа, а эти данные уже есть в результате работы метода shop::GetXmlForOrder.
Может быть есть некий функционал аля shop::GetDataForOrder и ?::RenderXml, чтобы выбрать данные, поправить как надо, и сформировать XML? Примерно так, как это делается в методе, только без исправлений.

Предполагаю, что сформировать XML-данные для XSLТ-файла можно и без запросов к базе. В данном случае речь идет о данных в сессии, и "мои" данные на руках. Вопрос в том, как их поместить в эту XML?

Еще раз повторюсь, что речь идет об упрощенной корзине в интернет-магазине без регистрации, все данные в куках и корзине.
Авторизация