В этой статье представлен пример реализации счётчика нажатий в CMS 1С-Битрикс
с использованием AJAX-запроса и свойства инфоблока.
При загрузке страницы показывается текущее значение в свойстве
CLICK_COUNT
, а при нажатии на кнопку оно увеличивается на 1.

index.php
<?php
// Подключаем Bitrix
require_once($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/include/prolog_before.php');
CModule::IncludeModule('iblock');
// Укажите ID инфоблока и элемента
$iblockId = 2; // Ваш ID инфоблока
$elementId = 40; // ID элемента для получения счётчика
// Получаем текущий счётчик
$propertyRes = CIBlockElement::GetProperty(
$iblockId,
$elementId,
['sort' => 'asc'],
['CODE' => 'CLICK_COUNT']
);
$currentCount = 0;
if ($propertyArray = $propertyRes->Fetch()) {
$currentCount = (int)$propertyArray['VALUE'];
}
?>
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Счетчик нажатий</title>
<style>
#clickButton {
padding: 10px 20px;
font-size: 16px;
cursor: pointer;
}
#clickCount {
font-size: 18px;
margin-top: 10px;
}
</style>
</head>
<body>
<div>
<button id="clickButton" data-element-id="<?=$elementId?>">Нажми меня</button>
<div>Количество нажатий: <span id="clickCount"><?php echo $currentCount; ?></span></div>
</div>
<script>
document.addEventListener('DOMContentLoaded', () => {
const button = document.getElementById('clickButton');
const clickCountElement = document.getElementById('clickCount');
button.addEventListener('click', () => {
const elementId = button.getAttribute('data-element-id');
fetch('/ajax/update_click_count.php', {
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
},
body: new URLSearchParams({ element_id: elementId })
})
.then(response => response.json())
.then(data => {
if (data.success) {
// Обновляем текст счётчика
clickCountElement.textContent = data.count;
} else {
console.error('Ошибка обновления счётчика:', data.errors);
}
})
.catch(error => {
console.error('Ошибка запроса:', error);
});
});
});
</script>
</body>
</html>
/ajax/update_click_count.php
<?php
use Bitrix\Main\Loader;
require_once($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/include/prolog_before.php');
$GLOBALS['APPLICATION']->RestartBuffer();
header('Content-Type: application/json');
// Разрешаем только метод POST
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
echo json_encode([
'success' => false,
'errors' => ['Неверный метод запроса.']
]);
die();
}
// Проверяем, загружен ли модуль iblock
if (!Loader::includeModule('iblock')) {
echo json_encode([
'success' => false,
'errors' => ['Модуль инфоблоков не загружен.']
]);
die();
}
// Получаем ID элемента из POST
$elementId = (int)$_POST['element_id'];
// Укажите ID вашего инфоблока
$iblockId = 2; // Замените на свой ID инфоблока
// Проверяем, существует ли элемент
$checkElement = CIBlockElement::GetList(
[],
['IBLOCK_ID' => $iblockId, 'ID' => $elementId],
false,
false,
['ID']
)->Fetch();
if (!$checkElement) {
// Элемент не найден
echo json_encode([
'success' => false,
'errors' => ['Элемент с указанным ID не найден.']
]);
die();
}
// Получаем текущее значение свойства CLICK_COUNT
$propertyRes = CIBlockElement::GetProperty(
$iblockId,
$elementId,
['sort' => 'asc'],
['CODE' => 'CLICK_COUNT']
);
$currentCount = 0;
if ($propertyArray = $propertyRes->Fetch()) {
$currentCount = (int)$propertyArray['VALUE'];
}
// Увеличиваем счётчик
$newCount = $currentCount + 1;
// Обновляем свойство
CIBlockElement::SetPropertyValuesEx($elementId, $iblockId, [
'CLICK_COUNT' => $newCount
]);
// Возвращаем JSON-ответ
echo json_encode([
'success' => true,
'count' => $newCount
]);
die();
?>
Теперь вы можете разместить эти файлы в соответствующих местах:
index.php
в корне сайта (или другом нужном разделе),
а update_click_count.php
в папке /ajax/
.
В результате при загрузке страницы
index.php будет сразу отображаться текущее число кликов,
а при нажатии на кнопку это число будет увеличиваться и возвращаться в формате JSON.