Дата доставки в корзине HostCMS

Дата доставки в корзине HostCMS

Для одного из проектов, разрабатываемых на системе управления сайтом HostCMS, было необходимо сделать функцию выбора даты доставки. Я набросал базовый функционал дополнительного поля в шаге «Адрес доставки» корзины. В дальнейшем этот набросок был доведен до окончательного варианта на тестовой версии и интегрирован в интернет-магазин. На выходе получается дополнительное поле со встроенным календарем «Дата доставки», данные которого не только отображаются в последнем шаге корзины «Данные доставки», но и фигурируют в письмах пользователю и администратору интернет-магазина. Данный пример для оплаты при получении.

1. Создаем файл delivery-day.js

Создаем файл с любым названием, которое нравится, главное чтобы оно было по смыслу подходящее. Не забывайте кодировка файла должна быть UTF-8, при желании без BOM (Byte Order Mark). Вносим в него одну функцию:

function formatDate(date) {
	var dd = date.getDate()+1;
		if ( dd < 10 ) dd = '0' + dd;
	var mm = date.getMonth()+1;
		if ( mm < 10 ) mm = '0' + mm;
	var yy = date.getFullYear();
		return dd+'.'+mm+'.'+yy;
}

Если вы используете какой-нибудь другой файл на своем сайте, в котором храните Java Script код, а если он ещё и вызывается из основного макета, записывайте приведенный выше скриптик туда.

2. Добавляем строчки в XSL-шаблон.

Шаблон находиться в админке: XSL-шаблоны ? Интернет-магазин ? МагазинАдресДоставки.

2.1. Подключаем JS:

<script type="text/javascript" src="/admin/js/ui/jquery-ui.js"></script>
<script type="text/javascript" src="/admin/js/ui/i18n/jquery.ui.datepicker-ru.js"></script>
<script type="text/javascript" src="/admin/js/ui/timepicker/timepicker.js"></script>
<script type="text/javascript" src="/{путь_до_файла_на_сервере}/delivery-day.js"></script>

2.2. Дописываем:

<div class="row">
<div class="caption">День доставки:</div>
<div class="field"><input class="width1" id="delivery_day" type="text" disabled="disabled" name="delivery_day" size="16" value="" />
 <input onclick="document.getElementById('delivery_day').disabled=(this.checked==true)?false:true;" type="checkbox" value="0" /></div>
</div>
<pre>
<script type="text/javascript" language="JavaScript">// <![CDATA[

	var d = new Date();
	document.getElementById("delivery_day").value = formatDate(d);
	 (function($) {
	$("#delivery_day")
	.datepicker({showOtherMonths: true, selectOtherMonths: true, changeMonth: true, changeYear: true, timeFormat: 'hh:mm:ss'});
	})(jQuery);
// ]]></script>

3.  Вносим изменения в последний шаг корзины.

Заходим: XSL-шаблоны ? Интернет-магазин ? Формы оплаты ? ОплатаПриПолучении
В

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

Вставляем:

<xsl:if test="../ДеньДоставки != ''">
	<br /><b>День доставки:</b><xsl:text> </xsl:text><xsl:value-of select="../ДеньДоставки"/>
</xsl:if>

4. Исправляем шаблоны писем.

XSL-шаблоны ? Интернет-магазин ?
«ПисьмоАдминистратору» и «ПисьмоПользователю».
В зависимости от ветки размещения, копируем:

<xsl:if test="../ДеньДоставки !=''">
	День доставки:</b><xsl:text> </xsl:text><xsl:value-of select="../ДеньДоставки"/> <br />
</xsl:if>

или

<xsl:if test="ДеньДоставки !=''">
	День доставки:</b><xsl:text> </xsl:text><xsl:value-of select="ДеньДоставки"/> <br />
</xsl:if>

5. Записываем данные поля в сессию.

Типовые динамические страницы ? Интернет-магазин ? Интернет-магазин корзина
В код страницы в «case 2» добавляем:

$_SESSION['hostcmsOrder']['delivery_day'] = strval(Core_Array::getPost('delivery_day'));

6. Добавляем передачу доп.свойств в XSL.

Интернет-магазины ? Ваш магазин ? Справочник платежных систем ? Оплата наличными

В

class Shop_Payment_System_Handler1 extends Shop_Payment_System_Handler
{

Вписываем функцию:

protected function _processXml()
{
	Core_Event::notify('Shop_Payment_System_Handler.onBeforeProcessXml', $this);
	$oShop = $this->_shopOrder->Shop->clearEntities();
	$oShop
		->addEntity($oShop->Shop_Company)
		->addEntity(
			$oShop->Site->clearEntities()->showXmlAlias()
		)
		->addEntity(
			$this->_shopOrder->clearEntities()
				->showXmlCurrency(TRUE)
				->showXmlCountry(TRUE)
				->showXmlItems(TRUE)
				->showXmlDelivery(TRUE)
				->showXmlPaymentSystem(TRUE)
				->showXmlOrderStatus(TRUE)
				->showXmlProperties(TRUE)
		)
		->addEntity(Core::factory('Core_Xml_Entity')->name('ДеньДоставки')->value($_SESSION['hostcmsOrder']['delivery_day']));
	$sXml = $oShop->getXml();
		$return = Xsl_Processor::instance()
		->xml($sXml)
		->xsl($this->_xsl)
		->process();

	$this->_shopOrder->clearEntities();

	Core_Event::notify('Shop_Payment_System_Handler.onAfterProcessXml', $this);

	return $return;
}

Проверяем, должно всё работать.

Дата доставки в корзине HostCMS: 1 комментарий

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*