В 1С-Битрикс для уменьшения времени повторного создания страниц сайта используется механизм кеширования. Кеш позволит сохранить результат выполнения компонента - html шаблона, данные для заполнения метаданных страницы. Сайту не потребуется выполнять множество запросов к базе данных, расчет скидок и формирование шаблона на каждый хит.
Обратитесь в «Техдиректор» за помощью, если сталкиваетесь с проблемой долгого формирования страницы вашего сайта.
Методы создания кеша компонента
Для начала кеширования данных вызывается метод CBitrixComponent::StartResultCache(…) в качестве условия оператора if. Если данные в кеше актуальны, метод вернет false и тело оператора if будет пропущено.
Запись данных в кеш происходит при вывозе методов CBitrixComponent::EndResultCache() или CBitrixComponent::IncludeComponentTemplate(...). Метод должен быть расположен последним внутри блока if с вызовом метода CBitrixComponent::StartResultCache(…).
Пример кеширования с html-шаблоном:
if ($this->StartResultCache($arParams['CACHE_TIME'], [ ...$additionalCacheId ]))
{
// загрузка данных
$this->IncludeComponentTemplate(); // кеширование $arResult и html-шаблона
}
// установка мета-данных страницы
Пример кеширования только $arResult:
if ($this->StartResultCache($arParams['CACHE_TIME'], [ ...$additionalCacheId ]))
{
// загрузка данных $arResult для кеширования
$this->EndResultCache(); // кеширование только $arResult
}
// обработка запроса пользователя
$this->IncludeComponentTemplate();
HTML-шаблон одинаков для большой группы пользователей
Пользователь может сделать выбор, ввести данные
Данные в кеше
HTML-шаблона, $arResult, $templateData
$arResult
Выполнение result_modifier.php и template.php
Один раз
Каждый хит
Параметры запроса $_REQUEST, $_GET, $_POST, $_SESSION, $USER в result_modifier.php и template.php
Передавать в параметрах вызова компонента $arParams с приведением значения по допустимому списку вариантов.
Пример - вариант отображения списка или сортировка.
Без ограничений. Для вывода использовать функцию htmlspecialcharsbx() (уязвимость XSS).
Рекомендуется использовать данные $arResult.
Глобальные переменные (например, $APPLICATION) в result_modifier.php и template.php
Сохранить данные в $arResult или $templateData. Выполнить в component_epilog.php ^1.
Например, установка заголовка страницы ^2.
Без ограничений
Кеширование дополнительной выборки в result_modifier.php и template.php
Не требуется
Требуется
^1 - для вложенных компонентов component_epilog.php выполнится, если при вызове [$APPLICATION->IncludeComponent(...)](https://dev.1c-bitrix.ru/api_help/main...ponent.php) передан аргумент $parentComponent. ^2 - обратите внимание, после component_epilog.php будет выполнен код компонента, расположенный ниже вызова метода CBitrixComponent::IncludeComponentTemplate(...), поэтому для установки метаданных может потребоваться изменить $component->arResult, т.к. компонент выполнит функции позже и переопределить глобально установленные значения.
Хранение кеша
Путь к файлу кеша формируется из директории кеша и md5-хеша идентификатора кеша.
По умолчанию директория кеша выглядит как bitrix/cache/{siteId}/{relativeComponentPath}/{salt} (например, bitrix/cache/s1/bitrix/catalog.smart.filter/59d). Переопределить директорию кеша компонента можно, передав аргумент $cachePath для метода CBitrixComponent::StartResultCache(…).
Идентификатор кеша, позволяет отличить файл кеша для вызова компонента в разных областях страницы и параметрах окружения. По умолчанию зависит от значений всех параметров компонента, идентификатора сайта, языка, шаблона сайта, временной зоны и порядковому номеру вызова на странице данного компонента. Разработчик может добавить собственные аргументы в идентификатор кеша, передав аргумент $additionalCacheID для метода CBitrixComponent::StartResultCache(…) (например, группы пользователя в зависимости от параметра CACHE_GROUPS).
Идентификатор кеша формируется в методе CBitrixComponent::GetCacheID(), может быть переопределен в собственном компоненте. В стандартных компонентах метод GetCacheID изменен только в компонентах bitrix:menu и bitrix:intranet.contact_center.list.
В качестве хранения системы хранения кеша можно выбрать Memcached или Redis. Обратите внимание, не рекомендуется использовать динамический sid для сайтов с многосайтовостью. Возможна проблема сброса кеша только по одному ключу sid.
Время кеширования
Время кеширования для компонентов с поддержкой тегированного кеша можно выбрать достаточно большим (например, один день). В случае изменения данных 1С-Битрикс автоматически отметит связанный кеш для удаления. По умолчанию при выборке данных из инфоблока [CIBlockResult::Fetch()](https://bxapi.ru/src/?module_id=iblock...3A%3AFetch) регистрируется тег инфоблока, поэтому вызов $CACHE_MANAGER->RegisterTag(...) необязателен. Стоить обратить внимание, что тег кеша скидок не регистрируется, поэтому при изменении скидок потребуется сбросить кеш вручную.
Особенность тегированного кеша 1С-Битрикс состоит в том, что при изменении любого товара, происходит сброс кеша всего каталога. Что приводит к проблеме, если при максимальной активности посетителей, изменения товаров происходят с периодичностью несколько раз в минуту. В таком случае рекомендуем выбрать время кеширования от 10 минут до 1 часа и отключить автоматическое тегирование перед вызовом компонента каталога.
В кеше стоит хранить компоненты на часто посещаемых страницах сайта и одинаковых для большой группы пользователей. Поэтому:
Кеширование при установленном фильтре (параметр CACHE_FILTER) стоит отключить по умолчанию. Включать, если используете дополнительный фильтр по умолчанию (заполняете $GLOBALS[$arParams['FILTER_NAME']]) и не выбраны дополнительные условия в смарт-фильтре. Также стоит включить CACHE_FILTER для страниц, ссылки на которые размещены на странице раздела в качестве тегов или используются в рекламе.
Список товаров в поиске также не стоит кешировать, т.к. кеш будет разным для каждого уникального запроса пользователя.
В персональном разделе покупателя использовать кеширование компонентов по умолчанию не требуется.
Если в параметрах компонента передаете генерируемые данные, которые со временем больше не могут быть использованы. Например, в качестве параметра компонента используете результат функции date('Y-m-d'). В таком случае потребуется реализовать агент, который будет очищать устаревший кеш (на основе \Bitrix\Main\Data\Cache::clearCache(...)), чтобы избежать переполнения места на диске.
PHP Fatal error: Declaration of Bitrix\Main\Diag\Logger::log($level, Stringable|string $message, array $context = []): void must be compatible with Psr\Log\LoggerInterface::log($level, $message, array $context = []) in ..../bitrix/modules/main/lib/diag/logger.php
Столкнулись с ошибкой, которую не удается зафиксировать в exception_handling 1С-Битрикс. Происходит фатальное исключение при попытке записать исключение в лог.
Обратитесь в «Техдиректор» за помощью, если сталкиваетесь с проблемой на вашем проекте.
Причина: 1. В главном модуле обновился пакет psr/log - для аргументов функции добавлено указание типов. 2. Класс для логирования exception_handling (Bitrix\Main\Diag\Logger) теперь так же реализует интерфейс с типами аргументов. 3. В проекте может быть загружена старая версия psr/log (без указания типов). Например, в php_interface или стороннем модуле.
Как происходит: 1. Класс Psr\Log\LoggerInterface загружается из старой версии psr/log (пункт №3) 2. Exception_handling 1С-Битрикс загружает Bitrix\Main\Diag\Logger (пункт №2). 3. PHP выбрасывает исключение, т.к. Bitrix\Main\Diag\Logger сужает набор типов аргумента относительно интерфейса. В PHP при наследовании можно только расширять набор типов аргументов функции или сужать тип возвращаемого значения ^1.
Как найти ошибку, если ничего не выводится и exception_handling не работает: 1. Проверьте error_log веб-сервера или файл, указанный в php.ini для error_log. 2. В начале скрипта вставьте register_shutdown_function с выводом последней зарегистрированной ошибки. Если в браузере не получается вывести ошибку, заполните $_SERVER['DOCUMENT_ROOT'] и запустите скрипт через ssh.
//$_SERVER['DOCUMENT_ROOT'] = ....; use for cli
register_shutdown_function(function() {
print_r(error_get_last());
});
Как найти старую версию psr/log, если столкнулись с таким текстом ошибки: 1. Перед строкой с проблемой можно вставить (например, в init.php). Обратите внимание, может давать разный результат в зависимости от порядка автозагрузки классов
$reflection = new ReflectionClass(\Psr\Log\LoggerInterface::class);
echo $reflection->getFileName();
2. Выполнить через ssh в директории сайта grep -r "namespace Psr\\\\Log;" --include=*.php . 3. Оригинальный psr/log лежит в файле bitrix/modules/main/vendor/psr/log/src/LoggerInterface.php. Если нашли имеено его, воспользуйтесь вторым вариантом поиска.
Что делать: 1. Удалить папку со старым psr/log, если расположена вне модуля. 2. Если расположена внутри модуля, переименовать папку psr/log внутри модуля. Написать разработчикам модуля. 3. Проверить, что сайт продолжает работать. В командной PHP-строке административной панели выполнить throw new RuntimeException('dummy');, проверить результат в логе exception_handling.
Чтобы избежать конфликта, устанавливайте зависимости composer, отключая загрузку пакетов, которые уже есть в главном модуле с помощью параметра replace. Для поддержки старых версий модуля main, реализуйте условный загрузчик на примере модуля techdir.sentry.
Сегодня покажем, как работает и как настроить наш модуль «Зоны доставки (DBS-адаптер)», который позволяет использовать «Яндекс.Карты» для расчета сроков и доступности доставки в модели DBS «Яндекс.Маркет».
Зачем нужен наш модуль
На сайте можно использовать модули разметки зон доставки, которые интегрированы со стандартной формой оформления заказа, но не поддерживают обработку заказов «Яндекс.Маркет», так как выполняют расчет дистанции и получение координат пользователя в веб-браузере, который не используется при запросах «Яндекс.Маркет» к «1С-Битрикс».
Наш модуль умеет загружать зоны доставки, размеченные в сторонних модулях, и выполнять расчет сроков и доступности доставки при запросах «Яндекс.Маркет».
Обратитесь в «Техдиректор» за консультацией по установке и настройке модуля.
Как работает модуль Работа модуля с разной удаленностью от МКАД в пределах Москвы.
Расчет сроков доставки через API запускается, когда покупатель переходит к оформлению заказа на «Яндекс.Маркет»:
Покупатель вводит адрес доставки;
«Яндекс.Маркет» отправляет запрос /cart к «1С-Битрикс»;
Модуль «Яндекс.Маркет для продавцов» создает объект заказа для расчета, заполняя местоположение и координаты покупателя в свойства заказа;
Наш модуль «Зоны доставки (DBS-адаптер)» загружает зоны доставки, проверяет совпадение координат и расчет дистанции. В зависимости от условий, настроенных администратором, модуль определяет поддержку доставки по указанному адресу и соответствующие сроки доставки.
Как настроить
Приведем шаги, которые необходимо выполнить. Подробную инструкцию можно найти на вкладке «Установка».
Заполните координаты по умолчанию для местоположений, в которых размечены зоны доставки. Будут использованы, когда пользователь только выбрал регион, но не заполнил адрес;
Добавьте службу доставки «Зоны доставки (DBS-адаптер)» в административной панели 1С-Битрикс. На вкладке «Настройки» выберите свойства заказа, в которых хранятся координаты, и нажмите сохранить;
После обновления странице на вкладке «Профили» добавьте профиль, соответствующий модулю, выбранному на 1-ом шаге. Заполните условия доставки на вкладке «Настройки» для профиля доставки;
На вкладке «Ограничения» профиля доставки добавьте ограничение по местоположению, выбрав регион, в котором находятся зоны доставки. Например, Москва и Московская область для доставки в пределах ЦКАД. Расчет доставки доставки будет запущен, если выбран соответствующий регион на «Яндекс.Маркет», возможность доставки будет уточнена на основе размеченных зон доставки;
Если необходимо, добавьте соответствующий вариант доставки в настройках обработки заказов (Маркет для продавцов -> Обработка заказов из маркетплейса).
Обратитесь в «Техдиректор» за помощью, если сталкиваетесь с проблемой при настройке.
Яндекс.Маркет постепенно переводит новые города на формат маркетплейса и показывает их жителям только те товары, которые можно купить прямо на Маркете. В этой статье расскажем, как настроить обработку заказов в формате маркетплейса в 1С-Битрикс с помощью модуля «Яндекс.Маркет для бизнеса».
Как подключиться?
Выберите способ работы;
Наполните каталог товаров;
Настройте обработку заказов через API.
Обратитесь в «Техдиректор» за помощью, если сталкиваетесь с технической проблемой (2000 ₽ за час без абонентской платы на промо-тарифе).
Выберите способ работы
Перед подключением необходимо выбрать модель, по которой вы хотите взаимодействовать с Маркетом:
FBY — привозите товары на склад Маркета заранее. Маркетплейс выполняет хранение, упаковку и доставку по России. Проверьте наличие склада в вашем городе;
FBS — привозите упакованный заказ в пункт приёма или сортировочный центр, маркетплейс выполняет доставку по России. Проверьте наличие сортировочных центров и пунктов приема заказов в вашем городе;
Экспресс — за 30 минут собираете заказы и передаёте их курьеру Маркета для доставки по городу за 1–2 часа. Работает в ограниченном списке населенных пунктов;
После оставьте заявку на подключение и дождитесь доступ в личный кабинет в ответном письме в течение нескольких дней.
Наполните каталог товаров
Обновление информации о товарах в каталоге Маркета выполняется с помощью прайс-листов. Правила формирования файла можно настроить в административной панели 1С-Битрикс раздел Прайс-листы (Маркет для бизнеса → Подготовка прайс-листа).
Особенности сопоставления полей
На шаге Сопоставление полей вы можете выбрать откуда загружать данные прайс-листа. Для добавления нового тега нажмите «Добавить элемент» и выберите требуемый тег.
Объединение торговых предложений на одной карточке Маркета: нажмите «Добавить атрибут элемента offer» и выберите group_id. Заполните источник - Свойства предложения, поле - Элемент каталога;
Дополнительные картинки товара: добавьте новый тег picture, выберите свойство (Свойства элемента или Свойства предложения), в котором хранятся дополнительные фотографии.
Поиск карточки товара на Маркете использует штрихкод (barcode) и код производителя (vendorCode): добавьте требуемый тег, выберите свойство, в котором храните значение. Если данных достаточно, ваш товар будет привязан к готовой карточке товара, вам не понадобиться выполнять поиск вручную;
Маркет рассчитывает стоимость доставки (DBS) и возможность отгрузки (FBS) на основе веса (weight) и размеров товара (dimensions): добавьте теги weight и dimensions, выберите источник из рекомендаций;
Маркируемые товары необходимо отметить в прайс-листе модели DBS: добавьте тег cargo-types, выберите источник из рекомендаций. В модели FBS необходимость маркировки определяется на основе принадлежности к категории;
Свойства карточки товара модели DBS передайте в тегах param: выберите источник Умные свойства для тега param и его атрибутов согласно документации. Умные свойства доступны, если включен механизм Единого управления свойствами, иначе добавьте для каждого свойства отдельный тег param и заполните название. Необходимо указать все важные характеристики товара — цвет, размер, объем, материал, вес, возраст, пол, и т. д.
Обратитесь в Техдиректор за помощью, если сталкиваетесь с технической проблемой (2000 ₽ за час без абонентской платы на промо-тарифе).
Прайс-лист DBS
На вкладке Общие настройки выберите Вид размещения - ADV/DBS, Тип описаний - Упрощенный. Отметьте Обновлять YML автоматически и укажите Период полной выгрузки (например, 1 час).
Настройте отбор товаров на шаге Выбор товаров и доставка: создайте группу товаров с условием Доступность равно Да, снимите отметку Добавить в прайс-лист все товары из инфоблока.
Сохраните и выгрузите прайс-лист, скопируйте ссылку в раздел Автообновление каталога (Товары) личного кабинета Маркета.
Карточки товаров FBS/FBY/Экспресс
На вкладке Общие настройки выберите Вид размещения - FBS/FBY, Тип описаний - Каталог. Снимите отметку Обновлять YML автоматически и оставьте невыбранным Период полной выгрузки.
В качестве shop-sku на шаге Сопоставление полей используйте:
Каталог с предложениями — источник Предложение и поле Ид (простые товары тоже поддерживаются);
Каталог с простыми товарами — источник Элемент и поле Ид.
На шаге Выбор товаров и доставка создайте группу товаров, отобрав товары которые хотите добавить, снимите отметку Добавить в прайс-лист все товары из инфоблока.
Сохраните файл прайс-листа на компьютер после выгрузки. И загрузите в разделе Каталог личного кабинета.
Обновление цен FBS/FBY/Экспресс
На вкладке Общие настройки выберите Вид размещения - FBS/FBY, Тип описаний - Цены. Отметьте Обновлять YML автоматически и укажите Период полной выгрузки (например, 1 час).
Заполните сопоставление полей аналогично прайс-листу с карточками товара.
Настройте отбор товаров на шаге Выбор товаров и доставка: создайте группу товаров с условием Доступность равно Да, снимите отметку Добавить в прайс-лист все товары из инфоблока.
Укажите ссылку на прайс-лист в разделе Цены (Товары) личного кабинета Маркета.
С какими проблемами можете столкнуться
Наценка на товары для компенсации единого тарифа доставки (DBS) — сформируйте шаблон для тега price или создайте отдельный тип цены;
Прайс-лист долго формируется/обновляется — выполните профилирование процесса экспорта, оптимизируйте работу сервера;
Товар продается упаковками — сформируйте шаблон для тега price с учетом коэффициента упаковки.
Обратитесь в Техдиректор за помощью, если сталкиваетесь с технической проблемой (2000 ₽ за час без абонентской платы на промо-тарифе).
Настройте обработку заказов в 1С-Битрикс
Магазин может обрабатывать заказы в личном кабинете без использования 1С-Битрикс. Какие преимущества 1С-Битрикс:
В личном кабинете
В 1С-Битрикс
Обновление остатков
Прайс-листы (каждые 30 минут) или вручную
API каждые 15 минут
Подтверждение заказа
Вручную в течение 2-х часов после заказа
Автоматически
Изменение статусов, состава заказа, маркировка товаров, трек-номер
Вручную
Автоматически из заказа 1С-Битрикс
Расчет даты доставки (DBS)
Настройки в личным кабинете
Доставка модуля интернет-магазин с учетом местоположения
Единый кабинет из разных источников
Нет
Да
Обработка заказа Маркета в 1С-Битрикс осуществляется через API. Настройка включает в себя несколько этапов, вам потребуется:
Добавить кампанию в 1С-Битрикс (Маркет для бизнеса → Обработка заказов из маркетплейса → Настройки);
Заполнить значения на вкладке Общие настройки согласно подсказкам, остальные вкладки для начала можно оставить по умолчанию. Скопируйте Адрес для запросов в раздел Настройки → Настройки API личного кабинета;
Выбрать способ подтверждения заказов через API (Настройки → Метод работы);
Настроить условия доставки и пункты самовывоза (Настройки → Доставка магазина), если выбрали модель DBS. Указанные условия будут отображены на витрине;
Создать тестовый заказ в разделе Настройки → Тестовые заказы личного кабинета. В 1С-Битрикс должен появиться заказ, его можно отменить;
Выполнить Самопроверку и оправить магазин на проверку службы качества.
С какими проблемами можете столкнуться
Сайт отвечает некорректно — исключите редиректы и проверьте https-сертификат сайта;
Ошибки при обработке запросов — адаптируйте пользовательские обработчики событий к запросам Маркета;
Сайт отвечает слишком долго — выполните профилирование запросов, оптимизируйте работу сервера;
Настройка доставки (DBS) — добавьте требуемые варианты доставки на вкладке Оплата и доставка, настройте график отгрузки и расписание доставки.
Товар продается упаковками, особенности учета остатков — модуль Маркет для бизнеса позволяет реализовать собственную бизнес-логику программно;
Группы на сайте создаются не только сотрудниками «1С-Битрикс», но и партнерами компании. Поэтому мнения участников групп могут не совпадать с позицией компании «1С-Битрикс».