[ Закрыто ] Кто разобрался с новым шаблоном интернет магазина на 1С Битрикс 14.x ?, Кто разобрался с новым шаблоном интернет магазина на 1С Битрикс 14.x ? Пытаюсь натянуть туда свою вёрстку, что-то не очень получается.
Что-то этот новый шаблон для магазина швах какой-то. Левый недокументированный js. Торговые предложения выводятся именно с помощью js! А по умолчанию php их выводит все (ЗАЧЕМ?) и потом javascript показывает доступные. Я пока этот код разбирал - прослезился. Зачем всё это нужно без документации. На презентации они показывают какой крутой у них демо магазин, но никто же не юзает их демо шаблон в боевых сайтах. Битрикс такой битрикс. Документации как всегда отстой.
Да шаблон крайне не простой, я теперь его стараюсь не использовать, свой JS (Jquery) свой template.php, от поддерки получил копию старого 12-го битрикса со старым магазином, много взял оттуда. Вот может пригодится https://yadi.sk/d/b1xyh5DucCson
Товарищи, приветствую! Прилетела тут мне задача, вывести список всех вариантов товара на страница товара вместе с кнопкой "Добавить в козину" у каждого варианта. С битриксом я не работаю, в основном фронтендом занимаюсь. Как отправлять отдельный вариант товара в корзину я понял (создаем новый объект с данными этого варианта на основе класса JCCatalogElement, а затем рулим им через наследованные методы ) Но вот методы не биндятся на мои кнопки. В моем JS объекте свойство obBuyBtn пустое, хотя должно содержать ссылку на мою кнопку. Может надо это дело ре-инициализировать? з.ы. да, я мог бы сделать типичный bind нужного мне метода на нужную кнопку, но хочется все сделать нативно. з.ы.ы. документацию по всему этому бы.
Станислав Еременко написал: В моем JS объекте свойство obBuyBtn пустое, хотя должно содержать ссылку на мою кнопку.
Евгений Жуков, вам уже ответил, а я ещё посоветую вот такой штукой http://it-svalka.ru/poleznosti/analog-funktsii-php-var-dump-v-javascript.html удобно пользоваться при отладке. Выводите this в функции init класса JCCatalogElement (или любого другого) - получаете коды ошибок (если они есть), по кодам можно понять что ещё "не нашёл" класс JCCatalogElement в вашей вёрстке (поле цены, кнопку купить и т.п.).
Евгений Жуков написал: Указывайте dom-id кнопки + в Вашем варианте реализации еще необходим html для этой кнопки для каждого предложения.
Сама кнопка <button type="button" id="sku123_buy_link" >Добавить в корзину</button> где sku123 собстно имя объекта с данными для конкретного предложения. Метод sku123.visual.BUY_ID:"sku123_buy_link", а sku123.obBuyBtn:null. Если я руками (скриптом в шаблоне) напишу sku123.obBuyBtn = document.getElementById('sku123_buy_link'), то ничего не изменится.
Хм, в общем, obBuyBtn вернул, спасибо. Теперь он указывает на нужную DOM ноду,но обработчиков click на нужной мне DOM ноде не висит.
В window.JCCatalogElement.prototype.Init навешивается этот самый обработчик, но срабатывает он почему-то только для одной главной кнопки, которая изначально есть шаблоне. Будем смотреть дальше.
В общем, это... Пришлось таки немного костыльнуть и вынести биндинг на кнопку заказа за блок проверки errorCode. Тащить всю разметку для инициализации объекта конкретного предложения не вижу смысла, ибо буду выводить только минимально нужные мне параметры для добавления в корзину. Такие дела. Еще раз всем спасибо.
Станислав Еременко написал: Пришлось таки немного костыльнуть и вынести биндинг на кнопку
Без этого никуда )) можете пример кода дать, вдруг у кого-то подобная задача возникнет, а тут на форуме уже и разбор есть и пример )))
Какой именно пример кода?
catalog.element/.default/script.js, ищем:
Код
if (!!this.obBuyBtn) {
BX.bind(this.obBuyBtn, 'click', BX.proxy(this.BuyBasket, this));
}
И выносим его за вот этот блок:
Код
if (0 === this.errorCode) {...}
Так же в window.JCCatalogElement надо закомментировать
Код
if (0 === this.errorCode)
{
BX.ready(BX.delegate(this.Init,this));
}
Никакого особого смысла в этой проверке для покупателя я не нашел. Если что-то пойдет не так, оно в любом случае не сработает.
Да, не очень красиво править системный скрипт...
Либо ручками где-то вешать с BX.bind() обработчик yourObj.BuyBasket() на свои кастомные кнопки. Но этот вариант чуть сложнее, т.к. нужно подсунуть нужный объект. Этот способ я видел изначально, но хотел от него уйти к нативному функционалу. Собстно, не далеко ушел
В целом, конечно, немного огорчает такая монолитность работы с корзиной.
Станислав Еременко написал: В целом, конечно, немного огорчает такая монолитность работы с корзиной.
Пишите в пожелания и предложения по улучшению системы, например на основе моих обращений в тех.поддержку уже нескоько раз (2 или 3) создавалась заявка в отдел разработки, я конечно не отслеживаю их дальнейшую судьбу, но думаю по крайней мере прогеры битрикса эти проблемы видят и может по мере развития системы их исправляют.
Филипп Малько написал: Чуть стоит поменять верстку компонента и обработчик события уже его не видит
Если объект JS не находит в вёрстке вот эти айдишники http://joxi.ru/Vrwow4zIKqnJKr естественно работать он не будет. Меняйте вёрстку сколько угодно, только проставьте необходимые айдишники на элементах страницы (цена, кнопки купить, кнопки количества и т.п.) http://joxi.ru/eAOqKQWH4gLbOm
Намедни рылся в шаблоне оном, оказалось для своих нужд шаблон списка товаров (вот путь для скопированного как учит матчасть шаблона - путь bitrix/templates/eshop_bootstrap_blue/components/bitrix/catalog/template1/bitrix/catalog.section/.default/template.php) выводит ДВЕ картинки, обернутые ссылками на страницу товара, даже если картинка в товаре ОДНА! Во второй ссылке еще один необходимый айдишник для правильно добавления в корзину, ВЕРНЕЕ, без второй картинки товар тупо не добавляется в корзину!! Долбофеерично! Порезал это криворукое поделие заменой блока с выводом так называемой второй картинки на этот кусок - и картинка не подгружается второй раз и сеошники рады:
Сергей Вольвич, да там есть свои приколы, правда я сейчас лезу в JS класс и шаблона ( файл script.js в папке шаблона компонента ) и переписываю его. В нём можно убрать проверки на вторую картинку, и пр. чушь, ищите в script.js что-то типа this.errorCode = .... на каждый косяк (отсутствие картинки, кнопки, поля количества и т.п.) устанавливается свой this.errorCode. Чтобы не писать такие штуки:
Код
<?if ($arItem['SECOND_PICT']){?>
<met a id="<? echo $arItemIDs['SECOND_PICT']; ?>">
<?}?>
просто удалите закомментируйте в script.js проверку наличия этого элемент.