Товар успешно добавлен в корзину!
Блог Кодинг Портфолио Я

Оформление заказа в корзине в один шаг v.6

Кодинг HostCMS Интернет-магазин

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

В ТДС "Интернет-магазин корзина" заменяем код 4го шага

// Окончание оформления заказа
case 4:
$shop_payment_system_id = $_SESSION['hostcmsOrder']['shop_payment_system_id'] = intval(Core_Array::getPost('shop_payment_system_id', 0));

// Если выбрана платежная система
if ($_SESSION['hostcmsOrder']['shop_payment_system_id'])
{

Shop_Payment_System_Handler::factory(
Core_Entity::factory('Shop_Payment_System', $shop_payment_system_id)
)
->orderParams($_SESSION['hostcmsOrder'])
->execute();
}
else
{
?><h1>Ошибка! Не указана ни одна платежная система.</h1><?php
}
break;

на следующий код:

 // Окончание оформления заказа
case 4:
// Сбрасываем информацию о последнем заказе
$_SESSION['last_order_id'] = 0;
$shop_payment_system_id = $_SESSION['hostcmsOrder']['shop_payment_system_id'] = 1;//id используемой платежной системы
$_SESSION['hostcmsOrder']['shop_delivery_condition_id'] = intval(Core_Array::getPost('shop_delivery_condition_id', 0));

$_SESSION['hostcmsOrder']['address'] = strval(Core_Array::getPost('address'));
$_SESSION['hostcmsOrder']['surname'] = strval(Core_Array::getPost('surname'));
$_SESSION['hostcmsOrder']['name'] = strval(Core_Array::getPost('name'));
$_SESSION['hostcmsOrder']['patronymic'] = strval(Core_Array::getPost('patronymic'));
$_SESSION['hostcmsOrder']['company'] = strval(Core_Array::getPost('company'));
$_SESSION['hostcmsOrder']['phone'] = strval(Core_Array::getPost('phone'));
$_SESSION['hostcmsOrder']['email'] = strval(Core_Array::getPost('email'));
$_SESSION['hostcmsOrder']['fax'] = strval(Core_Array::getPost('fax'));
$_SESSION['hostcmsOrder']['description'] = strval(Core_Array::getPost('description'));

// Если выбрана платежная система
if ($_SESSION['hostcmsOrder']['shop_payment_system_id'])
{

Shop_Payment_System_Handler::factory(
Core_Entity::factory('Shop_Payment_System', $shop_payment_system_id)
)
->orderParams($_SESSION['hostcmsOrder'])
->execute();
}
else
{
?><h1>Ошибка! Не указана ни одна платежная система.</h1><?php
}
break;

Далее в XSL "МагазинКорзина" заменяем строчку

<input name="step" value="1" type="hidden" />

на 

<input name="step" value="4" type="hidden" />

Для того, чтобы отображались поля для ввода данных о заказчике заменяем

 <xsl:if test="siteusers_class_exists = 1">
<h1>Данные о заказчике</h1>

<!-- Выводим сообщение -->
<xsl:if test="/shop/message/node()">
<div id="message">
<xsl:value-of disable-output-escaping="yes" select="/shop/message"/>
</div>
</xsl:if>

<p style="color: #707070">
Поля, отмеченные <span class="red_star" style="position: relative; top: 6px;"> *</span>, обязательны для заполнения.
</p>

<!-- В случае если отключен модуль пользователей сайта, запрашиваем информацию
о пользователе сайта здесь -->
<table cellspacing="0" cellpadding="0" border="0" class="shop_cart_table">
<tr>
<td>Фамилия:</td>
<td>
<input name="siteusers_surname" type="text" value="{siteusers_surname}" size="40"/>
</td>
<td class="red_star"> *</td>
</tr>
<tr>
<td>Имя:</td>
<td>
<input name="siteusers_name" type="text" value="{siteusers_name}" size="40"/>
</td>
<td class="red_star"> *</td>
</tr>
<tr>
<td>Отчество:</td>
<td>
<input name="siteusers_patronymic" type="text" value="{siteusers_patronymic}" size="40"/>
</td>
</tr>
<tr>
<td>Компания:</td>
<td>
<input name="siteusers_company" type="text" value="{siteusers_company}" size="40"/>
</td>
</tr>
<tr>
<td>E-mail:</td>
<td>
<input name="siteusers_email" type="text" value="{siteusers_email}" size="40"/>
</td>
<td class="red_star"> *</td>
</tr>
<tr>
<td>Телефон:</td>
<td>
<input name="siteusers_phone" type="text" value="{siteusers_phone}" size="40"/>
</td>
</tr>
<tr>
<td>Факс:</td>
<td>
<input name="siteusers_fax" type="text" value="{siteusers_fax}" size="40"/>
</td>
</tr>
<tr>
<td>Адрес:</td>
<td>
<input name="siteusers_address" type="text" value="{siteusers_address}" size="40"/>
</td>
</tr>
</table>

<!-- Добавляем скрытое поле с указанием подшага -->
<input name="step_1_1a" type="hidden" value="1"/>
</xsl:if>

на 

 <!-- <xsl:if test="siteusers_class_exists = 1"> -->
<h1>Данные о заказчике</h1>

<!-- Выводим сообщение -->
<xsl:if test="/shop/message/node()">
<div id="message">
<xsl:value-of disable-output-escaping="yes" select="/shop/message"/>
</div>
</xsl:if>

<p style="color: #707070">
Поля, отмеченные <span class="red_star" style="position: relative; top: 6px;"> *</span>, обязательны для заполнения.
</p>

<!-- В случае если отключен модуль пользователей сайта, запрашиваем информацию
о пользователе сайта здесь -->
<table cellspacing="0" cellpadding="0" border="0" class="shop_cart_table">
<tr>
<td>Фамилия:</td>
<td>
<input name="surname" type="text" value="{siteusers_surname}" size="40"/>
</td>
<td class="red_star"> *</td>
</tr>
<tr>
<td>Имя:</td>
<td>
<input name="name" type="text" value="{siteusers_name}" size="40"/>
</td>
<td class="red_star"> *</td>
</tr>
<tr>
<td>Отчество:</td>
<td>
<input name="patronymic" type="text" value="{siteusers_patronymic}" size="40"/>
</td>
</tr>
<tr>
<td>Компания:</td>
<td>
<input name="company" type="text" value="{siteusers_company}" size="40"/>
</td>
</tr>
<tr>
<td>E-mail:</td>
<td>
<input name="email" type="text" value="{siteusers_email}" size="40"/>
</td>
<td class="red_star"> *</td>
</tr>
<tr>
<td>Телефон:</td>
<td>
<input name="phone" type="text" value="{siteusers_phone}" size="40"/>
</td>
</tr>
<tr>
<td>Факс:</td>
<td>
<input name="fax" type="text" value="{siteusers_fax}" size="40"/>
</td>
</tr>
<tr>
<td>Адрес:</td>
<td>
<input name="address" type="text" value="{siteusers_address}" size="40"/>
</td>
</tr>
</table>

<!-- Добавляем скрытое поле с указанием подшага -->
<input name="step_1_1a" type="hidden" value="1"/>
<!-- </xsl:if> -->

Тут же можно удалить(или скрыть) ненужные поля. 

Обсуждение на официальном форуме HostCMS


Корзина, 1 шаг, оформление, заказ27.10.2012, 11304 просмотра.

Комментарии

Подскажите, пожалуйста, а как добавить свойства для заказа (появилось в новых версиях системы) для данного решения?

Сергей 29.05.2014 14:34:14 ответить #

Имя
E-mail
Комментарий
Здравствуйте. Можете подсказать решение проблемы - сделал все как у вас сказано, появилась такая же проблема как у человека с форума, при обновлении страницы с корзиной товар удваивается. Вот ваш ответ на форуме:
"Обратите внимание на переменную $_SESSION['last_order_id'], если она равна 0, то будет создаваться новый заказ."
А что нужно все таки сделать чтобы прекратилось это безобразие? Извините заранее за тупой вопрос :)

Николай 16.05.2014 21:41:46 ответить #

Имя
E-mail
Комментарий
Добрый день. Дело в том, что при обновлении страницы с корзиной вы повторно вызываете обработку добавления товара в корзину и это работает именно так, абсолютно во всех сайтах на hostcms и не только. Мой комментарий по поводу "$_SESSION['last_order_id']" никак не относится к вашей проблеме. Для того, чтобы избавиться от описанной вами проблемы, нужно установить редирект на страницу корзины без параметров сразу после обработки добавления товара в корзину в ТДС.

KAD 20.05.2014 11:51:44 ответить #

Имя
E-mail
Комментарий
спасибо, добрый человек. отдельный респект за то, что все расписал по шагам, еще и ответ сапорта для ленивых.

botva 17.02.2014 13:49:51 ответить #

Имя
E-mail
Комментарий
Пожалуйста! :)

KAD 17.02.2014 14:17:48 ответить #

Имя
E-mail
Комментарий
Столкнулся с проблемой проподания кнопки оформить заказ. Вчера установил обновление на могазин 6.1.1. теперь кнопки нет. Платежные методы включены. Что делать где искать?

sergey 04.02.2014 11:15:34 ответить #

Имя
E-mail
Комментарий
HostCMS Давало официальный ответ на эту проблему, кроме того, она была в описании обновления http://hostcms.ru/support/updates/
Цитирую:
" В XSL-шаблоне "МагазинКорзина" необходимо выполнить замену. Строка <xsl:if test="count(shop_cart[postpone = 0]) and siteuser_id > 0 or siteuser_id = ''"> заменяется на <xsl:if test="count(shop_cart[postpone = 0]) and siteuser_id > 0 or siteuser_id = 0">"

KAD 05.02.2014 21:27:54 ответить #

Имя
E-mail
Комментарий
Нет кнопки оформить заказ

Максим 23.12.2013 11:14:17 ответить #

Имя
E-mail
Комментарий
Замените название кнопки "Далее" на "Оформить заказ" в XSL списка платежных систем и будет Вам кнопка.

KAD 23.12.2013 12:39:17 ответить #

Имя
E-mail
Комментарий

Подскажите где найти этот код

Данные о заказчике
Поля, отмеченные *, обязательны для заполнения.

Фамилия:

*

Имя:

....

В xsl шаблоне "МагазинКорзина"

Sergei 04.09.2013 00:05:25 ответить #

Имя
E-mail
Комментарий
Вот здесь можно взять xsl шаблон целиком
http://artemkuts.ru/upload/files/4.xsl.txt

KAD 04.09.2013 22:12:11 ответить #

Имя
E-mail
Комментарий
Спасибо за решение. Верная ссылка http://www.hostcms.ru/forums/3/7679/

Дмитрий 03.07.2013 16:22:45 ответить #

Имя
E-mail
Комментарий
Пожалуйста! У меня и так верная стоит, вчера пост переписывал:)

KAD 03.07.2013 16:33:35 ответить #

Имя
E-mail
Комментарий

Добавить комментарий

Имя
E-mail
Комментарий