• Как назначить событие при изменении класса элемента?

    Вы можете переопределить ф-ю добавления класса, если вы используете jQuery, получится что-то типо этого:
    (function(){
        //Сохраняем ссылку на стандартный метод jQuery
        var originalAddClassMethod = jQuery.fn.addClass;
        //Переопределяем
        $.fn.addClass = function(){
            var result = originalAddClassMethod.apply(this, arguments);
            //Инициализируем событие смены класса
            $(this).trigger('cssClassChanged');
            return result;
        }
    })();
    
    $(function(){
        $("#test").bind('cssClassChanged', function(){ 
            //Отработает, как только сменится класс
        });
    });

    А вообще можно посмотреть в сторону angularjs с его дада-биндингом.
    Ответ написан
    Комментировать
  • Как при минификации HTML удалять комментарии?

    efiand
    @efiand
    Веб-разработчик, преимущественно фронтендер
    .pipe(htmlmin({
    collapseWhitespace: true,
    removeComments: true
    }))

    https://github.com/kangax/html-minifier#options-qu...
    Ответ написан
    Комментировать
  • Как при минификации HTML удалять комментарии?

    erniesto77
    @erniesto77
    oop, rb, py, php, js
    как вариант
    $ npm install --save-dev gulp-remove-html-comments

    var gulp = require('gulp');
    var removeHtmlComments = require('gulp-remove-html-comments');
     
    gulp.task('html', function () {
      return gulp.src('src/*.html')
        .pipe(removeHtmlComments())
        .pipe(gulp.dest('dist'));
    });

    https://www.npmjs.com/package/gulp-remove-html-comments
    Ответ написан
    1 комментарий
  • Как с помощью javascript узнать расстояние между элементами, не обращаясь к style?

    Insanus
    @Insanus
    там подробней

    offsetParent – «родитель по дереву рендеринга» – ближайшая ячейка таблицы, body для статического позиционирования или ближайший позиционированный элемент для других типов позиционирования.
    offsetLeft/offsetTop – позиция в пикселях левого верхнего угла блока, относительно его offsetParent.
    offsetWidth/offsetHeight – «внешняя» ширина/высота блока, включая рамки.
    clientLeft/clientTop – отступ области содержимого от левого-верхнего угла элемента. Если операционная система располагает вертикальную прокрутку справа, то равны ширинам левой/верхней рамки, если же слева (ОС на иврите, арабском), то clientLeft включает в себя прокрутку.
    clientWidth/clientHeight – ширина/высота содержимого вместе с полями padding, но без полосы прокрутки.
    scrollWidth/scrollHeight – ширина/высота содержимого, включая прокручиваемую область. Включает в себя padding и не включает полосы прокрутки.
    scrollLeft/scrollTop – ширина/высота прокрученной части документа, считается от верхнего левого угла.
    Ответ написан
    1 комментарий
  • Как сменить порт на клиенте Wireguard?

    @q2digger
    никого не трогаю, починяю примус
    Остановите клиент. Убедитесь что не запущен.
    Смените порт в конфиге. Запускайте.
    Ответ написан
    2 комментария
  • При компиляции SASS файла изменений в CSS нет, как решить?

    @Ivan_Efimov
    Junior frontend
    "Я использую плагин VS Code Live sass compiler" давайте уточним: вы используете Live sass compiler за авторством Glenn Marks? Далее, если вы используете данный плагин, то у вас в строке состояния отображается кнопка "Watch sass" и она находится в состоянии "watching...", когда вы вносите изменения в .sass, то "watching..." меняется на "success". Если не вносить каких-то специальных путей в настройки плагина в файле settings.json, то .css файл генерируется в той же папке.
    "но почему код не дублируется в CSS(он у меня пустой)?" - Live sass compiler генерирует css в файл с таким же названием, что и он сам. Возможно у вас открыт в редакторе другой файл css, который вы создали сами заранее, но компилятор о нём не знает. "на моменте создания CSS файла код скопировался и больше не копировался" - Live sass compiler постоянно заменяет предыдущий сгенерированный css-файл новой версией.

    Далее для google chrome: включаем режим разработчика, переходим на вкладку "soruces":
    60138e8fe32a6859767525.jpeg
    Попробуйте поискать изменения там, откройте папку, в которой находится нужный подключённый css.
    Ответ написан
    2 комментария
  • Как решить проблему с отображением слайдера Slick?

    @PerfectLab
    Попробуйте инициализировать слайдер после клика на таб:
    $(".slider").slick('reinit');
    Ответ написан
    8 комментариев
  • Как убрать категорию по умолчанию Woocommerce?

    @YanAlexandrov
    Чайник со стажем
    Хоть и поздно, но всё же, вдруг кому пригодится. Можно через хук:
    add_filter( 'option_default_product_cat', function( $value, $option ) {
    	return false;
    }, 9999, 2 );
    Ответ написан
    Комментировать
  • Как выбрать несколько элементов инфоблока Bitrix по массиву ID?

    Вообще то значения массива arFilter поддерживают массивы.
    $arFilter = Array("IBLOCK_ID"=>1, "ID"=>array(1,2,3));
    $res = CIBlockElement::GetList(Array(), $arFilter, false, false, array());
    while($ob = $res->Fetch())
    {
     
    }
    Ответ написан
    1 комментарий
  • Как в 1с-битрикс реализовать избранные товары?

    alexfilus
    @alexfilus
    Senior backend developer
    Во многих готовых решениях это есть.
    Самое простое - хранить в сессии ID избранных товаров. Это если не надо долго их там держать. Если долго, то 1 своя таблица. Всего 2 поля. USER_ID и PRODUCT_ID, их оба объявить как primary (составной ключ). Компонент для вывода будет совсем простой.
    Ответ написан
    Комментировать
  • Как в 1с-битрикс реализовать избранные товары?

    @ncheremisin
    Принимаю заказы на Битрикс
    У Раруса тут да, немного по-дурацки написано, сам наткнулся и понял что статья не полная. В общем то, там все хранится или в куки или у пользователя в профиле. Отдельную таблицу создавать не надо, все в принципе прозрачно если немного разобраться.

    Сначала они предлагают вывести кнопку в шаблон с ссылкой и количеством избранных товаров в шапку, затем страницу Избранное и потом уже в карту товара повесить код
    <a class="favor" data-item="<?=$arResult['ID']?>">В избранное</a>

    Ну и в компонент-эпилог повесить обработчики на js, чтобы в кеш не попадать.
    Ответ написан
    4 комментария
  • Пишет Class not found. Как правильно определить пространство имен?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Эээ... а что вы сделать то хотите ?

    Я вот о чем говорю: при использовании ООП в bitrix вы сталкиваетесь сразу с 2 большими стенами - применение ооп и битрикс. Прежде чем разбирать конкретный код хотелось бы немножко просветить вас в самой архитектуре битрикса.
    В терминологии Битрикса он использует концепцию MVC, но в рамках битрикса, а это означает что на любой странице где вы общаетесь с ним вы должны подключить пролог (хотя бы prolog_before) и эпилог (хотя бы epilog_after, ну в идеале). Именно "компонент" и является тем самым MVC (Вообще это скорее VC + row access, так как модели по сути нет). Есть класс CBitrixComponent (контроллер) и класс CBitrixComponentTemplate (который совместно с файлами шаблона и образует view).

    Вызов компонента происходит из глобальной переменной $APPLICATION путем метода IncludeComponent. До версии 14 (если мне не изменяет память) вообще не было такого понятия как class.php, где можно было отнаследоваться от CBitrixComponent и перекрыть какие-нибудь функции (шаблонизатор к примеру сменить), а после нового ядра d7 появилась возможность отнаследоваться от CBitrixComponent и в файле class.php разместить свой код (таким образом мы сохраняем и class.php с новыми функциями и component.php с логикой), а перекрывая метод executeComponent вы можете избавиться и от component.php.

    С точки зрения архитектуры (рекомендую изучить документацию, она очень обширна и познавательна) все компоненты должны лежать в так называемом пространстве имен, чем обычно служит ник-нейм или название компании (Естественно начинается не с цифры и содержит только латинские буквы), которые в свою очередь могут располагаться в /bitix/components/#пространство_имен#/#название_компонента#/

    Теперь построчно разберем Ваш вопрос:

    Вы положили свой класс сюда: /bitrix/templates/app/Pi/Test.php, что является неверным с точки зрения архитектуры, так как поместили класс отвечающий за контроллер в папку с шаблоном. Если вы не пишете свой модуль вы можете подключить его например в /local/php_interface/classes/ (пример надуманный, можете просто в /local/php_interface положить или сразу в init.php), однако для этого вы должны будете написать autoloader, так как у битрикса он работает только для модулей. Предположим вы в init.php напишете грубый require_once с файлом.

    Затем вы делаете следующее:

    Что является неверным, так как по сути вы обьявляете неймспейс для файла и это с точки зрения php выглядит вот так в конечном итоге:

    class app\Pi\test extends app\Pi\CBitrixComponent
    {
    // ...
    }

    А класса app\Pi\CBitrixComponent не существует. Так что вам нужно поправить пример хотя бы так:

    class test extends \CBitrixComponent

    Настоятельно рекомендую прочитать документацию или хотя бы посмотреть видео с академии битрикс. Сама система не подарок, а другой программист который увидит ваш код будет говорить что это битрикс виноват.
    Ответ написан
    Комментировать
  • Как найти источник медленных запросы MySQL?

    @0x131315
    Многие запросы на битрикс немного ускоряются, если уточнить запрос, например вместо 'IBLOCK_ID'=>10 указывать '=IBLOCK_ID'=>10
    Ответ написан
    Комментировать
  • Как найти источник медленных запросы MySQL?

    BusteR27
    @BusteR27
    Lead bitrix dev
    Найти место, где генерятся эти запросы не сложно - достаточно запустить Монитор производительности с записью sql-запросов.

    Так найдется место где неоптимизированный запрос. На вкладке с запросами можно будет запустить анализ индексов.
    Ответ написан
    1 комментарий
  • Как найти источник медленных запросы MySQL?

    @anton99zel Куратор тега 1С-Битрикс
    29а класс средней школы №7
    Уменьшите количество элементов на страницу, включите кэширование, удалите неиспользуемые свойства, выводите только нужные, проведите оптимизацию на странице производительности, пересоздайте фасетный поиск. Проверьте компоненты на сторонний код. Смотрите сервер - сколько памяти и как она расходуется, используйте php7
    Короче тут можно трехтомник писать этих советов)
    Ответ написан
    5 комментариев
  • Как найти источник медленных запросы MySQL?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Непонятно, зачем тебе источник.

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

    samodum
    @samodum
    Какой вопрос - такой и ответ
    Сайт на 1с-Битрикс.

    Вот и проблема.
    Дальше читать не имеет смысла.

    Текст запроса значения тоже не имеет - нужны данные о самих таблицах: размер, индексы, типы полей, по которым идут джойны.
    Это целая аналитическая работа.
    Смотри план выполнения
    Ответ написан
    1 комментарий
  • Как в phpstorm отменить merge?

    dlnsk
    @dlnsk
    ПК Партнер 01.01 -> ПК Поиск -> IBM PC
    1. Откройте панель git.
    2. Правой кнопкой на целевом коммите.
    3. Reset Current Branch to Here...
    В диалоге выбираете тип ресета. Вам, видимо, нужно hard.
    Пушить на github нужно будет с флагом -f
    Ответ написан
    Комментировать
  • Как перенаправить шаблон элемента компонента bitrix:catalog?

    alexyarik
    @alexyarik
    Битрикс разработчик
    В составе компонента "bitrix:catalog" есть файлы section_horizontal и section_vertical там вам нужно указать новый шаблон для catalog.section где-то с 229 строки
    $intSectionID = $APPLICATION->IncludeComponent(
    					"bitrix:catalog.section",
    					"",
    					array(
    						"IBLOCK_TYPE" => $arParams["IBLOCK_TYPE"],
    Ответ написан
    1 комментарий
  • Как удалить динамически созданный элемент jquery?

    @IoannGrozny
    Front-end разработчик
    Во-первых, если вы создаёте множество динамических элементов, не используйте в них id и не ссылайтесь на них по id. Селектор по id выбирает только первый элемент из списка, потому что такой элемент должен быть один.
    Во-вторых, метод .click() не работает с динамически добавленными элементами. Поэтому событие вешается только на тот элемент, который уже был на странице. Навешивайте обработчик события методом .on() на элемент html. Это проделегирует обработчик на все элементы, указанные в качестве контекста, включая те, что были созданы динамически.
    Суммируем:
    <span class="addField add">
        <i class="icon"></i>Добавить
    </span>
    <div class="inputs">
        <div>
            <input type="file" name="dynamic[]" class="field" > 
            <span class="remove">Удалить</span>
        </div>
    </div>

    $(document).ready(function () {
        $('html').on('click','.add',function () {
            $('<div><input type="file" class="field" name="dynamic[]" /><span class="remove">Удалить</span></div> ').fadeIn('slow').appendTo('.inputs');                                
        });
        $('html').on('click','.remove', function () {                               
            $(this).parent().remove();    
        });
    });
    Ответ написан
    Комментировать