1С-Битрикс: инструкция по подключению модуля Расчет доставки в карточке товара
Модуль позволяет производить расчет стоимости доставки выбранного товара без добавления его в корзину.
Предупреждение!!!
Если у вас нет опыта в программировании, тогда не рекомендуем самостоятельно интегрировать модуль (иначе можно случайно вывести из строя весь магазин!). Все необходимые исправления могут внести наши специалисты (просто подайте заявку на info@edost.ru).
а) админка магазина > Marketplace > Обновление решений > Закладка "Активация купона":
Введите купон и кликните по кнопке Активировать купон.

б) админка магазина > Marketplace > Обновление решений > Закладка "Список обновлений":
Выделите модуль Расчет доставки в карточке товара и кликните по кнопке Загрузить.

в) админка магазина > Marketplace > Установленные решения:
Нажмите на модуле Расчет доставки в карточке товара правую кнопку мышки и выберите Установить.
Тип интеграции:
При встроенном расчете через php, тарифы выводятся быстро (без значка загрузки), но сама страница с товарами грузится намного дольше + требуется отключение/обход композита (если используется)!!!

Цвет и форма окна:

Параметры:




(округление в большую сторону веса и стоимости товара и отключение учета габаритов - значительно снижает количество запросов на сервер расчетов)
Если у товара несколько цен, тогда брать
Цвет кнопки "Рассчитать доставку"
(только при работе с модулем edost.delivery)
Объединять тарифы по типу доставки
Выводить тарифы одного типа отдельными блоками
Формат отображения
Наложенный платеж
Автоматически выбирать самый первый пункт выдачи или постамат
Интегрировать карту в блок доставки
кг
руб.


При использовании расчета встроенного в карточку товара и автоматизированных служб доставки работающих с внешними серверами (eDost, EMS, СПСР и др.), обязательно учитывайте!!!
1. Значительно увеличится количество запросов к серверам служб доставки (например, ваш магазин ежедневно посещает 100 человек, каждый просматривает по 10 товаров – итого 1000 расчетов в день). Это значит, что при использовании сервиса eDost, в большинстве случаев, потребуется перейти на более дорогой тариф!
2. Для уменьшения количества запросов рекомендуется включить "Экономный расчет".

Интеграция:
шаблон - это имя шаблона, который использует магазин (например, store_light_gray)
Перед исправлением рекомендуется сделать бэкап файла, чтобы при необходимости можно было его восстановить.
Если в шаблоне нет папки catalog, тогда необходимо редактировать базовый шаблон магазина:
bitrix/components/bitrix/catalog/templates/.default/bitrix//.default/template.php

Предупреждение!!!
Базовый шаблон может быть заменен новой версией при обновлении магазина.
Чтобы этого избежать и не потерять интеграцию калькулятора, рекомендуется создать на основе базового шаблона новый, а уже его редактировать и использовать в магазине.
Вставьте в файл код, выделенный зеленым:
<?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();?>


<? /* ==================== edost НАЧАЛО () */ ?>
<h2>Калькулятор доставки</h2>
<div style="border-width: 1px 0 1px 0; border-style: solid; border-color: #E5E5E5; padding: 10px;">
<?
    $delivery_img = $APPLICATION->IncludeComponent('edost:catalogdelivery', '', array(
        'MODE' => 'manual',
        'PARAM' => array(
        ),

//        'NO_DELIVERY_MESSAGE' => '<span style="color: #F00;">Расчет недоступен</span>', // сообщение, которое выводится, когда нет доступных способов доставки
//        "INFO" => "Здесь представлена ориентировочная стоимость доставки - окончательный расчет будет производиться на станице оформления заказа.", // выводится в шапке калькулятора
//        'SHOW_BUTTON' => 'Y', // 'Y' - кнопки 'Пересчитать' и 'Закрыть'
        'FRAME_X' => '650', // ширина окна
//        'FRAME_Y' => '200', // высота окна
//        'FRAME_AUTO' => 'Y', // 'Y' - окно растягивается под данные (если данные больше 'FRAME_Y')


        'CACHE_TYPE' => 'A',
        'CACHE_GROUPS' => 'Y',
//        'CACHE_TIME' => '180',
    ), null, array('HIDE_ICONS' => 'Y'));
?>
</div>
<? /* ==================== edost КОНЕЦ */ ?>

...
...

...
...


<? /* ==================== edost НАЧАЛО (кнопка расчета) */ ?>
<?
    $product_id = $arResult['ID'];
    if (!empty($arResult['OFFERS']) && is_array($arResult['OFFERS'])) foreach ($arResult['OFFERS'] as $v) { $product_id = $v['ID']; break; }
//    if (!empty($arResult['LINKED_ELEMENTS']) && is_array($arResult['LINKED_ELEMENTS'])) foreach ($arResult['LINKED_ELEMENTS'] as $v) { $product_id = $v['ID']; break; }
    $product_name = str_replace(array('"', "'"), array('&quot;', '&quot;'), $arResult['NAME']);

    // задать собственную цену товара: [цена] или [цена|валюта] (если валюта не указана, расчет производится по валюте магазина)
//    echo '<input id="edost_catalogdelivery_product_price_'.$product_id.'" value="1005|RUB" type="hidden">';
//    foreach ($arResult['PRICES'] as $v) if (!empty($v['DISCOUNT_VALUE'])) { echo '<input id="edost_catalogdelivery_product_price_'.$product_id.'" value="'.$v['DISCOUNT_VALUE'].'|'.$v['CURRENCY'].'" type="hidden">'; break; }

?>
    <div style="padding: 0px; margin: 0px; cursor: pointer;" onclick="edost_RunScript('window', '<?=$product_id?>', '<?=$product_name?>')">
        <img style="vertical-align: middle; padding: 0px; margin: 0px;" src="<?=$delivery_img?>" width="15" height="15"> <span style="vertical-align: middle; padding: 0px; color: #; font-size: 13px;">Рассчитать доставку</span>
    </div>
<? /* ==================== edost КОНЕЦ */ ?>

...
...
...
...


<? /* ==================== edost НАЧАЛО (блок расчета) */ ?>
<?
    $product_id = $arResult['ID'];
    if (!empty($arResult['OFFERS']) && is_array($arResult['OFFERS'])) foreach ($arResult['OFFERS'] as $v) { $product_id = $v['ID']; break; }
//    if (!empty($arResult['LINKED_ELEMENTS']) && is_array($arResult['LINKED_ELEMENTS'])) foreach ($arResult['LINKED_ELEMENTS'] as $v) { $product_id = $v['ID']; break; }
    $product_name = str_replace(array('"', "'"), array('&quot;', '&quot;'), $arResult['NAME']);
?>
    <div style="padding-top: 5px 0 5px 0; border-width: 1px 0 1px 0; border-style: solid; border-color: #E5E5E5;">
        <span id="edost_catalogdelivery_inside_city_head" style="display: none; color: #000;">Доставка в </span> <span id="edost_catalogdelivery_inside_city" style="font-weight: bold; padding: 5px 0px;"></span>
        <div id="edost_catalogdelivery_inside" style="padding: 5px 0px;">
            <div style="text-align: center;"><img style="vertical-align: top;" src="/bitrix/components/edost/catalogdelivery/images/loading.gif" width="64" height="64" border="0"></div>
        </div>
        <div id="edost_catalogdelivery_inside_detailed" style="padding: 0px"></div>
    </div>

<script type="text/javascript">
    edost_RunScript('preview', '<?=$product_id?>', '<?=$product_name?>'); // запуск расчета
</script>
<? /* ==================== edost КОНЕЦ */ ?>

...
...
...
...


<? /* ==================== edost НАЧАЛО (блок расчета) */ ?>
<?
    $product_id = $arResult['ID'];
    if (!empty($arResult['OFFERS']) && is_array($arResult['OFFERS'])) foreach ($arResult['OFFERS'] as $v) { $product_id = $v['ID']; break; }
//    if (!empty($arResult['LINKED_ELEMENTS']) && is_array($arResult['LINKED_ELEMENTS'])) foreach ($arResult['LINKED_ELEMENTS'] as $v) { $product_id = $v['ID']; break; }
    $product_name = str_replace(array('"', "'"), array('&quot;', '&quot;'), $arResult['NAME']);
?>
    <div style="padding-top: 5px; border: 1px solid #AAA; width: 238px; padding: 5px; float: right;">
        <span style="color: #000;">Доставка в </span> <span id="edost_catalogdelivery_inside_city" style="font-weight: bold; padding: 5px 0px;"></span>
        <div id="edost_catalogdelivery_inside" style="padding: 5px 0px;"></div>
        <div id="edost_catalogdelivery_inside_detailed" style="padding: 0px"></div>

        <input id="edost_catalogdelivery_product_id" value="<?=$product_id?>" type="hidden">
        <input id="edost_catalogdelivery_product_name" value="<?=$product_name?>" type="hidden">
    </div>
<? /* ==================== edost КОНЕЦ */ ?>

...
...
...
...


<? /* ==================== edost НАЧАЛО (блок расчета) */ ?>
<?
    $product_id = $arResult['ID'];
    if (!empty($arResult['OFFERS']) && is_array($arResult['OFFERS'])) foreach ($arResult['OFFERS'] as $v) { $product_id = $v['ID']; break; }
//    if (!empty($arResult['LINKED_ELEMENTS']) && is_array($arResult['LINKED_ELEMENTS'])) foreach ($arResult['LINKED_ELEMENTS'] as $v) { $product_id = $v['ID']; break; }
    $product_name = str_replace(array('"', "'"), array('&quot;', '&quot;'), $arResult['NAME']);
?>
    <h4>Доставка</h4>
    <div style="border-width: 1px 0 1px 0; border-style: solid; border-color: #E5E5E5;">
        <div id="edost_catalogdelivery_inside" style="padding: 5px 0px;"></div>
        <input id="edost_catalogdelivery_product_id" value="<?=$product_id?>" type="hidden">
        <input id="edost_catalogdelivery_product_name" value="<?=$product_name?>" type="hidden">
    </div>

<script type="text/javascript">
    edost_RunScript('inside', '<?=$product_id?>', '<?=$product_name?>'); // запуск расчета
</script>
<? /* ==================== edost КОНЕЦ */ ?>

...
...
...
...


<? /* ==================== edost НАЧАЛО (кнопка расчета) */ ?>
<?
    $product_id = $arElement['ID'];
    if (!empty($arElement['OFFERS']) && is_array($arElement['OFFERS'])) foreach ($arElement['OFFERS'] as $v) { $product_id = $v['ID']; break; }
//    if (!empty($arElement['LINKED_ELEMENTS']) && is_array($arElement['LINKED_ELEMENTS'])) foreach ($arElement['LINKED_ELEMENTS'] as $v) { $product_id = $v['ID']; break; }
    $product_name = str_replace(array('"', "'"), array('&quot;', '&quot;'), $arElement['NAME']);
?>
    <div style="padding: 0px; margin: 0px; cursor: pointer;" onclick="edost_RunScript('window', '<?=$product_id?>', '<?=$product_name?>')">
        <img style="vertical-align: middle; padding: 0px; margin: 0px;" src="<?=$delivery_img?>" width="15" height="15"> <span style="vertical-align: middle; padding: 0px; color: #; font-size: 13px;">Рассчитать доставку</span>
    </div>
<? /* ==================== edost КОНЕЦ */ ?>

...
...


bitrix/templates/шаблон/components/bitrix/catalog/.default/element.php
шаблон - это имя шаблона, который использует магазин (например, store_light_gray)

Вставьте в файл код, выделенный зеленым:
...
...

<?$ElementID=$APPLICATION->IncludeComponent(
    "bitrix:catalog.element",
    "",
    Array(
        "IBLOCK_TYPE" => $arParams["IBLOCK_TYPE"],
        "IBLOCK_ID" => $arParams["IBLOCK_ID"],
...
...
...
        "SHOW_RATING" => "Y",
        "SHOW_MINIMIZED" => "Y",
    ),
    $component
);?>


<? /* ==================== edost НАЧАЛО (расчет доставки) */ ?>
<?
$product_id = $ElementID;
$arOffers = CIBlockPriceTools::GetOffersArray(array('IBLOCK_ID' => $arParams['IBLOCK_ID']), array($ElementID));
if (!empty($arOffers) && is_array($arOffers)) foreach ($arOffers as $v) { $product_id = $v['ID']; break; }

$APPLICATION->IncludeComponent('edost:catalogdelivery', '', array(
    'MODE' => 'inside',
    'PARAM' => array(
            'product_id' => $product_id, // ID товара

)), null, array('HIDE_ICONS' => 'Y'));
?>
<? /* ==================== edost КОНЕЦ */ ?>

...
...
При работе вместе с калькулятором доставки eDost (edost.delivery) доступен весь дополнительный функционал модуля: вывод карты, деление на группы по типу доставки, вывод наложки и т.д.
info@edost.ru

© ООО "Айсден", 2006-2016. Все права защищены.