Счетчик ui.counter
ui.counter — расширение Bitrix Framework для счетчика: небольшой овальной метки с числом.
Счетчик показывает количество непрочитанных сообщений, новых задач или незакрытых дел. Разместите его рядом с пунктом меню, вкладкой, кнопкой или названием группы.
JavaScript-класс Counter создает и меняет счетчик в браузере. PHP-класс Bitrix\UI\Counter\Counter формирует готовый HTML на сервере.
Выбрать API для создания счетчика
Используйте API, который соответствует месту формирования счетчика:
-
Counterизui.cnt— для модульного JavaScript, когда счетчик создает код в браузере. -
ui.vue3.components.counter— для Vue-приложений наui.vue3. -
Bitrix\UI\Counter\Counter— для PHP-кода, когда HTML формирует сервер.
У кнопки свой счетчик: его задают параметры самой кнопки. Для такого сценария используйте кнопки ui.buttons.
Подключить расширение
Если вы выводите счетчик из PHP, загрузите расширение ui.counter.
\Bitrix\Main\UI\Extension::load('ui.counter');
Расширение ui.counter не содержит своего кода: оно подключает расширение ui.cnt. Короткое имя ui.cnt защищает файлы от блокировки браузерными расширениями, а имя ui.counter остается для совместимости.
Если вы работаете в модульном JavaScript, импортируйте класс и наборы значений из ui.cnt.
import { Counter, CounterColor, CounterSize, CounterStyle } from 'ui.cnt';
После загрузки расширения те же имена доступны глобально: BX.UI.Counter, BX.UI.CounterColor, BX.UI.CounterSize и BX.UI.CounterStyle. Наборы значений доступны и как свойства класса: Counter.Color, Counter.Size и Counter.Style.
Создать счетчик в JavaScript
Чтобы создать счетчик, выполните основные действия:
-
Создайте экземпляр
Counter. -
Передайте число в параметр
value. -
Разместите счетчик на странице методом
renderTo().
Пример. Красный счетчик с числом 12 появляется в блоке с идентификатором counter-container.
import { Counter, CounterColor, CounterSize } from 'ui.cnt';
const counter = new Counter({
value: 12,
color: CounterColor.DANGER,
size: CounterSize.MEDIUM,
});
counter.renderTo(document.getElementById('counter-container'));

Метод renderTo() добавляет счетчик в конец переданного узла и возвращает DOM-узел счетчика. Если аргумент не DOM-узел, метод возвращает null и ничего не размещает.
Метод render() возвращает DOM-узел счетчика, но не размещает его на странице. Используйте его, когда узел нужно вставить самостоятельно. Повторные вызовы render(), renderTo() и getContainer() возвращают один и тот же узел.
Передать параметры
Передайте в конструктор Counter объект с параметрами, чтобы задать число, оформление и поведение счетчика.
Число и предельное значение
-
value— число счетчика. Передавайте неотрицательное число: конструктор выводит отрицательное значение как есть, и к нулю его приводят только методыupdate()иsetValue(). По умолчанию0. -
maxValue— предельное число. Еслиvalueбольше, счетчик показываетmaxValueсо знаком+, например99+. По умолчанию99. -
usePercentSymbol— знак процента после числа. Приtrueсчетчик выводитvalueцеликом и не ограничивает его поmaxValue. По умолчаниюfalse.
Оформление
-
color— цвет счетчика. Значения описаны в разделе Цвет счетчика. По умолчаниюCounterColor.PRIMARY. -
size— размер счетчика. Значения описаны в разделе Размер счетчика. По умолчаниюCounterSize.MEDIUM. -
useAirDesign— оформление Air Design. По умолчаниюfalse. -
style— вариант оформления Air Design. Значения описаны в разделе Стиль Air Design. По умолчаниюCounterStyle.FILLED. -
border— светлая рамка вокруг счетчика. Она отделяет счетчик от цветной подложки. По умолчаниюfalse.
Цвет и стиль не работают вместе. С useAirDesign: true фон счетчика задает style, а color на него не влияет. Без Air Design работает color, а style не применяется.
Двойной счетчик
-
isDouble— вторая подложка, сдвинутая вправо за основным счетчиком. По умолчаниюfalse. -
secondaryColor— цвет второй подложки. Значение берется изCounterColorи действует только сisDouble: true. По умолчаниюCounterColor.PRIMARY.

Поведение и размещение
-
animate— анимация при смене числа. Описана в разделе Анимировать изменение числа. По умолчаниюfalse. -
hideIfZero— скрытие счетчика при нулевом значении. Работает только сuseAirDesign: true. По умолчаниюfalse. -
node— готовый DOM-узел под счетчик. Класс очищает узел, задает ему классы счетчика и размещает содержимое внутри. Без этого параметра класс создает новый узел. -
id— значение атрибутаidу узла счетчика. По умолчанию атрибут не задается.
Выбрать цвет, размер и стиль
Оформление счетчика собирается из трех наборов значений. Цвет и стиль отвечают за заливку и относятся к разным режимам, размер работает в обоих.
Цвет счетчика
Цвет счетчика задает значение CounterColor. Оно действует, когда Air Design выключен.
|
Значение |
Описание |
|
|
Красный цвет для ошибок, просроченных элементов и критичных значений |
|
|
Желтый цвет для предупреждений и значений, которые требуют внимания |
|
|
Зеленый цвет для успешных состояний и завершенных действий |
|
|
Основной акцентный цвет интерфейса |
|
|
Серый нейтральный цвет для второстепенной информации |
|
|
Белая заливка с серой обводкой и темным текстом |
|
|
Белая заливка со светло-серым текстом |
|
|
Полупрозрачная светлая подложка для темного фона |
|
|
Цвет, который зависит от текущей темы интерфейса |

Значения LIGHT, WHITE и DARK рассчитаны на темный фон, поэтому на иллюстрации они показаны на темной подложке.
Размер счетчика
Размер счетчика задает значение CounterSize. Оно определяет высоту счетчика и размер шрифта.
|
Значение |
Высота без Air Design |
Высота с Air Design |
|
|
13 px |
14 px |
|
|
16 px |
16 px |
|
|
19 px |
18 px |

Стиль Air Design
Стиль определяет сочетание фона, текста и границы счетчика в режиме Air Design. Значения дает набор CounterStyle.
|
Значение |
Описание |
|
|
Плотная градиентная заливка с белым текстом |
|
|
Плотная заливка в основной палитре. Значение по умолчанию в JavaScript |
|
|
Инвертированный вариант основной заливки: цвета фона и текста меняются местами |
|
|
Плотная заливка для ошибки или критичного значения. Значение по умолчанию в PHP |
|
|
Инвертированный вариант оформления ошибки |
|
|
Плотная заливка для предупреждения |
|
|
Плотная заливка для успешного состояния |
|
|
Инвертированный вариант успешного состояния |
|
|
Плотная нейтральная заливка без акцентного цвета |
|
|
Инвертированная нейтральная заливка |
|
|
Светлая нейтральная подложка без акцентного цвета |
|
|
Нейтральное контурное оформление без плотной заливки |

Пример. Счетчик в режиме Air Design скрывается, пока число равно нулю, и показывает заливку предупреждения, когда значение приходит с сервера.
import { Counter, CounterSize, CounterStyle } from 'ui.cnt';
const counter = new Counter({
useAirDesign: true,
style: CounterStyle.FILLED_WARNING,
size: CounterSize.SMALL,
value: 0,
hideIfZero: true,
});
counter.renderTo(document.getElementById('counter-container'));
counter.update(5);
Изменить счетчик после создания
Методы класса Counter меняют число и оформление уже созданного счетчика. Вызывайте их после того, как счетчик размещен на странице.
|
Метод |
Описание |
|
|
Меняет число и перерисовывает счетчик |
|
|
Записывает число в объект и в атрибут |
|
|
Возвращает показанное значение: число или строку вида |
|
|
Возвращает исходное число без ограничения по |
|
|
Меняет предельное число. Отрицательное значение приводит к нулю |
|
|
Возвращает предельное число |
|
|
Меняет цвет счетчика |
|
|
Меняет размер счетчика |
|
|
Меняет стиль. Класс применяет его к узлу только при включенном Air Design |
|
|
Включает или выключает Air Design |
|
|
Добавляет или убирает рамку. Принимает только логическое значение |
|
|
Сообщает, включена ли рамка |
|
|
Включает или выключает анимацию смены числа |
|
|
Возвращает идентификатор счетчика |
|
|
Возвращает DOM-узел счетчика и создает его при первом вызове |
Пример. Счетчик непрочитанных сообщений увеличивается на единицу по текущему значению.
counter.update(counter.getRealValue() + 1);
Анимировать изменение числа
Передайте animate: true, чтобы счетчик менял число с анимацией. Класс подбирает анимацию по направлению изменения: одну для роста значения, другую для уменьшения. Если текущее число уже достигло maxValue, класс меняет его без анимации.
Анимация меняет порядок обновления. Метод update() возвращает управление сразу, число в узле меняется через 250 мс после вызова, а класс анимации снимается через 500 мс. Если вы читаете текст узла сразу после вызова, вы получите прежнее число.
Анимация не работает вместе с Air Design. Если передать animate: true и useAirDesign: true, метод update() не изменит счетчик. Для Air Design оставьте animate выключенным.
Пример. Счетчик с анимацией показывает число 3 через 250 мс после вызова update().
import { Counter, CounterColor } from 'ui.cnt';
const counter = new Counter({
value: 1,
color: CounterColor.DANGER,
animate: true,
});
counter.renderTo(document.getElementById('counter-container'));
counter.update(3);
Показать и скрыть счетчик
Метод hide() скрывает счетчик анимацией исчезновения, метод show() возвращает его анимацией появления. Оба метода меняют только видимость: узел остается на странице, а число сохраняется.
Пример. Счетчик исчезает на время запроса и возвращается с новым числом.
counter.hide();
// после ответа сервера
counter.update(12);
counter.show();
Удалить счетчик
Метод destroy() удаляет узел счетчика со страницы и очищает свойства объекта. После вызова объект использовать нельзя: создайте новый экземпляр Counter.
Создать счетчик в PHP
PHP-класс Bitrix\UI\Counter\Counter формирует HTML счетчика на сервере. Параметры передайте в конструктор именованными аргументами. После создания они не меняются: все свойства класса объявлены как readonly. Метод render() возвращает готовую HTML-строку.
Значения для параметров дают перечисления CounterColor, CounterSize и CounterStyle из пространства имен Bitrix\UI\Counter. Наборы значений совпадают с JavaScript.
|
Параметр |
Тип данных |
Описание |
|
|
|
Включает оформление Air Design. По умолчанию |
|
|
|
Вариант оформления Air Design. По умолчанию |
|
|
|
Число счетчика. Отрицательное значение класс выводит как есть, к нулю не приводит. По умолчанию |
|
|
|
Предельное число. Если |
|
|
|
Цвет счетчика. По умолчанию |
|
|
|
Цвет второй подложки. Действует только с |
|
|
|
Добавляет светлую рамку вокруг счетчика. По умолчанию |
|
|
|
Размер счетчика. По умолчанию |
|
|
|
Добавляет вторую подложку за основным счетчиком. По умолчанию |
|
|
|
Добавляет знак процента после числа и снимает ограничение по |
|
|
|
Значение атрибута |
|
|
|
Скрывает счетчик при нулевом значении. Работает только с |
В PHP нет параметров animate и node: анимацию и размещение в готовом узле поддерживает только JavaScript-класс.
Расширение ui.counter нужно подключить отдельно вызовом Extension::load(). Метод render() возвращает только разметку. Без расширения браузер не получит стили, и счетчик отобразится как обычный текст.
Пример. Счетчик документов выводится в шаблоне рядом с пунктом меню и скрывается, пока документов нет.
use Bitrix\UI\Counter\Counter;
use Bitrix\UI\Counter\CounterSize;
use Bitrix\UI\Counter\CounterStyle;
\Bitrix\Main\UI\Extension::load('ui.counter');
$counter = new Counter(
useAirDesign: true,
style: CounterStyle::FILLED_ALERT,
value: 7,
size: CounterSize::SMALL,
id: 'documents-counter',
hideIfZero: true,
);
echo $counter->render();
Обновить серверный счетчик из JavaScript
Статический метод Counter.updateCounterNodeValue() меняет число у счетчика, который пришел с сервера. Метод принимает узел счетчика и новое число, собирает объект Counter по классам узла и перерисовывает содержимое. Так счетчик получает новое число после ответа сервера, без перезагрузки страницы.
Статический метод Counter.initFromCounterNode() создает объект Counter по готовому узлу и возвращает его. Используйте метод, когда серверному счетчику нужно не только новое число, но и другое оформление. Если у узла нет класса ui-counter, метод возвращает null.
Оба метода читают из узла только оформление Air Design, стиль, цвет, размер, число и скрытие при нуле. Предельное число, знак процента, рамка и вторая подложка в разметке не сохраняются и возвращаются к значениям по умолчанию. Если счетчик использует эти параметры, задайте их заново в JavaScript.
Пример. Счетчик документов, отрисованный в PHP, получает новое число после ответа сервера.
import { Counter } from 'ui.cnt';
Counter.updateCounterNodeValue(document.getElementById('documents-counter'), 3);
Создать счетчик во Vue-приложении
Расширение ui.vue3.components.counter экспортирует Vue-компонент Counter с именем BCounter. Компонент создает счетчик на основе класса Counter из ui.cnt и всегда включает Air Design, поэтому использует те же размеры и стили.
Если вы подключаете компонент из PHP, загрузите расширение ui.vue3.components.counter.
\Bitrix\Main\UI\Extension::load('ui.vue3.components.counter');
В модульном JavaScript импортируйте компонент из этого расширения, а значения для свойств — из ui.cnt.
import { Counter } from 'ui.vue3.components.counter';
import { CounterSize, CounterStyle } from 'ui.cnt';
Свойства компонента соответствуют параметрам класса.
|
Свойство |
Тип данных |
Описание |
|
|
|
Число счетчика. По умолчанию |
|
|
|
Предельное число. По умолчанию |
|
|
|
Вариант оформления из |
|
|
|
Размер из |
|
|
|
Добавляет светлую рамку вокруг счетчика. По умолчанию |
|
|
|
Добавляет знак процента после числа. По умолчанию |
Компонент следит за свойствами value, style, size, maxValue и border и обновляет счетчик при их изменении. Свойство percent компонент читает один раз при создании, поэтому менять его после отрисовки нельзя.
Свойств color, isDouble и hideIfZero у компонента нет. Если они нужны, создавайте счетчик классом Counter из ui.cnt.
Наборы CounterStyle и CounterSize — константы, а не данные компонента. Верните их из setup(), чтобы обратиться к ним в шаблоне.
Пример. Компонент показывает долю выполненных задач в процентах.
import { Counter } from 'ui.vue3.components.counter';
import { CounterSize, CounterStyle } from 'ui.cnt';
export const TaskProgress = {
name: 'TaskProgress',
components: {
Counter,
},
props: {
donePercent: {
type: Number,
default: 0,
},
},
setup()
{
return {
CounterSize,
CounterStyle,
};
},
template: `
<Counter
:value="donePercent"
:size="CounterSize.LARGE"
:style="CounterStyle.FILLED_SUCCESS"
percent
/>
`,
};
Связанные материалы
-
Кнопки ui.buttons — счетчик внутри кнопки.
-
Каталог объектов ui.entity-catalog — счетчик на группе каталога.
-
Расширения — подключение JavaScript-расширений Bitrix Framework.