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

При оплате за сервис eDost более 3000 руб. модуль предоставляется БЕСПЛАТНО!
2. Установка
а) админка магазина > Marketplace > Обновление решений > Закладка "Активация купона":
ввести купон и кликнуть по кнопке Активировать купон

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

в) админка магазина > Marketplace > Установленные решения:
нажать на модуле Расчет доставки в карточке товара правую кнопку мышки и выбрать Установить
3. Интеграция (через JS)
Интеграция через JS меньше зависит от обновлений магазина (если обновление не меняет структуру страницы, тогда править интеграцию не потребуется).
Блок с калькулятором появляетя с задержкой.

в файле с константами модуля:
bitrix/modules/edost.catalogdelivery/classes/general/edost_const.php
файл с константами и шаблоном при обновлении НЕ переписываются, поэтому все модификации продолжат функционировать

установить:
define('CATALOGDELIVERY_EDOST_JSINTEGRATION_PAGE', '/catalog/');
путь к страницам на которых будет вызываться js интеграция (если пусто - тогда подключается на всех страницах, если страниц несколько необходимо использовать разделитель "|")

отредактировать файл с шаблоном js интеграции:
/bitrix/components/edost/catalogdelivery/templates/.default/jsintegration.php
если файл с интеграцией будет использоваться свой, тогда необходимо прописать путь в константе:
define('CATALOGDELIVERY_EDOST_JSINTEGRATION_TEMPLATE', '/bitrix/путь_к_папке_с_шаблоном/');
штатный шаблон уже содержит код js интеграции - в простом варианте там будет достаточно исправить querySelector к элементу магазина, в который будет добавляться блок с калькулятором
код c подключением модуля можно скопировать из раздела прямая интеграция
Интеграция кэшируется, поэтому после правок файла jsintegration.php или jsintegration_include.php необходимо сбрасывать кэш битрикса, или на время разработки добавить в константах define('CATALOGDELIVERY_EDOST_CACHE', 'N');
Алгоритм работы интеграции
1. По событию битрикса OnBeforeProlog модуль проверяет константу CATALOGDELIVERY_EDOST_JSINTEGRATION_PAGE - если она задана и текущая страница соотвествует разрешенной, вставляет небольшой js код, который после загруки страницы отправляет запрос на получение основного кода интеграции.
2. Модуль ищет файл шаблона jsintegration.php - если он есть, тогда удаляет оттуда хеадер битрикса <?require( ... /bitrix/header.php");?> и полученный код сохраняет в ту же папку под имененм jsintegration_include.php
3. Модуль ищет файл подключения jsintegration_include.php - если он есть, тогда выполняет его и полученный результат передает в ответе.
4. Полученный код добавляется на страницу в скрытый блок id=edost_catalogdelivery_jsintegration и выполняется js код из интеграции (там вашему разработчику необходимо написать свой код, который будет искать на странице блок для размещения калькулятора, и переносить туда данные из скрытого блока).
Настройка
1. Войти в магазин под администратором.
2. Открыть шаблон jsintegration.php в браузере, указав его полный путь:
http://shop.ru/bitrix/components/edost/catalogdelivery/templates/.default/jsintegration.php
3. Сбросить кэш, включить режима правки и открыть настройки:
4. Интеграция (прямая)
При прямой интеграции блок с калькулятором выводится сразу при загрузке страницы.
После обновления магазина шаблон может переписаться новой версией и интеграция сбросится, поэтому потребуется проводить интеграцию заново.
Тип интеграции:
по кнопке
превью
отдельный блок
ручной калькулятор
При использовании типа интеграции "превью" и "отдельный блок" доставка будет рассчитыаться сразу при открытии страницы товара, поэтому при использовании автоматизированных служб доставки работающих с внешними серверами (eDost, СДЭК, DPD, ПЭК, Деловые линии и др.) обязательно учитывайте!!!
1. Значительно увеличится количество запросов к серверам служб доставки (например, ваш магазин ежедневно посещает 100 человек, каждый просматривает по 10 товаров – итого 1000 расчетов в день).
Это значит, что при использовании сервиса eDost, в большинстве случаев, потребуется перейти на более дорогой тариф!
2. Для уменьшения количества запросов в параметрах компонента рекомендуется включить "Экономный расчет".
Код интеграции:
код необходимо вставить в шаблон, в место, где должен будет выводиться калькулятор
<? /* ==================== 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>

1. Дефолтный шаблон Битрикса:
2. Перед редактированием рекомендуется сделать бэкап оригинального файла магазина, чтобы при необходимости можно было все восстановить.


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-2023. Все права защищены.