267  /  328

Пользовательские ограничения

Просмотров: 1802 (Статистика ведётся с 06.02.2017)
Дата последнего изменения: 18.01.2017

С переходом магазина на новую схему работы для служб доставок и платежных систем было введено понятие ограничений. Таким образом, службу доставки можно настроить так, что она будет работать только для некоторого местоположения, только для заказов такой-то стоимости,веса или выбрать другие ограничения из стандартных ограничений. Аналогичные настройки доступны и для платежных систем.

Вы можете дополнить стандартный набор ограничений своими собственными ограничениями. Для этого следует в зависимости от ваших нужд использовать события инициализирования ограничений:

  • для служб доставок onSaleDeliveryRestrictionsClassNamesBuildList:
    Bitrix\Main\EventManager::getInstance()->addEventHandler(
        'sale',
        'onSaleDeliveryRestrictionsClassNamesBuildList',
        'myDeliveryFunction'
    );
    
  • для платежных систем onSalePaySystemRestrictionsClassNamesBuildList:
    Bitrix\Main\EventManager::getInstance()->addEventHandler(
        'sale',
        'onSalePaySystemRestrictionsClassNamesBuildList',
        'myPayFunction'
    );
    

В обработчиках событий соответственно следует возвращать ваш класс ограничений:

  • для служб доставок:
    function myDeliveryFunction()
    {
        return new \Bitrix\Main\EventResult(
            \Bitrix\Main\EventResult::SUCCESS,
            array(
                '\MyDeliveryRestriction' => '/bitrix/php_interface/include/mydelrestriction.php',
            )
        );
    }
    
  • для платежных систем:
    function myPayFunction()
    {
        return new \Bitrix\Main\EventResult(
            \Bitrix\Main\EventResult::SUCCESS,
            array(
                '\MyPayRestriction' => '/bitrix/php_interface/include/mypayrestriction.php',
            )
        );
    }
    

Далее, описывая ограничение, вы можете вводить какие-то собственные правила. Например, в примере приведено ограничение доступности службы доставки/платежной системы по лунным суткам:

  • для служб доставок:
    use Bitrix\Sale\Delivery\Restrictions;
    use Bitrix\Sale\Internals\Entity;
    
    class MyDeliveryRestriction extends Restrictions\Base
    {
        public static function getClassTitle()
        {
            return 'по лунным суткам';
        }
    
        public static function getClassDescription()
        {
            return 'доставка будет выводится только в указанном диапазоне лунных суток';
        }
    
    public static function check($moonday, array $restrictionParams, $deliveryId = 0)
    {
        if ($moonday < $restrictionParams['MIN_MOONDAY']
            || $moonday > $restrictionParams['MAX_MOONDAY'])
            return false;
    
        return true;
    }
    protected static function extractParams(Entity $shipment)
    {
        $json = file_get_contents('http://moon-today.com/api/index.php?get=moonday');
        $res = json_decode($json, true);
        return !empty($res['moonday']) ? intval($res['moonday']) : 0;
    }
    public static function getParamsStructure($entityId = 0)
        {
            return array(
                "MIN_MOONDAY" => array(
                    'TYPE' => 'NUMBER',
                    'DEFAULT' => "1",
                    'LABEL' => 'Минимальные сутки'
                ),
                "MAX_MOONDAY" => array(
                    'TYPE' => 'NUMBER',
                    'DEFAULT' => "30",
                    'LABEL' => 'Максимальные сутки'
                )
            );
        }
    }
    
  • для платежных систем:
    use Bitrix\Sale\Services\Base;
    use Bitrix\Sale\Internals\Entity;
    
    class MyPayRestriction extends Base\Restriction
    {
        public static function getClassTitle()
        {
            return 'по лунным суткам';
        }
    
        public static function getClassDescription()
        {
            return 'платежная система будет выводится только в указанном диапазоне лунных суток';
        }
    
    public static function check($params, array $restrictionParams, $serviceId = 0)
    {
        if ($params < $restrictionParams['MIN_MOONDAY']
            || $params > $restrictionParams['MAX_MOONDAY'])
            return false;
    
        return true;
    }
    protected static function extractParams(Entity $entity)
    {
        $json = file_get_contents('http://moon-today.com/api/index.php?get=moonday');
        $res = json_decode($json, true);
        return !empty($res['moonday']) ? intval($res['moonday']) : 0;
    }
    public static function getParamsStructure($entityId = 0)
        {
            return array(
                "MIN_MOONDAY" => array(
                    'TYPE' => 'NUMBER',
                    'DEFAULT' => "1",
                    'LABEL' => 'Минимальные сутки'
                ),
                "MAX_MOONDAY" => array(
                    'TYPE' => 'NUMBER',
                    'DEFAULT' => "30",
                    'LABEL' => 'Максимальные сутки'
                )
            );
        }
    }
    
7
Курсы разработаны в компании «1С-Битрикс»

Если вы нашли неточность в тексте, непонятное объяснение, пожалуйста, сообщите нам об этом в комментариях.
Развернуть комментарии