Точно сказать не могу но самое главное что нужно для фильтрации это передать на текущую страницу (GetCurPage()) 2 параметра http://joxi.ru/SfxVUxjKTJDZfxrGXuQ 1-й не изменный ajax = Y второй - это ID свойства выводимого в фильтре, передаётся Id_свойства = Y . Посмотрите на файл script.js лежащий в корне папки вашего шаблона компонента (bitrix/templates/Ваш_Шаблон_Сайта/components/bitrix/catalog.smart.filter/Ваш_Шаблон_Компонента/...) http://joxi.ru/yv5VUxjKTJBxfhlODik там будет метод click() (т.к. в базовом варианте фильтра все свойства выводятся в виде чекбоксов) именно он и отвечает за передачу свойств, точнее он запускает цепочку методов которые в конечном итоге приводят к фильтрации. Этот метод нужно вызвать и в шаблоне, т.е. в атрибутах элемента по которому у Вас осуществляется фильтрация задать onChange="smartFilter.click(this)" или любое другое (подходящее) событие (onClick, onMouseHover и т.п.).
Для кастомизации своего шаблона умного фильтра я дополнил script.js своими методами и их-же вызываю в шаблоне:
Как переделать checkbox в select в компоненте catalog.smart.filter (умный фильтр) ?, Попытка переделать стандартный checkbox в умном фильтре в выпадающий список select
[ Закрыто] Кто разобрался с новым шаблоном интернет магазина на 1С Битрикс 14.x ?, Кто разобрался с новым шаблоном интернет магазина на 1С Битрикс 14.x ? Пытаюсь натянуть туда свою вёрстку, что-то не очень получается.
[ Закрыто] Кто разобрался с новым шаблоном интернет магазина на 1С Битрикс 14.x ?, Кто разобрался с новым шаблоном интернет магазина на 1С Битрикс 14.x ? Пытаюсь натянуть туда свою вёрстку, что-то не очень получается.
а я таки всё же разобрался и глубинно его изменил )), немного позже допишу тему, в двух словах там работа едёт через js объект и нужно в вёрстке предусмотреть теги в которые можно засунуть определённые ID . По этим ID метод объекта Init() правильно создас объект класса JCCatalogSection (в категориях товара) и JCCatalogElement в карточке товара. Познакомиться с классом и методами можно в комплексном компоненте каталога тут: http://joxi.ru/lMZPU_3JTJDWaHLLryY
Как настроить шаг числового значения в умном фильтре, Для редактирования числовых значений умный фильтр битрикса использует 2 текстовых поля и "бегунок", как настроить шаг этого бегкнка, например 1000
Всё нашёл, в шаблоне самого компонента catalog.smart.filter прямо в коде шаблона есть java script код
Код
<script type="text/javascript" defer="defer">
var DoubleTrackBar<?=$key?> = new cDoubleTrackBar('drag_track_<?=$key?>', 'drag_tracker_<?=$key?>', 'left_slider_<?=$key?>', 'right_slider_<?=$key?>', {
OnUpdate: function(){
BX("<?echo $arItem["VALUES"]["MIN"]["CONTROL_ID"]?>").value = this.MinPos;
BX("<?echo $arItem["VALUES"]["MAX"]["CONTROL_ID"]?>").value = this.MaxPos;
},
Min: parseFloat(<?=$arItem["VALUES"]["MIN"]["VALUE"]?>),
Max: parseFloat(<?=$arItem["VALUES"]["MAX"]["VALUE"]?>),
MinInputId : BX('<?echo $arItem["VALUES"]["MIN"]["CONTROL_ID"]?>'),
MaxInputId : BX('<?echo $arItem["VALUES"]["MAX"]["CONTROL_ID"]?>'),
FingerOffset: 8,
MinSpace: 1,
RoundTo: 500, //Это значение шага
Precision: 0 // Это округдение значения в текстовых полях
});
</script>
он там встречается 2-жды, отдельно для цены, отдельно для всех остальных числовых свойств. Всё теперь шагает по 500 (по 1000 как-то многовато) и всё округлено http://joxi.ru/TWlOU_3JTJDnY3XysQ4
Как настроить шаг числового значения в умном фильтре, Для редактирования числовых значений умный фильтр битрикса использует 2 текстовых поля и "бегунок", как настроить шаг этого бегкнка, например 1000
Для редактирования числовых значений умный фильтр битрикса использует 2 текстовых поля и "бегунок" , как настроить шаг этого бегунка, например 1000 . Сейчас выглядит так http://joxi.ru/-mROUxjKTJBgQpsngds , дробные значение вообще не нужны. Там по идеи где-то в скрипте задаётся параметр шаг, сейчас по всей видимости он равен 0,01 на надо 1000, как его задать стандартно? Или не стандартно хотябы ))
Как отображать категории каталога содержащие товары с определёнными метками?, Необходимо реализовать некого рода фильтрацию. Посетитель нажимает на кнопку "Спецпредложения" и структура каталога в левом сайдбаре изменяется, в ней отображаются только те категории в которых есть товары с меткой "Спецпредложения".
Необходимо реализовать некого рода фильтрацию. Посетитель нажимает на кнопку "Спецпредложения" и структура каталога в левом сайдбаре изменяется, в ней отображаются только те категории в которых есть товары с меткой "Спецпредложения". Как с наименьшими потерями производительности организовать такой функционал. Посмотреть его в действии можно например на сайте lamoda.ru в верхнем меню нажмите например на ссылку "Новинки" вы перейдёте как бы в каталог но слева будут отражены только те категории каталога в которых есть новинки.
Как можно подобное сделать на битриксе редакция малый бизнес. В голову пока приходят глупые мысли кастомизировать компонент catalog.section.list перебирать все товары категорий каталога на предмет наличия метки "Спецпредложения" и ставить какой-нибудь флаг (true/false) в параметры категории и потом соответсвенно отслеживать на что нажал пользователь (например на спец предложения) и при построении дерева категорий каталога выводить только то где spec = true. Но это как мне кажется будет нагружать сайт, даже если проход по товарам и простановку флагов делать 2 раза в сутки. Плюс не понятно как хранить переданный параметр, как обновлять и сохранять кеш. Подскажите если кто сталкивался с подобными задачами, как с меньшими потерями производительности и без лишних "кастылей" реализовать подобный механизм?
Как переделать checkbox в select в компоненте catalog.smart.filter (умный фильтр) ?, Попытка переделать стандартный checkbox в умном фильтре в выпадающий список select
Как переделать checkbox в select в компоненте catalog.smart.filter (умный фильтр) ?, Попытка переделать стандартный checkbox в умном фильтре в выпадающий список select
1) в файле script.js папки шаблона компонента catalog.smart.filter копируем и переименовываем 2 метода click и reload и слегка меняем их атрибуты (везде меняем input на select) :
3) и тут же ниже добавляем "генератор jquery обработчиков select-ов" с селектами они будут связаны по id значением которого выступает код элемента $arItem['CODE'] - это добавит коду универсальности, с появлением дополнительных свойств в виде selec-ов не придётся лезть в код и дописывать обработчики для новых свойств.
Код
<script>
$(document).ready(function(){
<? //Формируем дополнительные jquery обработчики для select-ов
foreach($arResult["ITEMS"] as $key=>$arItem) {
if(!empty($arItem["VALUES"]) && !isset($arItem["PRICE"])) {
?>
//Проставляем name select-ам с уже выбранными свойствами
setTimeout(function(){
var SelectOption = $("#<?=$arItem['CODE']; ?> option:selected").attr('id');
$("#<?=$arItem['CODE']; ?>").attr('name',SelectOption);
},1500);
//заполнение name с реакцией на change
$("#<?=$arItem['CODE']; ?>").on('change', function(){
var SelectOption = $("#<?=$arItem['CODE']; ?> option:selected").attr('id');
$("#<?=$arItem['CODE']; ?>").attr('name',SelectOption);
<?
}
}?>
});
</script>
Собственно и всё.
Но ОЧЕНЬ ХОЧЕТСЯ ПОСМОТРЕТЬ НА ТО ЧТО ПРЕДЛАГАЮТ САМИ РАЗРАБОТЧИКИ, раз уж в методе gatherInputsValues() изначально была предусмотрена обработка select-ов наверняка в этом направлении должны были вестись какие-нибудь работы.
Как переделать checkbox в select в компоненте catalog.smart.filter (умный фильтр) ?, Попытка переделать стандартный checkbox в умном фильтре в выпадающий список select
не заметил сразу $ar["CHECKED"] - булевское значение показывающее выбран ли этот параметр на предыдущей фильтрации ли нет. Однако столкнулся с другой проблемкой, после выбора параметра из любого select-а на всех select-ах пропадают классы т.е. атрибут class - очищается и перестаёт работать моя jquery функция:
Как переделать checkbox в select в компоненте catalog.smart.filter (умный фильтр) ?, Попытка переделать стандартный checkbox в умном фильтре в выпадающий список select
Всем добрый день! Задача следующая, мне необходимо переделать стандартный checkbox http://myscreenshot.info/i/0003/413641396771985763416605721618.png в умном фильтре в выпадающий список select http://myscreenshot.info/i/0003/409631396772069264378699606169.png. Через firebug выяснил какие параметры филтр передаёт в обработчик, по сути это имя параметра по которому мы фильтруем и его значение Y (т.е. истина) http://myscreenshot.info/i/0003/946951396772483147925146920077.png. В данном примере я выбрал материал "Трикотаж" фильтр передал обработчику 2 параметра ajax = y (я так понял это постоянный параметр говорящий системе что включён режим ajax) и arrFilter_9_3012990210 = Y , где arrFilter_9_3012990210 - это значение атрибута name нашего чекбокса (см.скриншот). Вся эта чудо конструкция обрабатывается методом smartFilter.click(this) срабатывающим на событие onClick на нашем чекбоксе. Что такое метод click() объекта smartFilter ? Заглянем в дерево шаблона компонента catalog.smart.filter http://myscreenshot.info/i/0003/324131396772989738348415892929.png находим там файл script.js который собственно и содержит описание класса smartFilter с набором соответствующих методов. Вот что представляет собой метод click():
Код
JCSmartFilter.prototype.click = function(checkbox)
{
if(this.timer)
clearTimeout(this.timer);
this.timer = setTimeout(BX.delegate(function(){
this.reload(checkbox); //На сколько понял с задержкой в секунду метод вызывает (BX.delegate()) метод reload
}, this), 1000);
}
По все видимости именно gatherInputsValues() считывает значение выбранных пользователем чекбоксов которые затем передаются в loadJSON, смотрим:
Код
JCSmartFilter.prototype.gatherInputsValues = function (values, elements)
{
if(elements)
{
for(var i = 0; i < elements.length; i++)
{
var el = elements[i];
if (el.disabled || !el.type)
continue;
switch(el.type.toLowerCase()) //Проверяем тип элемента (строка, флажёк и т.п.)
{
case 'text':
case 'textarea':
case 'password':
case 'hidden':
case 'select-one': //ОПАЧКИ! Разработчики предусмотрели работу фильтра с полями типа select (т.е. выпадающий список)
if(el.value.length)
values[values.length] = {name : el.name, value : el.value};
break;
case 'radio':
case 'checkbox':
if(el.checked)
values[values.length] = {name : el.name, value : el.value};
break;
case 'select-multiple': //Да ещё и с 'мультисписко' ?! (там где несколько значенийй можно выбрать)
for (var j = 0; j < el.options.length; j++)
{
if (el.options[j].selected)
values[values.length] = {name : el.name, value : el.options[j].value};
}
break;
default:
break;
}
}
}
}
Я так понял что набор этих методов позволяет обрабатывать не только chechkbox но так же и select, однако я не как не додумаюсь как правильно сверстать этот список чтобы данный скрипт понял что выбирает пользователь в фильтре без лишних костылей. Уважаемые разработчики 1С Битрикс - подскажите как правильно переделать checkbox в <select><option>...</option>...</select> так чтобы данный набор методов меня понял?
На текущий момент удалось частично реализовать задуманное рядом костылей. Я скопировал методы click и reload и переименовал копии в clickSelect и clickReload в каждом из этих методов я заменил input-ы на select вот так http://myscreenshot.info/i/0003/691531396774316164675678922975.png . А в шаблоне компонента умного фильтра (естественно скопированном в шаблон сайта) переделал вёрстку вот так:
Но чтобы у select-а подставлялся нужный name пришлось ещё дописать такую jquery функцию, она получает id выбранного option и подставляет значение этого id в name тега select, после чего срабатывает метод smartFilter.clickSelect(this) реагирующий теперь на событие onChange:
В принципе работает, правда пока после отработки фильтра (нажатия на кнопку или ссылку "Показать" ) в select не сохраняются выбранные значения фильтрации. Нужно допиливать обработчик. Но всётаки хотелось бы узнать как можно сделать select по задумке разработчиков битрикса чтобы нормально трабатывал метод gatherInputsValues() и никаких костылей делать не пришлось.
Компонент sale.order.full не учитывает скидку настроенную в "Правилах работы с корзиной", Настроил скидку 7% на всю сумму заказа на все товары инфоблока "Продукция", в корзине скидка считается, а в компоненте sale.order.full - нет
Компонент sale.order.full не учитывает скидку настроенную в "Правилах работы с корзиной", Настроил скидку 7% на всю сумму заказа на все товары инфоблока "Продукция", в корзине скидка считается, а в компоненте sale.order.full - нет
Да пошаговая схема была бы весьма кстати. Как дополнительный шаблон компонента чтобы была, захотел оставил одну страницу, захотел сменил шаблон и вот тебе несколько шагов.
Компонент sale.order.full не учитывает скидку настроенную в "Правилах работы с корзиной", Настроил скидку 7% на всю сумму заказа на все товары инфоблока "Продукция", в корзине скидка считается, а в компоненте sale.order.full - нет
Компонент sale.order.full не учитывает скидку настроенную в "Правилах работы с корзиной", Настроил скидку 7% на всю сумму заказа на все товары инфоблока "Продукция", в корзине скидка считается, а в компоненте sale.order.full - нет
Нет не произошло. Я сделал по другому, убрал правила обработки корзины, настроил обычную скидку 7% на все товары из инфоблока №3 а в карточках и каталоге вывожу цену без скидки. Т.к. скидка 7% начинает "проявляться для пользовател" только с корзины. При такой настройке она так же учитывается в процессе формирования заказа и счёта.
Компонент sale.order.full не учитывает скидку настроенную в "Правилах работы с корзиной", Настроил скидку 7% на всю сумму заказа на все товары инфоблока "Продукция", в корзине скидка считается, а в компоненте sale.order.full - нет
Система не хочет регистрировать нового пользователя, Переделываю компонент sale.order.full, переписал этап авторизации/регистрации (файд auth.php) при регистрации выдаёт ошибки.
Что такое BX.proxy_context ? Не могу настроить работу методов класса JCCatalogSection, Ряд ключевых скриптов перестал работать после натягивания своего шаблона, однако я не могу их поправить т.к. не знаю что такое BX.proxy_context
Добрый день! Натянул свой шаблон на комплексный компонент каталога, т.к. вёрстка серьёзно изменилась перестали работать некоторые методы класса JCCatalogSection (объекты этого класса создаются по ходу вывода данных компонентом bitrix.section, дальше работа с элементами каталога (покупка, +, - количество и пр.) идёт через эти объекты). В моём случае перестал работать метод SelectOfferProp который выводит свойства относящиеся только к определённому элементу а не все сразу путём добавления класса bx_active
Код
if (value == arTreeItem[1])
BX.addClass(RowItems[i], 'bx_active');
else
BX.removeClass(RowItems[i], 'bx_active');
т.е. если параметры свойства из объекта совпало со списком всех свойств подставляем класс bx_active, вот весь код метода:
Код
JCCatalogSection.prototype.SelectOfferProp = function(e)
{
if (!e) e = window.event;
var target = BX.proxy_context;
if (!!target && target.hasAttribute('data-treevalue'))
{
var strTreeValue = target.getAttribute('data-treevalue');
var arTreeItem = strTreeValue.split('_');
if (this.SearchOfferPropIndex(arTreeItem[0], arTreeItem[1]))
{
var RowItems = BX.findChildren(target.parentNode, {tagName: 'li'}, false);
if (!!RowItems && 0 < RowItems.length)
{
for (i = 0; i < RowItems.length; i++)
{
value = RowItems[i].getAttribute('data-onevalue');
if (value == arTreeItem[1])
BX.addClass(RowItems[i], 'bx_active');
else
BX.removeClass(RowItems[i], 'bx_active');
}
}
}
}
};
у меня сейчас свойства вываливаются все вот так: http://myscreenshot.info/i/0003/641571395325433698195756167326.png хотя из цветов должен показываться только синий. В данном методе мне не совсем понятно что такое BX.proxy_context - нигде не нашёл описание этого метода. Понятно что он передаёт в переменную target элемент списка с атрибутом data-treevalue и дальше разбирая его на ID свойства и ID значения выясняет какое значение соответствует конкретно этому торговому предложению. Но что такое proxy_context, как он точно работает мне не понятно. По сути сейчас у меня proxy_contextе находит нужного элемента в DOM структуре и потому класс bx_active не применяется и мы видим такую картину http://myscreenshot.info/i/0003/641571395325433698195756167326.png подскажите что это за метод, где найти его описание или инициализацию, как он работает? Заранее спасибо!
Можно ли изменить порядок оформления заказа в компоненте sale.order.full ?, Как можно изменить порядок шагов при оформлении заказа в компоненте sale.order.full ?
Делаю полноценное пошаговое оформление заказа (sale.order.full), но заказчик хочет чтобы шаги были не в той последовательности что сейчас. Скажите как их можно изменить ? Я так понимаю что если тупо переименовать файлы шагов в папке компонента http://myscreenshot.info/i/0003/925531394716610048301817889703.png ничего работать не будет ))
[ Закрыто] Кто разобрался с новым шаблоном интернет магазина на 1С Битрикс 14.x ?, Кто разобрался с новым шаблоном интернет магазина на 1С Битрикс 14.x ? Пытаюсь натянуть туда свою вёрстку, что-то не очень получается.
[ Закрыто] Кто разобрался с новым шаблоном интернет магазина на 1С Битрикс 14.x ?, Кто разобрался с новым шаблоном интернет магазина на 1С Битрикс 14.x ? Пытаюсь натянуть туда свою вёрстку, что-то не очень получается.
Да на сколько я понял в script.js определяется некая сущность JCCatalogSection с кучей атрибутов, затем через JCCatalogSection.prototype добавляются методы работы с этой сущностью: JCCatalogSection.prototype.Init, JCCatalogSection.prototype.QuantityUp, JCCatalogSection.prototype.QuantityDown, JCCatalogSection.prototype.QuantityChange, JCCatalogSection.prototype.QuantitySet, JCCatalogSection.prototype.SelectOfferProp, JCCatalogSection.prototype.SearchOfferPropIndex, JCCatalogSection.prototype.RowLeft, JCCatalogSection.prototype.RowRight, JCCatalogSection.prototype.UpdateRow и JCCatalogSection.prototype.GetRowValues . Теперь не понятен следующий момент - как вызывается например метод JCCatalogSection.prototype.QuantityUp по идеи он срабатывает на нажатие по кнопке + на форме редактирования количества добавляемого в корзину товара http://myscreenshot.info/i/0003/762501394691327614027162416127.png а вот сформированный html код этой кнопки +
где id - естественно хитрый идентификатор товара (возможно при его считывании скрипт и понимает что нужно вызвать QuantityUp т.к. в id присутствует такая штука _quant_up ) но явного вызова именно этого метода я нигде не нашёл, ровно как и скрипта который бы парсил id и понимал что нужно вызвать я тоже не нашёл. Кто-нибудь знает как тут вообще организован вызов всех этих методов?
[ Закрыто] Кто разобрался с новым шаблоном интернет магазина на 1С Битрикс 14.x ?, Кто разобрался с новым шаблоном интернет магазина на 1С Битрикс 14.x ? Пытаюсь натянуть туда свою вёрстку, что-то не очень получается.
Добрый вечер! Кто разобрался с новым шаблоном интернет магазина на 1С Битрикс 14.x ? Пытаюсь натянуть туда свою вёрстку, что-то не очень получается. Например где искать скрипты которые отвечают за отображение свойств товара при наведении курсора мышки, вот этих: http://myscreenshot.info/i/0003/253311394643822695807422120450.png. Затем нигде не найду описания класса JS объект которого JCCatalogSection создаётся по ходу кода. Я так понял что вот этот скрипт script.js лежащий в папке компонента catalog.section комплексного компонента catalog http://myscreenshot.info/i/0003/393041394644117494589890069298.png отвечает за работу ряда мелких функций типа увеличения, уменьшения количества покупаемого подарка, клик по кнопке купить и.п., но в этом файле опять таки идёт работа с объектом JCCatalogSection, как с ним работать, что за методы - не всегда очевидно.
Добрый день, как расширить список свойств "Параметры в корзине" http://myscreenshot.info/i/0003/101741394018195736375817767512.png который можно наблюдать при настройки правил работы с корзиной. Т.е. я хочу настроить условие, но мне нужно привязаться к другому параметру логического типа. Который можно было бы менять прям из корзины (чекбокс) .
Добрый день! Суть задачи. Клиент занимается изготовлением корпоративных подарков. Помимо продажи этих подарков предоставляется услуга "Брендирование" стоимостью 900 рублей (размещение логотипа компании на изготовляемые подарки, печеньки там всякие и прочее). Так вот я сделал это в корзине в виде чекбокса, у каждой позиции в корзине. При отмеченном чекбоксе к сумме за этот товар прибавляется (или отнимается если отжать чекбокс) 900 рублей. Итоговая сумма должна меняться но в форме оформления заказа я не вижу соответствующего Input-а чтобы заменить в нём значение. Я где-то слышал что в битриксе в корзине можно менять сумму заказа (как в 1С-ке сумму счёта) вне зависимости от количества и стоимости товара. Заводить отдельную позицию в каталоге "Брендирование" - не вариант, будет непонятно для какого товара как она добавлена, делать торговое предложение тоже не вариант т. к. на сайте включён расширенный режим управления ценами и покупатели все в принципе оптовые и брендирование предусматривает +900 рублей вне зависимости от количества товара. Вобщем не нужно тупо увеличить сумму заказа и возможно как-то передать ID товаров для которых выбрана эта услуга.
Как ограничить свойство заказа типа LOCATION (местоположение) рамками РФ, Как ограничить свойство заказа типа LOCATION (местоположение) рамками РФ, т.е. чтобы пользователь мог выбрать только Росиию, регионы и города России