• Почему выдает ошибку undefined?

    smilingcheater
    @smilingcheater
    1. у вас в выложенном на гитхаб проекте не прописаны нужные зависимости в package.json - gulp-clean-css, gulp-concat, gulp-less, gulp-stylus
    2. Путь в файлу test.sass в path.styles.src формируется криво - получается что-то типа
    C:/Users/koles/Desktop/gulp-switzerland/src/sass/test.sass/sass/test.sass - 2 раза кусок sass/test.sass в конце
    3. а зачем вообще хардкодить полный путь? Это же не будет работать нигде , кроме вашего компа?
    4. Даже после этих исправлений всё равно выведется ошибка
    Error: File not found with singular glob: C:/Users/koles/Desktop/gulp-switzerland/src/sass/test.sass (if this was purposeful, use `allowEmpty` option)
    Внимательно её прочитайте.
    И исправьте.
    Ответ написан
    2 комментария
  • Как анимировать эту SVG картинку?

    smilingcheater
    @smilingcheater
    @keyframes rotation {
            from {
                transform: rotate(0deg);
            }
            to {
                transform: rotate(360deg);
            }
        }
        svg {
            animation: rotation 1s steps(9) infinite;
        }
    Ответ написан
    Комментировать
  • Как задать и получить пользовательские параметры настоек компонента Bitrix в массив $arParams?

    smilingcheater
    @smilingcheater
    Переношу комментарии в ответ.

    Вы точно сохранили файл с подключением этого компонента после изменения его настроек?
    Если посмотреть файл, где вы подключаете компонент, как PHP-код - в нём заданы эти параметры?

    Вы пока только описали эти параметры. Пока вы не сохраните компонент с подключенными параметрами - в $arParams они не попадут. В $arParams попадает только то, что прописано в php-коде.
    Достаточно будет зайти в настройку подключения компонента (то окно, которое у вас в вопросе на 2 скрине) и сохранить его.
    Ответ написан
    Комментировать
  • Как работает Битрикс с memcached?

    smilingcheater
    @smilingcheater
    Отвечу в обратном порядке - мерялка скорости работы проверяет не только скорость отдачи HTML бекендом (битриксом), но и насколько быстро этот HTML выводится браузером. Если у вас быстрый бек, но тяжёлый фронт - мемкеш вам ничем не поможет. Надо смотреть подробную статистику что именно тормозит.

    Вы пишете, что у вас установлен PHP 7 - а какой именно - 7.0, 7.1, ..., 7.4?
    И какое у вас веб-окружение - шаред-хостинг, vps/vds, BitrixVM?
    В общем случае чтобы заставить битрикс работать с мемкешем, надо:
    (все команды привожу для Debian/Ubuntu)
    apt-get install -y memcached - поставить на сервере сам мемкеш
    apt-get install -y php7.1-dev - установить dev-пакет для вашей версии PHP
    pecl install memcache - через PECL установить модель memcache для битрикса
    возможно потребуется установить дополнительные библиотеки, чаще всего спотыкается на zlib:
    apt-get install -y zlib1g-dev
    после этого добавить подключение библиотеки в php.ini:
    extension=memcache.so
    и перезапустить вебсервер
    После этого в конфиге битрикса прописать (файл /bitrix/.settings.php)
    'cache' => array(
            'value' => array (
                'type' => 'memcache',
                'memcache' => array(
                    'host' => '127.0.0.1',
                    'port' => '11211'
                ),
                'sid' => $_SERVER["DOCUMENT_ROOT"]."#01"
             ),
        ),

    (заменив текущий блок 'cache')
    Ответ написан
    Комментировать
  • Почему в элемент не добавляется массив изображения?

    smilingcheater
    @smilingcheater
    Зачем вы хотите в каждый отзыв копировать аватар пользователя? Это как минимум не рационально. В отзыве уже хранится ИД пользователя, при выводе картинки просто доставайте его аватар.
    Ответ написан
  • Загловок h1 выводиться только с припиской в url - ?clear_cache=Y?

    smilingcheater
    @smilingcheater
    Предположу, что этот заголовок у вас выводится где-то внутри шаблона компонента, и вы меняли вёрстку в этом шаблоне с h2 на h1.
    Почему так происходит - потому что компоненты в битриксе кешируются. Обновление кеша рендерит текущую страницу без учёта кеша, но глобально кеш не сбрасывает.

    Сбростьте полностью кеш битрикса. Админка - Настройки - Настройки продукта - Автокеширование. Вкладка "Очистка файлов кеша", выбрать "Все", и нажать "Начать".
    Ответ написан
  • Почему не работает push на git?

    smilingcheater
    @smilingcheater
    Насколько я понимаю - в гите сильно большой объём изменений накопился. Попробуйте разбить пуш на 2 - сделать ветку из какого-нибудь промежуточного коммита (промежуточного между вашим мастером и тем, что на гитлабе), пушнуть её. Потом пушнуть текущего мастера.
    Ответ написан
  • Как найти метод с медленным запросом к БД и как сократить время выполнения?

    smilingcheater
    @smilingcheater
    У вас эти картинки реально на файловой есть? Выглядит так, будто картинки нет, вместо неё возвращается 404, которая отдаётся битриксом. Я бы предложил открыть в браузере 404, включить битриксовую отладку (панель эрмитажа, развернуть, кнопка "Отладка") и в выведенной отладочной информации искать виновника.

    На вашем скрине в статистике время выполнения запросов порядка 0.25-0.35 сек, но время выполнения всей страницы доходит до 4-5 сек. Выглядит так, будто какой-то тяжёлый компонент на 404 работает с выключенным кешированием.

    А ещё лучше - настроить, чтобы картинки отдавал NGINX, и 404 на картинки тоже он.
    Ответ написан
    1 комментарий
  • Проблема с повторным запуском контейнера?

    smilingcheater
    @smilingcheater
    Ругается, что не может найти сеть с каким-то странным именем. Вероятно надо как-то сделать чтобы имя сетевого адаптера (?) не менялось. Пробовали прописывать конкретные настройки сети в докер-композе? https://docs.docker.com/compose/networking/

    Опишите секцию network
    Ответ написан
    Комментировать
  • Почему Phpstorm запрашивает несуществующий путь к файлу?

    smilingcheater
    @smilingcheater
    Попробуйте отключить "виртуальный диск" в настройках опенсервера (Настройки, вкладка "Сервер", самая первая настройка). Опенсервер почему-то упорно думает, что установлен на диске E. После этого перезапустите опенсервер (возможно потребуется перезагрузиться).

    Либо пропишите конктеный путь до папки в расширениями:
    ПКМ на флажок опенсервера в трее - Дополнительно - Конфигурация - PHP
    откроется файл шаблона конфигурации (не самого конфига, а шаблона, из которого опенсервер при каждом запуске собирает свой конфиг. Так что после изменения этого файла обязательно перезапускать опенсервер)
    Ищите строку extension_dir=....
    У меня оно равно
    extension_dir = "%sprogdir%/modules/php/%phpdriver%/ext/"
    переменная sprogdir - "Генерируемый путь до папки с Open Server с учетом виртуального диска (слеш "/")" (описано в доках https://ospanel.io/docs/ )

    Надо заполнить переменную extension_dir реальным полным путём до папки \modules\php\PHP_7.1-x64\ext\ и перезапустить опенсервер, чтобы он перегенерировал файл конфига
    Ответ написан
    1 комментарий
  • Почему "array_walk_recursive" не срабатывает в данном случае?

    smilingcheater
    @smilingcheater
    Эм, ну как бы потому, что это array_walk_recursive.
    Если она встречает массив как значение текущего ключа - она в него заходит и начинает применять коллбек на скалярные элементы в нём.
    ---
    Итоговый вариант ответа: написать собственную рекурсивную функцию для обхода массива. Например вот так:
    function recursiveProcess($array) {
        foreach ($array as $key => $value) {
            if ($key == 'car' && is_array($value) && isset($value['color'])) {
                // Нашли!
            }
            
            if (is_array($value)) {
                // Встретили массив - заходим в него
                recursiveProcess($value);
            }
        }
    }
    Ответ написан
  • Почему js не видит ответа на ajax запрос?

    smilingcheater
    @smilingcheater
    XHR - асинхронный запрос. Получить ответ от сервера можно на событиях. Читайте https://learn.javascript.ru/xmlhttprequest , там всё есть.
    Ответ написан
    Комментировать
  • Как вывести Яндекс карту через инфоблока?

    smilingcheater
    @smilingcheater
    Распечатай и посмотри переменную $arResult[PROPERTIES][ATT_MMAS] - там будет что-то типа ~VALUE или ~TEXT - битрикс значения в html-полях перед выводом экранирует, для безопасности, но оригинальное значение оставляет в поле с тильдой (~) в начале
    Ответ написан
  • Каким образом в карточке товара вывести товары с одинаковым значением свойства?

    smilingcheater
    @smilingcheater
    Если вы хотите фильтровать именно по текстовому значению списка - вам надо использовать в фильтре 'PROPERTY_KOLLEKTSIYA_VALUE' => ...

    Но это будет не оптимально по скорости выполнения запроса.

    Лучше использовать поиск по ID значения в списке. Посмотрите в массиве $arResult['DISPLAY_PROPERTIES']['KOLLEKTSIYA'] в каком именно свойстве хранится ID элемента списка, я к сожалению не помню какой именно ключ надо использовать.
    Ответ написан
  • Как вы справляетесь с тупняком в программировании?

    smilingcheater
    @smilingcheater
    Стоя в душе ­– думайте. Катаясь на велосипеде, прогуливаясь по парку, выделывая невообразимые трюки на роликах ­– думайте. Сталкиваясь с дилеммами, которые обусловлены принятыми проектными решениями, ­­– думайте. Думать значительно полезнее, чем смотреть телевизор или бесцельно бродить по Сети, – пусть даже там 500 каналов, но на самом деле на них ничего не происходит, и то, что они как будто избавляют человека от необходимости мыслить, совершенно не здорово. Думайте напряженно, до изнеможения, а когда не останется сил – начинайте заново. Результат вас удивит.

    (c) Дж. Ханк Рейнвотер. Как пасти котов
    Ответ написан
    1 комментарий
  • Как при помощи id найти имя пользователя в дрогой таблице?

    smilingcheater
    @smilingcheater
    Прочитать про оператор JOIN в используемой вами СУБД (которая в вашем вопросе не указана).
    Написать запрос с его использованием.
    Ответ написан
    6 комментариев
  • Каким образом можно оптимизировать запрос на выборку большого количества записей?

    smilingcheater
    @smilingcheater
    Вы сейчас сначала выбираете из базы все элементы с их свойствами (CIBlockElement::GetList), затем в цикле для каждого элемента дополнительно загружаете ещё раз все его свойства (CIBlockElement::getProperty), а затем ещё одним запросом в цикле получаете данные о связанном элементе (getElementByID), который будет везде одинаков т.к. вы выбираете с фильтрацией как раз по этому свойству.

    Я бы предложил сделать так: сначала загрузить все новости, собрать ID связанных типов спорта, потом подгрузить одним отдельным запросом нужную инфу по типам спорта, и распихать её по новостям. Примерный код будет такой:

    function sportNews($iblockId, $sportTypeId) {
        $arSelect = ["*", "PROPERTY_*", "PROPERTY_SPORT_TYPE"]; // Добавить в выборку поле типов спорта. Отдельно с указанием кода - чтобы можно было к нему обращаться по коду, а не по ID
        $arFilter = ["IBLOCK_ID" => $iblockId, "=PROPERTY_SPORT_TYPE" => $sportTypeId];
        $arItems  = [];
        $res      = CIBlockElement::GetList([], $arFilter, false, ["nPageSize" => 500], $arSelect);
    
        $sportTypes = []; // Массив, в который мы собираем ID связанных типов спорта
    
        while ($arItem = $res->fetch()) {
            $sportTypes = array_merge($sportTypes, $arItem['PROPERTY_SPORT_TYPE_VALUE']); // Собираем в массив
            $arItems[] = $arItem;
        }
    
    
        if (!empty($sportTypes)) {
            $sportTypes = array_unique($sportTypes);
            $arFilterSport = ['ID' => $sportTypes, 'IBLOCK_ID' => 'ИД Инфоблока типов спорта'];
            $resSport      = CIBlockElement::GetList([], $arFilterSport);
    
            $sportReference = [];
            while ($arItem = $resSport->fetch()) {
                $sportReference[$arItem['ID']] = $arItem; // Раскладываем выбранные типы спорта в ассоциативный массив по ID'шникам
            }
    
            foreach ($arItems as $ind => $arItem) { // Проходимся по всем новостям
                $arItems[$ind]['SPORT_TYPE'] = [];
                foreach ($arItem['PROPERTY_SPORT_TYPE_VALUE'] as $sportTypeId) {
                    $arItems[$ind]['SPORT_TYPE'][] = $sportReference[$sportTypeId]; // Рассовываем в них загруженные типы спорта
                }
            }
        }
    
        return $arItems;
    }
    
    $iblockId = 10; // ID инфоблок новости спорта
    $sportTypeId = 5; // ID элемента инфоблока виды спорта (футбол)
    sportNews($iblockId, $sportTypeId);
    Ответ написан
    Комментировать
  • Почему гугл хром не спрашивает разрешение показать геолокацию?

    smilingcheater
    @smilingcheater
    Да, для хрома это именно так. По требованиям безопасности браузера разрешено пользоваться JS Geolocation API только на локальном домене, либо только по HTTPS. В остальных браузерах, кроме хрома, может быть по другому.
    Если вы откроете консоль браузера - скорее всего там будет ошибка/варнинг с пояснением про протокол.
    Ответ написан
    Комментировать
  • Как сверстать чудо меню?

    smilingcheater
    @smilingcheater
    Идеи? Использовать calc() и vw
    Поясню. В выпадающем жёлтом блоке с меню будет достаточно дать слева отступ такой же ширины, как и расстояние от края эжкрана до основного container. Предположим контейнер в 1000px. Тогда расстояние от левого края до него будет равно (100vw - 1000px) / 2;
    Соответственно у выпадашки с меню padding-left: calc(50vw - 500px);
    Ответ написан
    Комментировать