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

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

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


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

Предупреждение!!!
Базовый шаблон может быть заменен новой версией при обновлении магазина.
Чтобы этого избежать и не потерять интеграцию калькулятора, рекомендуется создать на основе базового шаблона новый, а уже его редактировать и использовать в магазине.
<? /* ==================== eDost () */ ?>
<h2>Калькулятор доставки</h2>
<div style="border-width: 1px 0 1px 0; border-style: solid; border-color: #E5E5E5; padding: 10px;">
<?$APPLICATION->IncludeComponent('edost:catalogdelivery', '', array('CACHE_TYPE' => 'A', 'CACHE_GROUPS' => 'Y'), null, array('HIDE_ICONS' => 'N'));?>
</div>

<? /* ==================== 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 class="edost_C2_button" style="cursor: pointer;" onclick="edost_RunScript('window', '<?=$product_id?>', '<?=$product_name?>', 'edost_catalogdelivery_calculate_button')">
    <svg viewBox="0 0 16 16" style="width: 16px; height: 16px; vertical-align: middle;" version="1.1" xml:space="preserve" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:1.41421;"><g><path class="edost_C2_button" d="M16,2.4c0,-1.325 -1.075,-2.4 -2.4,-2.4l-11.2,0c-1.325,0 -2.4,1.075 -2.4,2.4l0,11.2c0,1.325 1.075,2.4 2.4,2.4l11.2,0c1.325,0 2.4,-1.075 2.4,-2.4l0,-11.2Z"/><rect x="2" y="2" width="12" height="12" style="fill:#fff;"/><rect class="edost_C2_button" x="3" y="3" width="10" height="10"/><path d="M4,11l1,0l0,1l-1,0l0,-1Zm2,0l1,0l0,1l-1,0l0,-1Zm2,0l1,0l0,1l-1,0l0,-1Zm2,-1l2,0l0,2l-2,0l0,-2Zm-6,-1l1,0l0,1l-1,0l0,-1Zm2,0l1,0l0,1l-1,0l0,-1Zm2,0l1,0l0,1l-1,0l0,-1Zm-3,-1l-1,0l0,-1l1,0l0,1Zm1,-1l1,0l0,1l-1,0l0,-1Zm2,0l1,0l0,1l-1,0l0,-1Zm-4,-3l8,0l0,2l-8,0l0,-2Z" style="fill:#fff;"/><rect x="10" y="7" width="2" height="1" style="fill:#fff;"/></g></path></svg>
    <span id="edost_catalogdelivery_calculate_button" style="vertical-align: middle; padding: 0px; font-size: 13px;">Рассчитать доставку</span>
</div>

<? /* ==================== 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: 10px 0 10px 0; border-width: 1px 0 1px 0; border-style: solid; border-color: #E5E5E5;">
    <span class="edost_C2_preview_city_head" style="display: none; color: #000;">Доставка в </span> <span class="edost_C2_preview_city" style="font-weight: bold; padding: 5px 0px;"></span>
    <div class="edost_C2_preview_data" style="padding: 2px 0px;">
        <div style="height: 89px;"></div>
    </div>
    <div class="edost_C2_preview_city_detailed"></div>
</div>

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

<? /* ==================== 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_form"></div>
</div>

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



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' => 'N'));
?>
<? /* ==================== edost КОНЕЦ */ ?>

5. Разработчикам
В коде модуля прописаны события, используя которые можно модифицировать входные параметры заказа и результаты расчета (например, изменить стандартный выбор местоположений на свой, или заменить рассчитанную стоимость доставки своим значением).

список событий
info@edost.ru

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