• Почему не работает CFile::MakeFileArray(); в агенте?

    искать в проекте копию Psr\Http\Message\StreamInterface другой версии . ( Одна копия запихана в недра модуля main ).
    Ответ написан
    1 комментарий
  • Как определить, загрузился ли скрипт или нет?

    @holllop
    Для того чтобы определить, загружен ли скрипт или находится в процессе загрузки, можно использовать флаги или атрибуты, которые вы могли бы установить в элементе скрипта. В вашем случае, как один из вариантов, можно добавить к элементу скрипта атрибут data-loaded, который будет указывать на его состояние. Для этого вам нужно модифицировать функцию isScript.
    spoiler
    Примерно как-то так, если я правильно понял ход ваших мыслей
    const isScriptLoaded = (url) => {
        const scripts = document.getElementsByTagName('script');
        for(let i = scripts.length; i--;) {
            if(scripts[i].src === url) {
                return scripts[i].getAttribute('data-loaded') === 'true' ? scripts[i] : false;
            }
        }
        return false;
    };
    
    const loadScriptBody = (c) => {
        let url = (c.params) ? arrayToUrlParams(c.url, c.params) : c.url;
        let script = isScriptLoaded(url);
        if(script){
            // Скрипт уже загружен и готов к использованию:
            c.callback();
        } else {
            script = document.createElement('script');
            script.src = url;
            script.setAttribute('data-loaded', 'false');  // Устанавливаем флаг загруженности в 'false'
            script.addEventListener("load", () => {
                script.setAttribute('data-loaded', 'true'); // Меняем флаг на 'true', когда скрипт загрузился
                c.callback();
            }, false);
    
            if(c.attributes && c.attributes.length > 0){
                for(let i = 0; i < c.attributes.length; i++){
                    script.setAttribute(c.attributes[i].name, c.attributes[i].value);
                }
            }
            document.getElementsByTagName('head')[0].appendChild(script);
        }
    };
    Ответ написан
    7 комментариев
  • Куда добавить ymaps3.getDefaultConfig().setApikeys чтобы принял ключ?

    @TimurRyabinin
    Здравствуйте! Я из Яндекса. Попробуйте разместить фрагмент кода с «ymaps3.ready.then(() => { ymaps3.getDefaultConfig().setApikeys({ router: CONFIG.options.routing.apikey }) })» после импорта необходимых сущностей перед инициализацией карты.

    Также рекомендую вам проверить, что находится в «CONFIG.options.routing.apikey» и есть ли доступ к данному свойству при отдаче API-ключа через «ymaps3.getDefaultConfig().setApikeys».

    Посмотреть наглядный пример вы можете на странице https://ya.cc/t/Ms9iz5zg4zrGhZ во вкладке «common.ts». Приложил вам скриншот для наглядности.6634f347864e0139771243.png
    Ответ написан
    2 комментария
  • Почему не работает LOGIC =>OR в CIBlockSection::GetList?

    babarun
    @babarun Куратор тега 1С-Битрикс
    Безумный план моих идей в руках больных людей
    К сожалению, LOGIC в методе CIBlockSection::GetList нет. Сложная логика есть только в методе GetList класса CIBlockElement.
    Попробуйте SectionTable и query.
    Ответ написан
    1 комментарий
  • Как построить древовидный массив по уровню?

    0xD34F
    @0xD34F
    function createTree($data, $params = []) {
      extract($params + [
        'levelKey' => 'level',
        'childrenKey' => 'children',
      ]);
    
      $root = [];
    
      foreach ($data as $n) {
        $arr = &$root;
    
        for (
          $level = $data[0][$levelKey];
          $level++ < $n[$levelKey];
          $arr = &$arr[count($arr) - 1][$childrenKey]
        ) ;
    
        $arr[] = $n + [ $childrenKey => [] ];
      }
    
      return $root;
    }
    
    
    $tree = createTree($arMenu, [ 'levelKey' => 'LEVEL' ]);

    или

    function createTree($data, $params = []) {
      $levelKey = $params['levelKey'] ?? 'level';
      $childrenKey = $params['childrenKey'] ?? 'children';
    
      $root = [];
      $stack = [ [ $data[0][$levelKey], &$root ] ];
    
      foreach ($data as $n) {
        $end = end($stack);
        $level = $n[$levelKey];
    
        if ($level > $end[0]) {
          $stack[] = [ $level, &$end[1][count($end[1]) - 1][$childrenKey] ];
        } else while ($level < end($stack)[0]) {
          array_pop($stack);
        }
    
        end($stack)[1][] = array_merge($n, [ $childrenKey => [] ]);
      }
    
      return $root;
    }
    Ответ написан
    Комментировать
  • Почему событие onclick срабатывает 2 раза?

    delphinpro
    @delphinpro Куратор тега JavaScript
    frontend developer
    function CLICK() {
      let button = document.querySelectorAll('button');
      if(button.length){ 
        for (let i = 0; i < button.length; i++){
    +     if (!button[i].classList.contains('ok'))
    +       button[i].classList.add('ok');
            button[i].addEventListener('click', function(EVENT){
              console.log(1,button[i]);
            });
    +     }
        }
      }
    }
    CLICK();


    Но лучше подумать о делегировании событий.
    Ответ написан
    4 комментария
  • Как написать условие - диапазон вне диапазона?

    Stalker_RED
    @Stalker_RED
    (x<a && y<a) || (x>b && y>b)
    То есть обе границы первого диапазона меньше, или больше, чем границы второго.
    Если известно, что x всегда меньше, чем y, то можно короче
    y<a||x>b
    Ответ написан
    3 комментария