Телеграм: @bazarow_ru Почта: mihail@bazarow.ru

Добавление и удаление из сравнения на AJAX: Битрикс

Просмотров: 18758

Рецепт лежал у меня в закромах, почти о нем и забыл, но тут подвернулся под руку- решил опубликовать. Скажу сразу, данное решение найдено то ли на просторах интернета, то ли в официальных блогах на официальном сайте Битрикс. Но в оригинале допущен ряд критических ошибок и упущений.

Видимо автор рецепта спешил, или опустил очевидные для него моменты. Публикую метод с необходимыми исправлениями.

Не большое видео, что должно получиться

На оформление сильно не смотрим, стилизация в процессе. Главное функционал

Делаем AJAX добавление в сравнение

Идем в папку /local/ (если нет, создаем ее) в ней создаем папку ajax в которой создаем файл list_compare.php внутри которого размещаем код:

require_once($_SERVER['DOCUMENT_ROOT']. "/bitrix/modules/main/include/prolog_before.php");
$APPLICATION->IncludeComponent(
	"bitrix:catalog.compare.list", 
	"", 
	array(
		"IBLOCK_TYPE" => "1c_catalog", //Сюда ваш тип инфоблока каталога
		"IBLOCK_ID" => "1", //Сюда ваш ID инфоблока каталога
		"AJAX_MODE" => "N",
		"AJAX_OPTION_JUMP" => "N",
		"AJAX_OPTION_STYLE" => "Y",
		"AJAX_OPTION_HISTORY" => "N",
		"DETAIL_URL" => "#SECTION_CODE#",
		"COMPARE_URL" => "/catalog/compare.php",
		"NAME" => "CATALOG_COMPARE_LIST",
		"AJAX_OPTION_ADDITIONAL" => ""
	),
false
);

Это вызов стандартного компонента "Список сравниваемых элементов каталога". К этому файлу мы будем обращаться для AJAX запроса.

Далее, в нужном месте шаблона сайта выводим его еще раз. Например, в моем видео примере он размещен в footer.php хотя это не принципиально, просто в том месте, где список сравнения обозначен дизайном вашего сайта. Самое главное, вызываем тот же самый компонент, с тем же самым шаблоном что и в list_compare.php- лучше если они быть идентичными, хотя это на ваш вкус

И обворачиваем вызов компонента в div id="compare_list_count"

В шаблоне списка элементов catalog.section вашего каталога, в самом верху! размещаем скрипт, который будет отслеживать нажатия на input, отправляющий товар в сравнение и отправлять AJAX запрос к компоненту

function compare_tov(id)
{
  var chek = document.getElementById('compareid_'+id);
    if (chek.checked)
        {
        //Добавить
        var AddedGoodId = id;
            $.get("/local/ajax/list_compare.php",
            { 
                action: "ADD_TO_COMPARE_LIST", id: AddedGoodId},
                function(data) {
	        $("#compare_list_count").html(data);
        	}
        );
        }
    else
       {
        //Удалить
        var AddedGoodId = id;
            $.get("/local/ajax/list_compare.php",
            { 
                action: "DELETE_FROM_COMPARE_LIST", id: AddedGoodId},
                function(data) {
	        $("#compare_list_count").html(data);
            }
            );
    }
}

И в том месте, где планируете вывести input для добавления/удаления в сравнение размещаем вот такой код


<?
  $iblockid = $arElement['IBLOCK_ID'];
  $id=$arElement['ID'];
if(isset($_SESSION["CATALOG_COMPARE_LIST"][$iblockid]["ITEMS"][$id])) { $checked='checked'; } else { $checked=''; } ?> <input <?=$checked;?> type="checkbox" id="compareid_<?=$arElement['ID'];?>" onchange="compare_tov(<?=$arElement['ID'];?>);">

На этом в общем-то и все. Все должно работать- проверено.

klark 03.05.2018
Добрый день, на 18 секунде видео видна ссылка на сравнение, как сделать ее в таком виде? чтобы добавлялись id товаров?спасибо
pavelyar@yandex.ru 31.10.2019
Михаил,доброго времени суток!
Использовал Ваш метод,все работает! Но есть нюанс, я использовал его  в комплексном bitrix:catalog но в своем шаблоне.
При отметке товара "checkbox" появляются два окна ,одно на стандартном шаблоне другое то которое Ваша доработка, если отключать встроенный механизм в комплексный каталог перестает работать и Ваша доработка.
К сожалению не нашел как вызвать стандартный механизм сравнения товаров, воспользовался Вашим.
Михаил Базаров 01.11.2019
Цитата
Михаил,доброго времени суток!
Использовал Ваш метод,все работает! Но есть нюанс, я использовал его  в комплексном bitrix:catalog но в своем шаблоне.
При отметке товара "checkbox" появляются два окна ,одно на стандартном шаблоне другое то которое Ваша доработка, если отключать встроенный механизм в комплексный каталог перестает работать и Ваша доработка.
К сожалению не нашел как вызвать стандартный механизм сравнения товаров, воспользовался Вашим.
В том который штатный, попробуйте просто очистить шаблон это компонента. Совсем отключать его не надо- так и не должно работать.

В штатном, оставляете только цифру с количеством отложенного, он и обновляется при ajax запросе. Можно не выводить его в самом catalog.section - достаточно где-нибудь в шаблоне сайта (там где планируется вывод количества отложенного)
Sky 05.12.2019
Михаил,Спасибо! Можно спросить что за форма использовалась на сайте в видео? Можно ссылку на нее? Красиво,понравилось!
Str Str 21.02.2021
Здравствуйте! Добавление/удаление товаров при клике на input работает хорошо, но не на странице с таблицей сравнения. Если нажать на "удалить", то товар успешно удалится с таблицы сравнения, но счётчик товаров в сравнении не изменится, а точнее не происходит ajax. Помогите пожалуйста разобраться.

Записная книжка разработчика

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

Ajax форма обратной связи, реализация в битрикс Просмотров: 8680 Иногда, на сайте требуется создать форму обратной связи, которая будет писать все данные в... Вывести компонент новостей на страницу в Битрикс Просмотров: 65107 Посмотрел Яндекс метрику на свой сайт, и решил что буду частенько писать сюда именно то, ч... Если товар в корзине, поменять кнопку на "В корзине" в новом шаблоне ... Просмотров: 1769 Ранее я уже делал заметку на эту тему. Тогда, мы меняли значение input-а при добавлении то... Удалить товары из корзины, если есть определенные товары. Просмотров: 1915 Задача: если в корзину добавлены товары с определенным свойством, нужно удалить из корзины... Подключение jquery из ядра битрикс и объединение своих скриптов в оди... Просмотров: 20892 Если используете большое количество js скриптов на сайте. Например: фансибокс, всяческие г... Заполнить коэффициент единицы измерения (MEASURE_RATIO) из свойства э... Просмотров: 6468 Задачка: Каталог наполняется из 1С, но 1С не передает коэффициент единицы измерения (особе... Дать пользователю возможность быстро отредактировать материал Просмотров: 4945 На одном из разрабатываемых сайтов, пользователи формирую его контент. После регистрации, ... Связанные элементы в карточке товара, с помощью catalog.section Просмотров: 15728 Достаточно часто, при разработке магазинов на битрикс, требуется выводить связанные элемен... Если папка то применяем...в Битрикс Просмотров: 30408 Бывает, стоит задача применить какой-либо стиль или вывести конкретный кусочек кода для ди... Вывести дополнительное пользовательское поле, использование полей в ф... Просмотров: 16768 Если вам нужно вывести дополнительное пользовательское поле типа "Привязка к разделам инфо... Вывести общее количество товаров в шаблоне корзины 1С-Битрикс Просмотров: 7035 Задача: вывести общее количество товаров в корзине (именно количество единиц товара, а не ... Спойлер в списке новостей Битрикс Просмотров: 12179 Иногда нужно сделать спойлеры в копонентах Битрикс, в основном конечно, имеет смысл при оч... Дополнительные картинки в новостях Битрикс, почти фотогалерея. Просмотров: 49498 Частенько стоит задача, по мимо стандартных "Картинка для анонса" и "Деталь... Увеличение диска на готовой виртуальной машине Битрикс Просмотров: 9813 Как всем известно, на официальном сайте 1С-битрикс можно скачать готовую виртуальную машин... Установить цену товара из свойства инфоблока Просмотров: 10052 На одном из проектов, нужно было единоразово заполнить цены товаров из свойства инфоблока... Добавление и удаление из сравнения на AJAX: Битрикс Просмотров: 18758 Рецепт лежал у меня в закромах, почти о нем и забыл, но тут подвернулся под руку- решил оп... Автоматически отгрузить заказ и сменить статус отгрузки, при выполнен... Просмотров: 951 Проблема: Заказы, на сайте, обрабатываются только в 1С. При этом 1С не работает с отгрузка... Вывести свойство отдельно ото всех или исключить из всех Просмотров: 7666 Иногда, на сайте, под управлением 1С-Битрикс, нужно вывести какое-то конкретное свойство о... Вывод элементов с помощью API битрикс Просмотров: 23961 Иногда, выводить элементы инфоблока с помощью компонентов, может оказаться избыточным. Нап... Быстрая отписка от всех рассылок модуля "E-mail маркетинг", в кабинет... Просмотров: 277 Задача: дать пользователям возможность отписаться от всех рассылок "E-mail маркетинга", не...