При создании магазина часто приходится делать ajax корзину, то что есть в стандарте меня не совсемустраивает, поэтому мы делаем свою простую гибкую корзину, с возможностью удалять товары и изменятьих количество :)
Первым делом нам надо будет загрузуть jquery , грузить мы будем его с хранилища гугла .
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.js"></script>
Далее нам нужно будет создать в каталоге товара кнопку для добавления в корзину товара , в id хранится параметры для обработчика ajax запроса.
<a href="<?echo $arElement["ADD_URL"]?>" class="catalog-item-buy input-basket-submit" rel="nofollow" id="ajaxaction=add&ajaxaddid=<?=$arElement['ID'];?>"><?echo GetMessage("CATALOG_ADD")?></a>
Теперь нам надо написать скрипт который будет передавать и забирать данные о состоянии корзины с помощью ajax, удаление товаров которые уже в корзине, изменение количества товаров. Первым делом я напишу функцию для нашего ajax запрос, с стилизованной загрузкой.
Для красивой загрузки в файле style.css нашего сайта напишем такие стили , так же не забудьте в блок который будете грузить контент добавить position: relative , изображения загрузки и затемнения прикреплены к статье.
.ajaxloader { position: absolute ; left: 0px; top: 0px; width: 100%; background: url(/js/ajax/ajaxfon2.png) repeat; } .ajaxloader .imgcode { position: absolute; top: 10px; left: 10px }
Далее создадим файл который будет принимать и обрабатывать данные приходящие в корзину назовем его basket.php , разместим его в папке /include/ajax/ . В нем у нас находится три обработчика ajax: добавление в корзину, изменение количества и удаление товара из корзины.
<? require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php"); ?> <? CModule::IncludeModule("sale"); CModule::IncludeModule("catalog"); /* Addition of the goods in a basket at addition in a basket */ if($_POST["ajaxaddid"] && $_POST["ajaxaction"] == 'add'){ Add2BasketByProductID($_POST["ajaxaddid"], 1, array()); } /* Goods removal at pressing on to remove in a small basket */ if($_POST["ajaxdeleteid"] && $_POST["ajaxaction"] == 'delete'){ CSaleBasket::Delete($_POST["ajaxdeleteid"]); } /* Changes of quantity of the goods after receipt of inquiry from a small basket */ if($_POST["ajaxbasketcountid"] && $_POST["ajaxbasketcount"] && $_POST["ajaxaction"] == 'update'){ $arFields = array( "QUANTITY" => $_POST["ajaxbasketcount"] ); CSaleBasket::Update($_POST["ajaxbasketcountid"], $arFields); } ?> <?$APPLICATION->IncludeComponent( "bitrix:sale.basket.basket.small", "smallbasker", Array( "PATH_TO_BASKET" => "/personal/cart/", "PATH_TO_ORDER" => "/personal/order/" ) );?>
В конце мы вызываем компонент , в нем можем стилизовать вывод корзины, так же в коде у меня присутствует вызов шаблона компонента вот код самого шаблона вы его естественно украсите под свои нужды
<?if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();?> <? $sum = 0; $quantity = 0; ?> <? foreach ($arResult["ITEMS"] as $itemres): ?> <? $sum += $itemres["QUANTITY"] * $itemres["PRICE"]; $quantity = $quantity + 1; ?> <? endforeach;?> <p> В вашей корзине <b><? print $quantity?></b> товаров на <br> сумму <b><?php echo number_format($sum, 0, '', ' ')." руб."; ?> </b> </p> <ul class="basket-list"> <? $i = 1; ?> <? foreach ($arResult["ITEMS"] as $item): ?> <li> <b><? echo $i;?></b> <a href="<?echo $item["DETAIL_PAGE_URL"] ?>"><?echo $item["NAME"]?></a> цена за шт.<?echo $item["PRICE_FORMATED"]?><br /> <input id="ajaxaction=update&ajaxbasketcountid=<?=$item['ID'];?>" type="text" value="<? print floor($item['QUANTITY']) ;?>" size="1" class="basket-count-update"/> <a href="/personal/cart/?action=delete&id=<?=$item['ID'];?>" class="basket-list-delete" id="ajaxaction=delete&ajaxdeleteid=<?=$item['ID'];?>" >удалить</a> </li> <? $i++;?> <? endforeach;?> </ul> <a href="<?=$arParams["PATH_TO_BASKET"];?> ">перейти в корзину</a> <br /> <? if($arParams["PATH_TO_ORDER"]):?> <a href=" <?=$arParams["PATH_TO_ORDER"];?>">мои заказы</a> <? endif;?>
В шаблоне компонента корзины мы создали ссылку на удаление товара из корзины и изменение количества товаров. Так же еще необходимо создать в шаблоне страницы место для вывода корзины .
<div class="basket"> <?$APPLICATION->IncludeComponent( "bitrix:main.include", "", Array( "AREA_FILE_SHOW" => "file", "PATH" => "/include/basket.php", "EDIT_TEMPLATE" => "" ) );?> </div>
Вот собственно и все ajax корзина с возможностью удаления и изменения количества товара готов
Опубликовано: 8 августа 2011
|
|