Доброго времени суток! Не думал, что сам обращусь за помощью, но попал в очень интересную ситуацию. Реализовал в интернет магазине pop-up окно, которое подгружается с помощью кнопки "купить". Все работает шикарно, кроме одного момента... Иногда, если нажать повторный раз кнопку "купить" - выдает ошибку с надписью "Элемент не найден". Ровно, как и у рандомного товара. Но если еще раз нажать эту же кнопку, то с нескольких попыток все-таки прогрузится модальное окно. Я думал, что все дело в модальном окне, но по закрытию я реализовал удаление данных из него, чтобы AJAX-ом подтянуть новые значения. Ниже прикладываю видео с демонстрацией проблемы.
Описание реализации:
В catalog.element выводится дополнительный элемент catalog.top, в котором полностью рабочая реализация.
Также, есть единый pop-up, в который заносятся данные с помощью следующей конструкции:
orderButton.on('click', function () {
let productId = $(this).attr("data-button-buy-id");
$("#genElement").load("/api/v1/products.php?ID=" + productId, function (responseText, textStatus, XMLHttpRequest) {
if (textStatus === "success") {
$("#productLoader").hide(); // Скрываем spinner
initializeScripts(); // Инициализируем нужные нам для catalog.element скрпиты (временный костыль)
}
});
});
$("#centralModalLg").on('hide.bs.modal', function (e) {
$("#productLoader").show(); // Возвращаем spinner в привычное состояние (временный костыль)
$("#genElement").empty(); // Очищается pop-up от данных внутри него
});
Файл product.php
spoiler
<?php
require($_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/prolog_before.php');
if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true) die();
/** @global CMain $APPLICATION */
/** @var string $componentPath */
/** @var CBitrixComponent $component */
$productID = $_GET['ID'];
if (!isset ($productID))
die ('Не получен параметр ID');
$APPLICATION->IncludeComponent(
"bitrix:catalog.element",
"modal-element",
array(
"ACTION_VARIABLE" => "act",
"DETAIL_PICTURE_MODE" => array(
0 => "POPUP",
1 => "MAGNIFIER",
),
"DISABLE_INIT_JS_IN_COMPONENT" => "Y",
"DISPLAY_NAME" => "Y",
"ELEMENT_ID" => $productID,
"IBLOCK_ID" => "5",
"IBLOCK_TYPE" => "catalog",
"IMAGE_RESOLUTION" => "16by9",
"MAIN_BLOCK_PROPERTY_CODE" => array(
0 => "ARTNUMBER",
1 => "BRAND",
2 => "COLOR",
3 => "MATERIAL",
4 => "MORE_PHOTO",
5 => "ADDITIONAL_FILES",
6 => "AMOUNT",
7 => "AMOUNT_EUROPE",
),
"OFFERS_SORT_FIELD" => "sort",
"OFFERS_SORT_FIELD2" => "id",
"OFFERS_SORT_ORDER" => "asc",
"OFFERS_SORT_ORDER2" => "desc",
"OFFER_ADD_PICT_PROP" => "-",
"PARTIAL_PRODUCT_PROPERTIES" => "N",
"PRICE_CODE" => array("BASE"),
"PRICE_VAT_INCLUDE" => "Y",
"PRICE_VAT_SHOW_VALUE" => "N",
"PRODUCT_ID_VARIABLE" => "id",
//"SECTION_ID" => $_REQUEST["SECTION_ID"],
"SECTION_ID_VARIABLE" => "SECTION_ID",
"COMPONENT_TEMPLATE" => "modal-element"
),
false
);
?>
Ссылка на видео:
Ссылка
UPD: Иногда почему-то не передается параметр "ID", узналось в результате отладки. Но вот вопрос... Почему?
Скриншот с дампом, где ничего не получено:
UPD2: Проблема была решена. Оказалось, что в двух компонентах дублировались куски JS кода, моя оплошность, сам не заметил. Плюс ко всему - помог избавиться от побочек аналогичной проблемы один топик на форуме битрикс, решение побочки достаточно простое - ACTION_VARIABLE замените на свой параметр. Не факт, что у вас случится аналогичная проблема, но имеет место быть.