Делаем форму заказа для Битрикс редакция Старт

Порой случаются ситуации, когда клиенту что-то НУЖНО, но денег, чтобы купить более дорогую редакцию Битрикс у него нет. И тогда приходится придумывать разные интересные штуки, чтобы клиент остался доволен. Например нужно сделать форму заказа еды для редакции старт. Но проблемо!

Создаем инфоблок. В свойствах указываем например «Вес порции» и «Цена порции»

Создаем инфоблок для заказа

Делаем шаблон news.list для вывода товаров в форму заказа

<div class="order-list">
<?foreach($arResult["ITEMS"] as $arItem):?>
	<?
	$this->AddEditAction($arItem['ID'], $arItem['EDIT_LINK'], CIBlock::GetArrayByID($arItem["IBLOCK_ID"], "ELEMENT_EDIT"));
	$this->AddDeleteAction($arItem['ID'], $arItem['DELETE_LINK'], CIBlock::GetArrayByID($arItem["IBLOCK_ID"], "ELEMENT_DELETE"), array("CONFIRM" => GetMessage('CT_BNL_ELEMENT_DELETE_CONFIRM')));
	?>
	<div class="text-center order-item" id="<?=$this->GetEditAreaId($arItem['ID']);?>">
		<?if($arParams["DISPLAY_NAME"]!="N" && $arItem["NAME"]):?>
				<h3 data-id="<?=$arItem['ID']?>"><?echo $arItem["NAME"]?></h3><br />
		<?endif;?>
		<?if($arParams["DISPLAY_PICTURE"]!="N" && is_array($arItem["PREVIEW_PICTURE"])):?>
			<img
						class="img-responsive"
						border="0"
						src="<?=$arItem["PREVIEW_PICTURE"]["SRC"]?>"
						width="<?=$arItem["PREVIEW_PICTURE"]["WIDTH"]?>"
						height="<?=$arItem["PREVIEW_PICTURE"]["HEIGHT"]?>"
						alt="<?=$arItem["PREVIEW_PICTURE"]["ALT"]?>"
						title="<?=$arItem["PREVIEW_PICTURE"]["TITLE"]?>"
						style="margin: 0 auto;"
						/>
		<?endif?>
		<p><?if($arItem['DISPLAY_PROPERTIES']['WEIGHT']['VALUE'])echo('Порция - '.$arItem['DISPLAY_PROPERTIES']['WEIGHT']['VALUE'].' гр.')?> <b class="price"><span id="price<?=$arItem['ID']?>"><?=$arItem['DISPLAY_PROPERTIES']['PRICE']['VALUE']?></span><s>P</s></b><br/>
		<span class="minus" id="minus<?=$arItem['ID']?>" data-id="<?=$arItem['ID']?>">-</span>
		<span class="count" id="count<?=$arItem['ID']?>" data-id="<?=$arItem['ID']?>">
			<?if($_GET['name'] == $arItem['ID']){?>1<?}else{?>0<?};?> //если мы перешили по ссылке "заказать блюдо", то количество этого блюда сразу делаем 1
		</span>
		<span class="plus" id="plus<?=$arItem['ID']?>" data-id="<?=$arItem['ID']?>">+</span>
		<input type="hidden" name="PROPERTY[22][<?=$arItem['ID']?>]" value="<?echo $arItem["NAME"]?> - <?if($_GET['name'] == $arItem['ID']){?>1<?}else{?>0<?};?>" data-id="<?=$arItem['ID']?>"/> //PROPERTY[22] 22 - это ID нашего свойства "Заказ"
	</div>
<?endforeach;?>
</div>

Ставим на страничку заказа компонент iblock.element.add.form редактируем шаблон

$this->setFrameMode(false);
if (!empty($arResult["ERRORS"])):?>
	<?ShowError(implode("<br />", $arResult["ERRORS"]))?>
<?endif;
if (strlen($arResult["MESSAGE"]) > 0):?>
	<?ShowNote($arResult["MESSAGE"])?>
<?endif?>
<div class="article-left">
<div class="article-right">
    <div class="row">
      <div class="col-xs-2 main-header-left"></div>
      <div class="col-xs-8">
        <h1 class="main-header">
          Заказ
        </h1>
      </div>
      <div class="col-xs-2 main-header-right"></div>
    </div>
<hr/>
<form name="iblock_add" action="<?=POST_FORM_ACTION_URI?>" method="post" enctype="multipart/form-data">
	<?=bitrix_sessid_post()?>
	<?if ($arParams["MAX_FILE_SIZE"] > 0):?><input type="hidden" name="MAX_FILE_SIZE" value="<?=$arParams["MAX_FILE_SIZE"]?>" /><?endif?>
	<div class="row">
		<div class="col-md-6">
			<h2 class="order-header">Блюда</h2>
			<?$APPLICATION->IncludeComponent(// Здесь добавляем наш news.list для товаров
				"bitrix:news.list",
				"for-order",
				Array(
					"ACTIVE_DATE_FORMAT" => "d.m.Y",
					"ADD_SECTIONS_CHAIN" => "Y",
					"AJAX_MODE" => "N",
					"AJAX_OPTION_ADDITIONAL" => "",
					"AJAX_OPTION_HISTORY" => "N",
					"AJAX_OPTION_JUMP" => "N",
					"AJAX_OPTION_STYLE" => "Y",
					"CACHE_FILTER" => "N",
					"CACHE_GROUPS" => "Y",
					"CACHE_TIME" => "36000000",
					"CACHE_TYPE" => "A",
					"CHECK_DATES" => "Y",
					"COMPONENT_TEMPLATE" => "for-order",
					"DETAIL_URL" => "",
					"DISPLAY_BOTTOM_PAGER" => "Y",
					"DISPLAY_DATE" => "Y",
					"DISPLAY_NAME" => "Y",
					"DISPLAY_PICTURE" => "Y",
					"DISPLAY_PREVIEW_TEXT" => "Y",
					"DISPLAY_TOP_PAGER" => "N",
					"FIELD_CODE" => array(0=>"",1=>"",),
					"FILTER_NAME" => "",
					"HIDE_LINK_WHEN_NO_DETAIL" => "N",
					"IBLOCK_ID" => "6",
					"IBLOCK_TYPE" => "menu",
					"INCLUDE_IBLOCK_INTO_CHAIN" => "Y",
					"INCLUDE_SUBSECTIONS" => "Y",
					"MESSAGE_404" => "",
					"NEWS_COUNT" => "20",
					"PAGER_BASE_LINK_ENABLE" => "N",
					"PAGER_DESC_NUMBERING" => "N",
					"PAGER_DESC_NUMBERING_CACHE_TIME" => "36000",
					"PAGER_SHOW_ALL" => "N",
					"PAGER_SHOW_ALWAYS" => "N",
					"PAGER_TEMPLATE" => ".default",
					"PAGER_TITLE" => "Новости",
					"PARENT_SECTION" => "",
					"PARENT_SECTION_CODE" => "",
					"PREVIEW_TRUNCATE_LEN" => "",
					"PROPERTY_CODE" => array(0=>"WEIGHT",1=>"PRICE",2=>"",),
					"SET_BROWSER_TITLE" => "N",
					"SET_LAST_MODIFIED" => "N",
					"SET_META_DESCRIPTION" => "N",
					"SET_META_KEYWORDS" => "N",
					"SET_STATUS_404" => "N",
					"SET_TITLE" => "N",
					"SHOW_404" => "N",
					"SORT_BY1" => "ACTIVE_FROM",
					"SORT_BY2" => "SORT",
					"SORT_ORDER1" => "DESC",
					"SORT_ORDER2" => "ASC",
					"STRICT_SECTION_CHECK" => "N"
				)
			);?>
		</div>
		<div class="col-md-6">
			<h2 class="order-header">Напитки</h2>
			<?$APPLICATION->IncludeComponent(//Здесь тоже. Только другой инфоблок - для напитков.
				"bitrix:news.list",
				"for-order",
				Array(
					"ACTIVE_DATE_FORMAT" => "d.m.Y",
					"ADD_SECTIONS_CHAIN" => "Y",
					"AJAX_MODE" => "N",
					"AJAX_OPTION_ADDITIONAL" => "",
					"AJAX_OPTION_HISTORY" => "N",
					"AJAX_OPTION_JUMP" => "N",
					"AJAX_OPTION_STYLE" => "Y",
					"CACHE_FILTER" => "N",
					"CACHE_GROUPS" => "Y",
					"CACHE_TIME" => "36000000",
					"CACHE_TYPE" => "A",
					"CHECK_DATES" => "Y",
					"DETAIL_URL" => "",
					"DISPLAY_BOTTOM_PAGER" => "Y",
					"DISPLAY_DATE" => "Y",
					"DISPLAY_NAME" => "Y",
					"DISPLAY_PICTURE" => "Y",
					"DISPLAY_PREVIEW_TEXT" => "Y",
					"DISPLAY_TOP_PAGER" => "N",
					"FIELD_CODE" => array("",""),
					"FILTER_NAME" => "",
					"HIDE_LINK_WHEN_NO_DETAIL" => "N",
					"IBLOCK_ID" => "7",
					"IBLOCK_TYPE" => "menu",
					"INCLUDE_IBLOCK_INTO_CHAIN" => "Y",
					"INCLUDE_SUBSECTIONS" => "Y",
					"MESSAGE_404" => "",
					"NEWS_COUNT" => "20",
					"PAGER_BASE_LINK_ENABLE" => "N",
					"PAGER_DESC_NUMBERING" => "N",
					"PAGER_DESC_NUMBERING_CACHE_TIME" => "36000",
					"PAGER_SHOW_ALL" => "N",
					"PAGER_SHOW_ALWAYS" => "N",
					"PAGER_TEMPLATE" => ".default",
					"PAGER_TITLE" => "Новости",
					"PARENT_SECTION" => "",
					"PARENT_SECTION_CODE" => "",
					"PREVIEW_TRUNCATE_LEN" => "",
					"PROPERTY_CODE" => array("PRICE","WEIGHT",""),
					"SET_BROWSER_TITLE" => "N",
					"SET_LAST_MODIFIED" => "N",
					"SET_META_DESCRIPTION" => "N",
					"SET_META_KEYWORDS" => "N",
					"SET_STATUS_404" => "N",
					"SET_TITLE" => "N",
					"SHOW_404" => "N",
					"SORT_BY1" => "ACTIVE_FROM",
					"SORT_BY2" => "SORT",
					"SORT_ORDER1" => "DESC",
					"SORT_ORDER2" => "ASC",
					"STRICT_SECTION_CHECK" => "N"
				)
			);?>
			<div id="result-price">//Здесь будет стоимость заказа
			</div>
			<div id="delivery-price">//Здесь будет стоимость доставки
			</div>
			<input id="input-price" type="hidden" name="PROPERTY[14][0]" value="" />
		</div>
	</div>
	<div>
		<label  class="control-label" for="name">Ваше имя<span class="starrequired">*</span></label><input class="form-control" id="name" type="text" name="PROPERTY[NAME][0]" size="30" value="" />
		<label  class="control-label" for="phone">Телефон<span class="starrequired">*</span></label><input  class="form-control" id="phone" type="text" name="PROPERTY[13][0]" size="30" value="" />
		<label  class="control-label" for="adress">Адрес доставки<span class="starrequired">*</span></label><input  class="form-control" id="adress" type="text" name="PROPERTY[15][0]" size="30" value="" />
		<label  class="control-label" for="comment">Комментарий</label><textarea  class="form-control" id="comment" cols="30" rows="5" name="PROPERTY[DETAIL_TEXT][0]"></textarea>
		<input class="btn btn-primary" type="submit" name="iblock_submit" value="Отправить заказ" />
	</div>
</form>
</div>
</div>

Пишем скрипт, чтобы кнопочки нажимались, а цены считались

			window.onload = function() {
				$('.minus').click(function(){//Нажимаем на минус
					var id = $(this).data('id');
					var count = parseInt($('#count'+id).text());
					var name = $('h3[data-id='+id+']').text();
					if(count>0){
						count--;
						$('#count'+id).text(count);
						$('input[data-id='+id+']').val(name+' - '+count);
					}
					console.log(name);
					calculate();
				})
				$('.plus').click(function(){//Нажимаем на плюс
					var id = $(this).data('id');
					var name = $('h3[data-id='+id+']').text();
					var count = parseInt($('#count'+id).text());
					count++;
					$('#count'+id).text(count);
					$('input[data-id='+id+']').val(name+' - '+count);
					console.log(name);
					calculate();
				})
				var calculate = function(){//Считаем
					var totalPrice = 0;
					var deliveryPrice = 0;
					$.each($('.count'),function(index, text){
						var id = $(text).data('id');
						var currentPrice = parseInt($('#price'+id).text())*parseInt($('#count'+id).text());
						console.log(currentPrice);
						totalPrice = totalPrice + currentPrice;
						$('#result-price').html('Стоимость заказа: '+totalPrice+'<s>P</s>');
					})
					if(totalPrice < 400){//Если сумма заказа меньше 400 рублей, добавляем стоимость доставки
						deliveryPrice = 100;
						$('#delivery-price').html('Стоимость доставки: 100<s>P</s>');
					}else{
						deliveryPrice = 0;
						$('#delivery-price').html('Доставка бесплатно!');
					}
					console.log(totalPrice);
					var price = totalPrice+deliveryPrice;
					$('#input-price').val(price);
				}
				calculate();
			}

В принципе всё готово. Но! Нам же нужно, чтобы заказ приходил к нам на почту! Для этого: создаем новое почтовое событие

Создаем для него шаблон

Идем в init.php и там создаем обработчик

<?
define("LOG_FILENAME", $_SERVER["DOCUMENT_ROOT"]."/log.txt");
AddEventHandler("iblock", "OnAfterIBlockElementAdd", Array("NEW_ORDER", "OnAfterIBlockElementAddHandler"));

class NEW_ORDER
{
    // создаем обработчик события "OnAfterIBlockElementAdd"
    function OnAfterIBlockElementAddHandler(&$arFields)
    {
        if ($arFields["IBLOCK_ID"] == 8)
        {
			$content = '';
			foreach($arFields["PROPERTY_VALUES"]["22"] as $contentField){
				$content = $content.$contentField.'; ';
			}
			$arEventFields = array(
					"ORDER_NAME"         => $arFields["NAME"],
					"ORDER_PHONE"        => $arFields["PROPERTY_VALUES"]["13"],
					"ORDER_ADRESS"         => $arFields["PROPERTY_VALUES"]["15"],
					"ORDER_COMMENT"         => $arFields["DETAIL_TEXT"],
					"ORDER_PRICE"         => $arFields["PROPERTY_VALUES"]["14"],
					"ORDER_CONTENT"         => $content,
				 );
				//AddMessage2Log($arEventFields);
                CEvent::Send('NEW_ORDER',SITE_ID,$arEventFields);
        }
    }
}
?>

Вы великолепны!

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