• Как можно добавить список из 800 городов в условия доставки курьером, Битрикс?

    @bionkin Автор вопроса
    2 первых пункта получились.
    В хайлоад блоке имеем следующее prntscr.com/bw079u

    Есть проблема с проверкой города и региона.
    Допустим, пользователь указал свой местоположение как Федоровка Самарская область.
    Смотрю в хайлоад:
    <?php
    // подключаем пространство имен класса HighloadBlockTable и даём ему псевдоним HLBT для удобной работы
    use Bitrix\Highloadblock\HighloadBlockTable as HLBT;
    // id highload-инфоблока
    const MY_HL_BLOCK_ID = 3;
    //подключаем модуль highloadblock
    CModule::IncludeModule('highloadblock');
    //Напишем функцию получения экземпляра класса:
    function GetEntityDataClass($HlBlockId) {
        if (empty($HlBlockId) || $HlBlockId < 1)
        {
            return false;
        }
        $hlblock = HLBT::getById($HlBlockId)->fetch();   
        $entity = HLBT::compileEntity($hlblock);
        $entity_data_class = $entity->getDataClass();
        return $entity_data_class;
    }
    
    
    $entity_data_class = GetEntityDataClass(MY_HL_BLOCK_ID);
    $arFilter = Array(
       Array(
          "LOGIC"=>"AND",
          Array(
             "UF_REG_NAME"=>'Самарская область'
          ),
          Array(
             "UF_CITY_NAME"=>'Федоровка'
          )
       )
    );
    $rsData = $entity_data_class::getList(array(
       'select' => array('*'),
       'filter' => $arFilter
    ));
    while($el = $rsData->fetch()){
        var_dump($el);
    }
    ?>

    в результате получаю массив:
    array(6) { ["ID"]=> string(3) "227" ["UF_REG"]=> string(2) "38" ["UF_REG_NAME"]=> string(33) "Самарская область" ["UF_ZIP"]=> string(0) "" ["UF_CITY"]=> string(3) "143" ["UF_CITY_NAME"]=> string(18) "Федоровка" }
    Т.е. эта запись присутствует.

    В автоматизированном обработчике простой доставки есть условие, что заданное пользователем местоположение должно соответствовать группе местоположений:
    // введем служебный метод, определяющий группу местоположения и возвращающий стоимость для этой группы.
      function __GetLocationPrice($LOCATION_ID, $arConfig)
      {
        // получим список групп для переданного местоположения
        $dbLocationGroups = CSaleLocationGroup::GetLocationList(array("LOCATION_ID" => $LOCATION_ID));
        print_r($dbLocationGroups);
        while ($arLocationGroup = $dbLocationGroups->Fetch())
        {
          if (
            array_key_exists('price_'.$arLocationGroup["LOCATION_GROUP_ID"], $arConfig) 
            && 
            strlen($arConfig['price_'.$arLocationGroup["LOCATION_GROUP_ID"]]["VALUE"] > 0)
          )
          {
          // если есть непустая запись в массиве настроек для данной группы, вернем ее значение
            return $arConfig['price_'.$arLocationGroup["LOCATION_GROUP_ID"]]["VALUE"];
          }
        }
    
        // если не найдено подходящих записей, вернем false
        return false;
      }
    
      // метод проверки совместимости в данном случае практически аналогичен рассчету стоимости
      function Compability($arOrder, $arConfig)
      {
        // проверим наличие стоимости доставки
        $price = CDeliverySimple::__GetLocationPrice($arOrder["LOCATION_TO"], $arConfig);
        print_r($arOrder["LOCATION_TO"]);
        print_r($price);
    	
        if ($price === false)
          return array(); // если стоимость не найдено, вернем пустой массив - не подходит ни один профиль
        else
          return array('simple'); // в противном случае вернем массив, содержащий идентфиикатор единственного профиля доставки
      }


    Пожалуйста, подскажите, как можно в данном случае проверить не группы местоположений, а наличие местоположения в хайлоад блоке, чтобы была доступна доставка курьером?
  • Как увеличить высоту блока при клике по ссылке внутри (см скриншот)?

    @bionkin Автор вопроса
    Спасибо.
    Взял скрипты из примера.
    Высоту правильно определяет исходного блока
    $( "#getp" ).click(function() {
    showHeight( "paragraph", $( "#block" ).height() );
    });

    Но не меняет по клику по ссылке #str
    $( "#str" ).one( "click", function() {
    $( "#block" ).height( 1730 );
    });