разве компоненты можно в шаблоне выводить? Там же вроде какие-то проблемы с кешированием начинаются...
слушай, может у тебя есть какие-нибудь курсы по вебу
иногда бывает такое, что есть вопрос и пока не забыл хочу его с кем-то обсудить, опыт перенять
$APPLICATION->ShowAjaxHead(true, true, true, true);
<span class="btn js-offer-request" data-fancybox_ajax_form data-src="<?=$this->getFolder().'/ajax_form.php';?>" data-on_name="<?=$arItem['NAME'];?>" data-element_id="<?=$arItem['ID'];?>">
<span>Забронировать экскурсию</span>
</span>
var getNodeData = function(element, arrayKeysUnset) {
var nodeData = $(element).clone().data();
if(arrayKeysUnset && arrayKeysUnset.length) {
for(var key of arrayKeysUnset) {
delete nodeData[key];
}
}
for(var key in nodeData) {
nodeData[key] = encodeURIComponent(nodeData[key]);
}
return nodeData;
}
$(document).on('click', '[data-fancybox_ajax_form]', function() {
$.fancybox.open(this, {
type: 'ajax',
ajax: {
settings: {
data: getNodeData(this, ['src', 'fancybox_ajax_form'])
}
}
});
});
<?
require_once($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/include/prolog_before.php');
$request = \Bitrix\Main\Application::getInstance()->getContext()->getRequest();
$requestValues = $request->getValues();
if(isset($requestValues['fancybox']))
unset($requestValues['fancybox']);
// добавление параметров для компонента, из data атрибутов кнопки
$parameters = [];
if($requestValues) {
foreach($requestValues as $key => $value) {
$value = urldecode($value);
if(defined('LANG_CHARSET') && LANG_CHARSET == 'windows-1251')
$value = \Bitrix\Main\Text\Encoding::convertEncoding($value, 'utf-8', 'windows-1251');
$parameters[strtoupper($key)] = $value;
}
}
// здесь подключаешь свой компонент формы
$APPLICATION->IncludeComponent(
"bitrix:main.feedback",
"bootstrap_v4",
array(
// у тебя нет этих параметров, указал для примера, оставь пустой массив
"EMAIL_TO" => "sale@nyuta.bx",
"EVENT_MESSAGE_ID" => array(),
"OK_TEXT" => "Спасибо, ваше сообщение принято.",
"REQUIRED_FIELDS" => array("NAME","EMAIL"),
"USE_CAPTCHA" => "Y",
'AJAX_MODE' => 'Y',
) + $parameters
);
\Bitrix\Main\UserAuthActionTable::addUpdateAction($userId);
Если посмотришь, что catalog.section, что catalog.element наследуются от класса \Bitix\Iblock\Component\Base, который содержит код добавления товара в корзину по get параметру ADD2BASKET и нет никаких методов связаных с удалением.
Простыми манипуляциями не решить, могу порядок действий описать:
1. В шаблоне компонента, который будет выводить твои товары в файле script.js надо написать свою логику удаления, там буквально несколько строк кода достаточно, но надо будет тебе разобраться в этом скрипте. Смысл в том чтобы отправлять ajax на свой файл
2. В файле ajax пишешь логику удаления товара - погугли, там ничего сложного
3. Сложная вещь - при загрузке надо узнать товар уже в корзине или нет, чтобы показать нужную кнопку, нужно учитывать что товар может быть с торговыми предложениями
4. Нужно синхронизировать все это дело с малой корзиной, в том же script.js, при добавлении товара в корзину есть такая синхронизация
Ну и самый неприятный момент - это рассмотрение неординарного поведения юзера:
1. захожу в товар1 и кладу в корзину 5 единиц
2. захожу в товар2, к этому товару привязан товар1 и этот товар уже в корзине, нажимаю удалить, которая удалит все 5 единиц товара, как сам считаешь это нормально давать такую возможность пользователю? Я уже не говорю о том, что он тупить начнет, когда перейдет в корзину и не увидит там товар1, а даже с точки зрения маркетинга ты даешь ему лишнюю возможность отказаться от покупки