Здравствуйте, выкладываю черновой вариант регистрации пользователя с возможностью использовать ReCaptcha. Данный компонент - это модификация стандартного main.register.
Так же компонент поддерживает: - Соглашения - Регистрация без ввода логина(только e-mail) - Обновление стандартной каптчи кнопкой
Событие OnAfterUserRegister сработает только в случае удачной регистрации пользователя. События НЕ переведены на D7 Отправка сообщений пользователю осуществляется при помощи Bitrix\Main\Mail\Event::sendImmediate Внутри компонента присутствует библиотека ReCaptcha взятая с github
В шаблоне подключается компонент авторизации через соц-сети, если это возможно.
2. В админке: Настройки->Главный модуль->Вкладка "Авторизация"->Использовать CAPTCHA при регистрации. В настройках компонента отметить "Использовать ReCaptcha", ввести данные в поля "Секретный ключ" и "Ключ".
Если в настройках компонента не отметить "Использовать ReCaptcha" и не ввести данные в поля "Секретный ключ" и "Ключ", то будет отображаться стандартная каптча.
Как убрать поле "Логин": 1. В админке: Настройки->Главный модуль->Вкладка "Авторизация"->E-mail является обязательным полем 2. В админке: Настройки->Главный модуль->Вкладка "Авторизация"->Проверять E-mail на уникальность при регистрации 3. В настройках компонента отметить галочку "Использовать e-mail для входа на сайт"
Микулич Евгений, а вы любите тратить время в пустую? Разбираться в чужом не поддерживаемом компоненте, чтобы заставить его работать? Мне нужна была Рекапча. Подсмотрел реализацию в этом компоненте и кастомизировал системный. А автору указал на проблему.
Гусев Александр, в методе CIBlockSection::GetList считаются только активные элементы:
...
$strSelect = $sSelect.",COUNT(DISTINCT BE.ID) as ELEMENT_CNT".(isset($obUserFieldsSql)? $obUserFieldsSql->GetSelect(): "");
...
LEFT JOIN b_iblock_element BE
ON (BSE.IBLOCK_ELEMENT_ID=BE.ID AND ((BE.WF_STATUS_ID=1 AND BE.WF_PARENT_ELEMENT_ID IS NULL ) AND BE.IBLOCK_ID = BS.IBLOCK_ID
for(var PID in result.ITEMS)
{
if (result.ITEMS.hasOwnProperty(PID))
{
this.updateItem(PID, result.ITEMS[PID]);
}
}
Вставляем
if (this.callbacks.afterUpdateAllItems && typeof(this.callbacks.afterUpdateAllItems) == 'function')
{
this.callbacks.afterUpdateAllItems(this, result);
}
Таким образом появляется 2 коллбэка:
После обновления 1 элемента фильтра
После обновления всех элементов
Открываем файл template.php шаблона компонента умного фильтра в самом низу находим создание объекта JCSmartFilter:
var smartFilter = new JCSmartFilter('<?echo CUtil::JSEscape($arResult["FORM_ACTION"])?>', '<?=CUtil::JSEscape($arParams["FILTER_VIEW_MODE"])?>', <?=CUtil::PhpToJSObject($arResult["JS_FILTER_PARAMS"])?>});
И вносим следующие изменения:
var smartFilter = new JCSmartFilter('<?echo CUtil::JSEscape($arResult["FORM_ACTION"])?>', '<?=CUtil::JSEscape($arParams["FILTER_VIEW_MODE"])?>', <?=CUtil::PhpToJSObject($arResult["JS_FILTER_PARAMS"])?>,{
afterUpdateAllItems: function(filter, result){
if (!!document.querySelectorAll('.bx_catalog_list_home')[0]) //вместо селектора .bx_catalog_list_home используйте свой, дабы избежать ошибки
{
var itemBlock = document.querySelectorAll('.bx_catalog_list_home')[0]; //также используйте свой селектор
var itemBlockParent = itemBlock.parentNode,
compID;
if (itemBlockParent.getAttribute('id').indexOf('comp_') > -1)
{
compID = itemBlockParent.getAttribute('id').replace(/comp_/g, '');
BX.ajax.insertToNode(result.FILTER_AJAX_URL+'?bxajaxid='+compID, itemBlockParent.getAttribute('id'));
}
}
},
});
Теперь необходимо включить режим AJAX для компоненты, которая выводит список элементов (news.list или catalog.section)
На данный момент была замечена только 1 проблема - фильтрация не работает при включенном режиме правки, это происходит из-за того, что добавляют div'ы, которые оборачивают список элементов, в следствии чего, javascript отрабатывает неправильно.
Скатаров Игорь, правильно ли я понял, что ваши модификации позволяют пересчитывать количество подходящих товаров с учетом уже выбранных свойств в фильтре?
По поводу включённого режима правки: попробуйте itemBlockParent получить альтернативным способом , через jq , например: var itemBlockParent = $('.bx_catalog_list_home').closest("[id родителя или уникальный класс типа js-*]") тогда учтётся ситуация, при которой между bx_catalog_list_homeи нужным нам родителем есть div
# cd /home/bitrix/ # mcedit compress_images.sh # chmod +x compress_images.sh
Содержимое файла
#!/bin/bash cd /home/bitrix/www/upload/iblock for f in $(find . -type f -name "*.jp*g");do jpegoptim --strip-all $f;done for f in $(find . -type f -name "*.png");do optipng -o3 $f;done
cd /home/bitrix/www/upload/resize_cache for f in $(find . -type f -name "*.jp*g");do jpegoptim --strip-all $f;done for f in $(find . -type f -name "*.png");do optipng -o3 $f;done
cd /home/bitrix/www/upload/medialibrary for f in $(find . -type f -name "*.jp*g");do jpegoptim --strip-all $f;done for f in $(find . -type f -name "*.png");do optipng -o3 $f;done
Группы на сайте создаются не только сотрудниками «1С-Битрикс», но и партнерами компании. Поэтому мнения участников групп могут не совпадать с позицией компании «1С-Битрикс».