Свои настройки в модуле решения

Файл bitrix/modules/astdesign.marketpro/custom_params.php уже есть в поставке решения — с пустым массивом. Его нужно не создать, а отредактировать.

Пример содержимого:

<?php
$customParams = [
    "hideProductsNoPreviewPicture" => [
        "TITLE" => "Скрывать товары без картинки анонса",
        "TYPE" => "checkbox",
        "DEFAULT" => ""
    ],
    "hideProductsNoDetailPicture" => [
        "TITLE" => "Скрывать товары без детальной картинки",
        "TYPE" => "checkbox",
        "DEFAULT" => ""
    ],
    "hideProductsNoPrice" => [
        "TITLE" => "Скрывать товары без цены",
        "TYPE" => "checkbox",
        "DEFAULT" => ""
    ],
];

В результате на странице настроек решения появится секция


Пример получения значения добавленной настройки:

\Astdesign\Marketpro\Solution::getOption("hideProductsNoPreviewPicture", "N")

Скрытые рычаги решения

Через этот же файл объявляются настройки, которых нет в админке. Часть параметров решение сознательно держит в коде — владельцу магазина их крутить незачем, — но у конкретного клиента их можно вынести в настройки:

  • geoRequestTimeout и geoRequestConnectTimeout — таймауты запроса к сервису определения города по IP. По умолчанию три и две секунды: если сервис не ответил, посетитель получает город по умолчанию, а не висящую страницу.

  • pushDevicesDays — сколько дней хранить токены устройств, которые не заходили в приложение. По умолчанию срок задан по поведению FCM, который сам инвалидирует токен примерно через 270 дней простоя.

  • параметры прогона push-рассылки, кроме размера партии: параллельность, таймауты, число попыток, интервал пересмотра сегмента.

Объявили опцию в custom_params.php — и Solution::getOption() начнёт брать значение из настроек решения вместо константы. Править ядро для этого не нужно.

Что переживает обновление

Папка lib/custom обновлением не затирается: сборщик пакета исключает её из поставки, поэтому переопределённые методы остаются на месте. Так же исключены backups, logs и files.

С custom_params.php иначе: он входит в поставку модуля. Пакет обновления содержит только изменённые файлы, поэтому обычно его не трогает — но однажды он в пакет уже попадал, когда решение его добавляло. Значит риск есть.

Держите этот файл под контролем версий и проверяйте после обновления: пустой массив вместо ваших настроек означает, что файл перезаписали. Как удобно это отслеживать — в статье «Контроль версий».