Телеграм: @camouf_ru Почта: mihail@bazarow.ru Заказать разработку проекта

Михаил Базаров (Все сообщения пользователя)

Внимание! все сообщения проходят премодерацию. Ваше сообщение появится после проверки
Выбрать дату в календареВыбрать дату в календаре

Дополнительные картинки в списке элементов каталога битрикс
 
Цитата
Николай написал:
Добрый день!

Для детальной новости - работает СУПЕР!

Попробовал сделать для списка элементов каталога - поменял arElement на arItem.

Картинка не выводится.
Распечатайте массив arItem - если внем нет этих картинок, что-то сделали не правильно. Код рабочий
Код
echo '<pre>';
print_r($arItem);
echo '</pre>';
Настройка обмена между 1С:Предприятие и магазином на "1С-Битрикс24: Интернет-магазин + CRM" по REST протоколу
 
Важный момент:
Что бы получить токен в Битрикс-24
- сайт должен работать с SSL сертификатом.
- получать токен нужно именно админом
- в настройках модуля "Социальные сервисы" должна быть включена интеграция с Битрикс24
Изменено: Михаил Базаров - 20.07.2021 08:25:11
Настройка обмена между 1С:Предприятие и магазином на "1С-Битрикс24: Интернет-магазин + CRM" по REST протоколу
 
Настройка обмена между 1С:Предприятие и магазином на "1С-Битрикс24: Интернет-магазин + CRM" по REST протоколу

В этой заметке расскажу как настроить синхронизацию между 1С:предприятие и "1С-Битрикс24: Интернет-магазин + CRM". Она же актуальна для коробочных версий "CRM Битрикс-24".
Все воспроизводиться с помощью нового модуля обмена для 1С:Предприятие.
Проблемы с синхронизацией почты на редакции "Интернет магазин + CRM"
 
Да, сейчас та же проблема, плюс отвалился обмен заказами с 1С.
Тоже написал в ТП, жду ответа. Так понимаю, проблема массовая.
Создаются виртуальные страницы (кэштируется адрес)
 
Цитата
Никита Кулагин написал:
Возникла проблема, если набрать рандомный несуществующий адрес страницы (404 ответ), то есть вероятность того, что она каким то образом (кэшируется/создается виртуальная страница) обходится роботом Яндекса и может попасть в поиск, что не правильно. Есть ли решение данной проблемы?
Была такая проблема: если из яндекс браузера походить по несуществующим страницам он, все равно, отправляет их в индекс.
Кстати, по этой же причине не работает правило в robots.txt и индексируются результаты поиска - просто Яндекс браузер, отправляет все в поиск.

Единственное, как получилось обойти это: сделать редирект со всех не существующих страниц (с 404.php) на главную.
Просто, на 404 выдается страница с таймером. Через n-ое время редирект на главную, что бы пользователи понимали что происходит
"Бла бла бла такой страницы больше нет, через (красивый таймер обратного отсчета) вы будете перенаправлены на главную"
Но это, так себе решение.
Настройка разделов админки для группы пользователей
 
Права на структуру можно настроить прямо из файловой структуры.
Просто, на против нужных папок выберите "Права на доступ продукта" и запретите чтение для заданных групп (скрин)

А вот по импорт и инструменты, затрудняюсь сказать - с ходу тоже не соображу. Попробуйте спросить у ТП битрикс
Красивый календарь для формы ввода даты в input
 
Цитата
Гость написал:
Добрый день. Подскажите, а нет ли у Вас примеров кастомизации штатного BX календаря? Или может быть ссылки на статьи, где можно подсмотреть допустимые параметры в callback? Вроде такая нужная и полезная вещь, а документации по ней как обычно..
Как-то ни разу не заморачивался с его кастомизацией.
Параметры можно посмотреть в скриптах, к которым он обращается.
Просто в консоли посмотрите его рабочий файл, там все должно быть.
Прошу помощи
 
Хотя нет!
Последний сработает но лишняя нагрузка, два раза foreach выводить  :)

Пример с массивом, всяко меньше данных прогонится.
Код
<?$arReitings = array();?>  

<? foreach ($arResult["ITEMS"] as $arItem): ?>      
    <?arReitings[] = $arItem['DISPLAY_PROPERTIES']['REYTING']['DISPLAY_VALUE']?>      
    Бла бла бла весь остальной шаблон
<? endforeach; ?> 

<?echo implode(',' $arReitings)?>
И с последней запятой заморочек не будет
Изменено: Михаил Базаров - 04.07.2021 06:05:23
Прошу помощи
 
Сумма всех рейтингов:
До foreach объявить переменную, пусть будет $i
Внутри foreach сложить все рейтинги (превратив строку в число) через +=
Пример:
Код
<?$i = 0;?>

<? foreach ($arResult["ITEMS"] as $arItem): ?>
     <?$i += (int)$arItem['DISPLAY_PROPERTIES']['REYTING']['DISPLAY_VALUE']?>
     Бла бла бла весь остальной шаблон
<? endforeach; ?>

<?echo $i; // Выведет общую сумму?>

Рейтинги через запятую.
Можно заморочиться с озданием массива из рейтингов и потом вывести через implode
Но ни к чему, просто выведите еще один foreach
Пример:
Код
<? foreach ($arResult["ITEMS"] as $arItem): ?>      <?$i += (int)$arItem['DISPLAY_PROPERTIES']['REYTING']['DISPLAY_VALUE']?>      
    Бла бла бла весь остальной шаблон 
<? endforeach; ?>

<? foreach ($arResult["ITEMS"] as $arItem): ?>            
    <?echo $arItem['DISPLAY_PROPERTIES']['REYTING']['DISPLAY_VALUE']?>,
<? endforeach; ?>
Единственное, что на конце будет запятая лишняя. Ее можно убрать через css или просто срезать на последнем элементе.
Изменено: Михаил Базаров - 04.07.2021 06:03:45
Красивый календарь для формы ввода даты в input
 
В битриксе е сть встроенный инструмент для ввода даты в поля input
Похож на datepicker, но более удобный
Есть функционал отдельного выбора годов и месяцев

Просто, к нужному input добавляем
Код
onclick="BX.calendar({node: this, field: this, bTime: false});"

<input type="text" name="INPUTNAME" onclick="BX.calendar({node: this, field: this, bTime: false});"/>

Если изменить bTime на true - будет еще и выбор времени.

Изменено: Михаил Базаров - 02.07.2021 09:47:43
Скрытие цены при отсутствии товара
 
Найдите в шаблоне код, который выводит цену и просто обверните в условие.
Я дернул из типового шаблона, ваш может отличаться
Код
 <? if ((int)$item['PRODUCT']['QUANTITY'] > 0) { // Если остаток больше нуля?>
<div data-entity="price-block">
 <span id="<?= $itemIds['PRICE'] ?>">
   Бла бла бла тут выводится цена
 </span>
</div>
 <? }?>
Изменено: Михаил Базаров - 02.07.2021 09:40:02
Вывести переключатель сайтов при многосайтовой структуре, Переключатель сайтов в Битрикс
 
Вывести переключатель сайтов при многосайтовой структуре
Добавить во все шаблоны (если не один)
Код
<?$APPLICATION->IncludeComponent(
   "bitrix:main.site.selector",
   "",
   Array(
       "SITE_LIST" => array(),
       "CACHE_TYPE" => "A",
       "CACHE_TIME" => "3600"
   ),
   false
);?>
Пересоздать картинки анонса из детальных в инфоблоке, Если нужно пересоздать все картинки анонсов товаров каталога (или любого другого инфоблока) из детальных картинок Подойдет вот такой код
 
Пересоздать картинки анонса из детальных в каталоге.

Если нужно пересоздать все картинки анонсов товаров каталога (или любого другого инфоблока) из детальных картинок
Подойдет вот такой код
Код
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");
CModule::IncludeModule("iblock");
CModule::IncludeModule("file");

$ID = 11;//id инфоблока

$arFilter = Array("IBLOCK_ID"=>$ID);
$rsEl = CIBlockElement::GetList(Array(), $arFilter);
while($arEl = $rsEl->GetNext()){
  $el = new CIBlockElement;
       $arFields = Array();
  if($arEl["DETAIL_PICTURE"]){
     $arFields['PREVIEW_PICTURE'] = CFile::MakeFileArray($_SERVER["DOCUMENT_ROOT"] . CFile::GetFileArray($arEl["DETAIL_PICTURE"])["SRC"]);
     $arFields['PREVIEW_PICTURE']["del"] = "Y";
        $el->Update($arEl["ID"], $arFields);
  }
}
Для прогрева кеша сайта на битрикс., Создать весь кеш в битриксе, в автоматическом режиме
 
Для Прогрева кеша сайта на битрикс. Создать весь кеш в битриксе, в автоматическом режиме

Если вы только что запустили сайт, и не хотите ждать пока сайт закешируется естественным образом:
- С посещениями страниц сайта
- С обходом поисковых роботов

А хотите сразу же ускорить сайт, просто обойдя все страницы. Можно воспользоваться таким способом:
Запускаем виртуальную машину, на любом unix дистрибутиве (как вариант, если сайт и так на сервере, можно прямо на этом же)

и в терминале выполняем команду:
wget -r --spider test.site http://адрес.ru

Таким образом, вы по сути, обойдете весь сайт и битрикс создаст кеши посещенных страниц.
Злоупотреблять конечно же не стоит, но иногда нужно и такое )

Вариация с использованием UserAgent

wget -r -k -l 7 -p -E -nc --user-agent="Mozilla/5.0 (Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/5З7.З6 (KHTML, like Gecko) Chrome/55.0.288З.75 Safari/5З7.З6" http://ВАШСАЙТ.ru

КЛЮЧИ

--spider - Не сохранять сайт в файлы

-r — указывает на то, что нужно рекурсивно переходить по ссылкам на сайте, чтобы скачивать страницы.

-k — используется для того, чтобы wget преобразовал все ссылки в скаченных файлах таким образом, чтобы по ним можно было переходить на локальном компьютере (в автономном режиме).

-p — указывает на то, что нужно загрузить все файлы, которые требуются для отображения страниц (изображения, css и т.д.).

-l — определяет максимальную глубину вложенности страниц, которые wget должен скачать (по умолчанию значение равно 5, в примере мы установили 7). В большинстве случаев сайты имеют страницы с большой степенью вложенности и wget может просто «закопаться», скачивая новые страницы. Чтобы этого не произошло можно использовать параметр -l.

-E — добавлять к загруженным файлам расширение .html.

-nc — при использовании данного параметра существующие файлы не будут перезаписаны. Это удобно, когда нужно продолжить загрузку сайта, прерванную в предыдущий раз.
Запретить изменения описаний товаров при выгрузке из 1С УТ на сайт
 
Цитата
Данил написал:
Чтоб работало  новых версиях нужно заменить:Код$_REQUEST['mode']=='import' наКод$_REQUEST['Import']=='Y'
Там, можно вообще на D7 все переделать, что бы не использовать устаревшие методы.
Чуть позже дополню заметку. Если у кого-то уже. есть готовый пример на D7 - буду не против если напишите тут)
Изменено: Михаил Базаров - 25.06.2021 21:20:33
Узнать базовую цену товара, зная его ID
 
Узнать базовую цену элемента, зная его ID

Если Вы, как и я, столкнулись с реализацией списка товаров, в компоненте "catalog" на компоненте списка новостей
Просто, "великолепный" разработчик воткнул news.list в section.php комплексного компонента "каталог"
Это конечно же, полная дичь: но предположим, что переделывать все не вариант и не входит в бюджет

Задача, просто вывести цену текущего элемента каталога в news.list
Используем метод CPrice::GetBasePrice - достаточно знать только ID элемента (его мы знаем в ключе $arItem['ID'] )
Код
<?
$ar_res = CPrice::GetBasePrice($arItem['ID']);
echo $ar_res['PRICE'].' р.';
?>
PS Переделывайте это, при первой же возможности. Использовать исключительно в рамках ограниченного бюджета и времени.
Компонент который умеет выводить разделы инфоблока с элементами., Битрикс компонент который выводит разделы и вложенные в них элементы
 
Компонент который умеет выводить разделы инфоблока с элементами.
Черновик, сделал за часок. Настройки и шаблон немного не гибкие, будет дорабатываться.

Выводит:
- название и ссылку на раздел,
- название и ссылку на элемент,
- картинку анонса элемента,
- описание анонса элемента
- цену элемента (если установлен торговый каталог)

Пока плохо выводит свойства. В принципе выводит и дает их выбрать в параметрах. Но в шаблон нужно добавлять вручную.
Что бы работали ссылки, они должны быть обязательно указаны в настройках инфоблока (прописывание в ручную будет позже).
Дает указать количество выводимых элементов.

ВАЖНО! работает с версии Битрикс 18.5 (ниже нет)

Размещать в своем пространстве имен
Будет доступен в Контент=>Каталог

Скачать
https://camouf.ru/upload/fo_all/catalog.section.elements.zip
Изменено: Михаил Базаров - 25.06.2021 11:54:41
Получить группу текущего авторизованного пользователя в битрикс, Показать пользователю группу, к которой он принадлежит
 
Получить группу текущего авторизованного пользователя в битрикс

Если нужно вывести где-то на странице или в кабинете группу, к которой относится текущий авторизованный пользователь. Можно получить ее методом
CGroup::GetByID

Сначала, методом CUser::GetUserGroup - получаем ID всех групп, к которым относится пользователь.
Затем, раздербаниваем массив foreach-ем и получаем названия всех групп по их ID
Код
<?
global $USER;
   $curUserId = $USER->GetID(); // ID текущего пользователя
   $arGroups = CUser::GetUserGroup($curUserId); // ID групп текущего пользователя
   foreach ($arGroups as $curUserGroups) {
    $rsGroup = CGroup::GetByID($curUserGroups); // Получаем названия всех групп
    $arGroup = $rsGroup->Fetch();
    if ($arGroup['ID'] !== '2') {
            echo $arGroup['NAME'];  // И выводим
     }
   }
?>
В моем примере, я еще выполняю проверку ( if ($arGroup['ID'] !== '2') ). Не вывожу группу "Все пользователи" - у меня ее ID=2
По сути, все пользователи состоят в этой группе- выводить ее ни к чему
Pull to refresh, не большой скрипт для обновления страницы, Скрипт который иммитирует обновление страницы при протягивании. Годится для мобильных версий сайтов и приложений на cordova
 
Pull to refresh, не большой скрипт  для обновления страницы, при перетягивании, на мобильных телефонах.
Можно использовать и в мобильном приложении на cordova/phonegap

API методы тут
https://github.com/BoxFactura/pulltorefresh.js
Код
/*!
 * pulltorefreshjs v0.1.18
 * (c) Rafael Soto
 * Released under the MIT License.
 */
;!function (b, a) {
    "object" == typeof exports && "undefined" != typeof module ? module.exports = a() : "function" == typeof define && define.amd ? define(a) : (b = b || self).PullToRefresh = a()
}(this, function () {
    var f = {
        pullStartY: null,
        pullMoveY: null,
        handlers: [],
        styleEl: null,
        events: null,
        dist: 0,
        state: "pending",
        timeout: null,
        distResisted: 0,
        supportsPassive: !1,
        supportsPointerEvents: !!window.PointerEvent
    };
    try {
        window.addEventListener("test", null, {
            get passive() {
                f.supportsPassive = !0
            }
        })
    } catch (f) {
    }
    var b = {
        setupDOM: function (e) {
            if (!e.ptrElement) {
                var i = document.createElement("div");
                e.mainElement !== document.body ? e.mainElement.parentNode.insertBefore(i, e.mainElement) : document.body.insertBefore(i, document.body.firstChild), i.classList.add(e.classPrefix + "ptr"), i.innerHTML = e.getMarkup().replace(/__PREFIX__/g, e.classPrefix), e.ptrElement = i, "function" == typeof e.onInit && e.onInit(e), f.styleEl || (f.styleEl = document.createElement("style"), f.styleEl.setAttribute("id", "pull-to-refresh-js-style"), document.head.appendChild(f.styleEl)), f.styleEl.textContent = e.getStyles().replace(/__PREFIX__/g, e.classPrefix).replace(/\s+/g, " ")
            }
            return e
        }, onReset: function (e) {
            e.ptrElement.classList.remove(e.classPrefix + "refresh"), e.ptrElement.style[e.cssProp] = "0px", setTimeout(function () {
                e.ptrElement && e.ptrElement.parentNode && (e.ptrElement.parentNode.removeChild(e.ptrElement), e.ptrElement = null), f.state = "pending"
            }, e.refreshTimeout)
        }, update: function (e) {
            var j = e.ptrElement.querySelector("." + e.classPrefix + "icon"),
                i = e.ptrElement.querySelector("." + e.classPrefix + "text");
            j && ("refreshing" === f.state ? j.innerHTML = e.iconRefreshing : j.innerHTML = e.iconArrow), i && ("releasing" === f.state && (i.innerHTML = e.instructionsReleaseToRefresh), "pulling" !== f.state && "pending" !== f.state || (i.innerHTML = e.instructionsPullToRefresh), "refreshing" === f.state && (i.innerHTML = e.instructionsRefreshing))
        }
    }, h = function (e) {
        return f.pointerEventsEnabled && f.supportsPointerEvents ? e.screenY : e.touches[0].screenY
    }, c = function () {
        var m;

        function n(o) {
            var l = f.handlers.filter(function (i) {
                return i.contains(o.target)
            })[0];
            f.enable = !!l, l && "pending" === f.state && (m = b.setupDOM(l), l.shouldPullToRefresh() && (f.pullStartY = h(o)), clearTimeout(f.timeout), b.update(l))
        }

        function k(i) {
            m && m.ptrElement && f.enable && (f.pullStartY ? f.pullMoveY = h(i) : m.shouldPullToRefresh() && (f.pullStartY = h(i)), "refreshing" !== f.state ? ("pending" === f.state && (m.ptrElement.classList.add(m.classPrefix + "pull"), f.state = "pulling", b.update(m)), f.pullStartY && f.pullMoveY && (f.dist = f.pullMoveY - f.pullStartY), f.distExtra = f.dist - m.distIgnore, f.distExtra > 0 && (i.cancelable && i.preventDefault(), m.ptrElement.style[m.cssProp] = f.distResisted + "px", f.distResisted = m.resistanceFunction(f.distExtra / m.distThreshold) * Math.min(m.distMax, f.distExtra), "pulling" === f.state && f.distResisted > m.distThreshold && (m.ptrElement.classList.add(m.classPrefix + "release"), f.state = "releasing", b.update(m)), "releasing" === f.state && f.distResisted < m.distThreshold && (m.ptrElement.classList.remove(m.classPrefix + "release"), f.state = "pulling", b.update(m)))) : i.cancelable && m.shouldPullToRefresh() && f.pullStartY < f.pullMoveY && i.preventDefault())
        }

        function p() {
            if (m && m.ptrElement && f.enable) {
                if ("releasing" === f.state && f.distResisted > m.distThreshold) {
                    f.state = "refreshing", m.ptrElement.style[m.cssProp] = m.distReload + "px", m.ptrElement.classList.add(m.classPrefix + "refresh"), f.timeout = setTimeout(function () {
                        var i = m.onRefresh(function () {
                            return b.onReset(m)
                        });
                        i && "function" == typeof i.then && i.then(function () {
                            return b.onReset(m)
                        }), i || m.onRefresh.length || b.onReset(m)
                    }, m.refreshTimeout)
                } else {
                    if ("refreshing" === f.state) {
                        return
                    }
                    m.ptrElement.style[m.cssProp] = "0px", f.state = "pending"
                }
                b.update(m), m.ptrElement.classList.remove(m.classPrefix + "release"), m.ptrElement.classList.remove(m.classPrefix + "pull"), f.pullStartY = f.pullMoveY = null, f.dist = f.distResisted = 0
            }
        }

        function j() {
            m && m.mainElement.classList.toggle(m.classPrefix + "top", m.shouldPullToRefresh())
        }

        var e = f.supportsPassive ? {passive: f.passive || !1} : void 0;
        return f.pointerEventsEnabled && f.supportsPointerEvents ? (window.addEventListener("pointerup", p), window.addEventListener("pointerdown", n), window.addEventListener("pointermove", k, e)) : (window.addEventListener("touchend", p), window.addEventListener("touchstart", n), window.addEventListener("touchmove", k, e)), window.addEventListener("scroll", j), {
            onTouchEnd: p,
            onTouchStart: n,
            onTouchMove: k,
            onScroll: j,
            destroy: function () {
                f.pointerEventsEnabled && f.supportsPointerEvents ? (window.removeEventListener("pointerdown", n), window.removeEventListener("pointerup", p), window.removeEventListener("pointermove", k, e)) : (window.removeEventListener("touchstart", n), window.removeEventListener("touchend", p), window.removeEventListener("touchmove", k, e)), window.removeEventListener("scroll", j)
            }
        }
    }, d = {
        distThreshold: 60,
        distMax: 80,
        distReload: 50,
        distIgnore: 0,
        mainElement: "body",
        triggerElement: "body",
        ptrElement: ".ptr",
        classPrefix: "ptr--",
        cssProp: "min-height",
        iconArrow: "⇣",
        iconRefreshing: "…",
        instructionsPullToRefresh: "Pull down to refresh",
        instructionsReleaseToRefresh: "Release to refresh",
        instructionsRefreshing: "Refreshing",
        refreshTimeout: 500,
        getMarkup: function () {
            return '\n<div class="__PREFIX__box">\n  <div class="__PREFIX__content">\n    <div class="__PREFIX__icon"></div>\n    <div class="__PREFIX__text"></div>\n  </div>\n</div>\n'
        },
        getStyles: function () {
            return "\n.__PREFIX__ptr {\n  box-shadow: inset 0 -3px 5px rgba(0, 0, 0, 0.12);\n  pointer-events: none;\n  font-size: 0.85em;\n  font-weight: bold;\n  top: 0;\n  height: 0;\n  transition: height 0.3s, min-height 0.3s;\n  text-align: center;\n  width: 100%;\n  overflow: hidden;\n  display: flex;\n  align-items: flex-end;\n  align-content: stretch;\n}\n\n.__PREFIX__box {\n  padding: 10px;\n  flex-basis: 100%;\n}\n\n.__PREFIX__pull {\n  transition: none;\n}\n\n.__PREFIX__text {\n  margin-top: .33em;\n  color: rgba(0, 0, 0, 0.3);\n}\n\n.__PREFIX__icon {\n  color: rgba(0, 0, 0, 0.3);\n  transition: transform .3s;\n}\n\n/*\nWhen at the top of the page, disable vertical overscroll so passive touch\nlisteners can take over.\n*/\n.__PREFIX__top {\n  touch-action: pan-x pan-down pinch-zoom;\n}\n\n.__PREFIX__release {\n  .__PREFIX__icon {\n    transform: rotate(180deg);\n  }\n}\n"
        },
        onInit: function () {
        },
        onRefresh: function () {
            return location.reload()
        },
        resistanceFunction: function (i) {
            return Math.min(1, i / 2.5)
        },
        shouldPullToRefresh: function () {
            return !window.scrollY
        }
    }, a = ["mainElement", "ptrElement", "triggerElement"], g = function (e) {
        var i = {};
        return Object.keys(d).forEach(function (j) {
            i[j] = e[j] || d[j]
        }), i.refreshTimeout = "number" == typeof e.refreshTimeout ? e.refreshTimeout : d.refreshTimeout, a.forEach(function (j) {
            "string" == typeof i[j] && (i[j] = document.querySelector(i[j]))
        }), f.events || (f.events = c()), i.contains = function (j) {
            return i.triggerElement.contains(j)
        }, i.destroy = function () {
            clearTimeout(f.timeout);
            var j = f.handlers.indexOf(i);
            f.handlers.splice(j, 1)
        }, i
    };
    return {
        setPassiveMode: function (e) {
            f.passive = e
        }, setPointerEventsMode: function (e) {
            f.pointerEventsEnabled = e
        }, destroyAll: function () {
            f.events && (f.events.destroy(), f.events = null), f.handlers.forEach(function (i) {
                i.destroy()
            })
        }, init: function (e) {
            void 0 === e && (e = {});
            var i = g(e);
            return f.handlers.push(i), i
        }, _: {setupHandler: g, setupEvents: c, setupDOM: b.setupDOM, onReset: b.onReset, update: b.update}
    }
});
PullToRefresh.init({
    mainElement: ".app_container", onRefresh: function () {
        window.location.reload()
    }
});
Моментальная фильтрация на AJAX в умном фильтре 1С-Битрикс
 
Цитата
Guest пишет:
Не работает ваш вариант.
Мгновенной фильтрации нет в настройках компонента, вообще не понимаю откуда она появляется. На разных сайтах на Битриксе ставлю чистый компонент Умного фильтра и там нет такой настройки.
Данный код прописываю вручную в компоненте Умного фильтра и ничего не работает. Фильтр срабатывает только по кнопке "Показать":
"AJAX_MODE" => "Y",
"INSTANT_RELOAD" => "Y"
Это нужно указывать не у фильтра а у комплексного компонента каталога или раздела каталога, смотря в каких условиях делаете эту фильтрацию.
Заметки разработчика

Примерно с 2013-го года пишу, короткие и не очень, заметки по разработке сайтов на Битрикс. Возможно, будут полезны кому-то еще. Во всех заметках есть возможность комментирования и обсуждения. Вы можете задавать уточняющие вопросы прямо там- отвечаю или дополняю заметки по возможности.

attention