Подсчет нажатия кнопки и сохранение параметра в свойство элемента Битрикс?
В карточке элемента инфоблока есть кнопка, при нажатии на нее необходимо вести подсчет, этих нажатий.
Решила реализовать следующим образом: создать свойство у инфоблока, куда будет фиксироваться количество нажатий. При клике, вызывается функция, которая прибавляет один к этому свойству. Только как это свойство в скрипте изменить и тут же обновить этот параметр на странице элемента?
Прошу поделиться идеями, опытом.
И, соответственно, для неё скрипт будет примерно таким
const clicksCountSpan = document.getElementById('clicks-count'); // получаем элементы DOM - span, в который будет выводиться число
const incrementClicksButton = document.getElementById('increment-clicks-button'); // и кнопку, по которой нужно кликать
let clicksCount = 0
function onIncrementButtonClick () {
clicksCount += 1; // инкрементируем счётчик
clicksCountSpan.innerHTML = clicksCount; // этой строчкой заменяем контент внутри span на актуальное значение
}
incrementClicksButton?.addEventListener('click', onIncrementButtonClick) // подписываем обработчик на событие click по кнопке
Евгения Симонова, готовых примеров нет, тут нужно своё писать.
Тут посмотрите https://codething.ru/ajax.php Пример 3. Отправка данных на сервер в фоновом режиме и получение контента
В файле обработчике, который у вас будет в ajax режиме работать, там вам нужно будет на АПИ битрикс написать обновление элемента https://dev.1c-bitrix.ru/api_help/iblock/classes/c...
и возвращение обновлённого количества для показа на сайте (либо обновление информации делать на стороне javascript в шаблоне страницы элемента.
var kols = document.querySelector("#kols");
var kols_kol = document.querySelector("#kols_kol");
kols .addEventListener("click", function () {
var kol = <?=$arResult["PROPERTIES"]["KOLSS"]["DEFAULT_VALUE"]?> + 1;
kols_kol.innerHTML = kol;
<?
$ELEMENT_ID = $arResult["ID"] // код элемента
$PROPERTY_CODE = "KOLSS"; // код свойства
$PROPERTY_VALUE = kol; // значение свойства
// Установим новое значение для данного свойства данного элемента
CIBlockElement::SetPropertyValuesEx($ELEMENT_ID, false, array($PROPERTY_CODE => $PROPERTY_VALUE));
?>
});
не хочет обновлять значение свойства, получать его получает, единицу прибавляет, обновляет span, но само свойство не перезаписывает, через Update тоже не получается
Евгения Симонова, возьмите поищите примеры кода обновления элемента и его свойств, на отдельной тестовой странице протестируйте и добейтесь чтобы РНР код обновления работал и обновлял элемент, потом уже этот код переносите и добавляйте в шаблон страницы.
$(function() {
var btn = document.querySelector("#kols");
var btn_span = document.querySelector("#kols_kol");
btn.addEventListener("click", function () {
var kol = <?=$arResult["PROPERTIES"]["KOLSS"]["VALUE"]?> + 1;
<? CIBlockElement::SetPropertyValuesEx($arResult["ID"], 27, array("KOLSS" => $arResult["PROPERTIES"]["KOLSS"]["VALUE"] + 1)); ?>
btn_span.innerHTML = kol;
});
});
изменение элемента происходит, однако функция срабатывает не только по клику на кнопку, но и при перезагрузке страницы. Не могу ничего с этим поделать. Есть идеи?
Евгения Симонова, поймите одну простую вещь, это не сервис сделайте вместо меня, а площадка вопросов и ответов.
Если кто-то найдётся кто захочет посмотреть и вникнуть в ваш код, тогда для этого вам нужно к вопросу приложить все файлы с вашим кодом и шаблоны компонентов, которые задействованы в виде архива ссылкой в Яндекс диск, а также добавить ссылку на страницу с озвученной проблемой. если вы не хотите светить домен сайта здесь, тогда вам нужно поднять копию на техническом домене, чтобы можно было посмотреть и воспроизвести проблему.