module-no-smoking

0

Описание

Модуль "Отказ от курения" для 1С-Битрикс

https://bazarow.ru

Языки

  • JavaScript51,3%
  • PHP39,2%
  • CSS9,5%
7 дней назад
7 дней назад
7 дней назад
7 дней назад
7 дней назад
README.md

mibazarow.nosmoking

README написан LLM - я даже не читал. Все под вашу полную отвественность.

Стрим (запись): вайб-кодинг модуля для 1С-Битрикс

Модуль для 1C-Bitrix с компонентом

mibazarow:nosmoking.counter
, который показывает, сколько времени прошло с момента отказа от курения (дни, часы, минуты, секунды).

Возможности

  • Отображение прошедшего времени в формате: дни, часы, минуты, секунды.
  • Живое обновление таймера на клиенте каждую секунду (без перезагрузки страницы).
  • Корректные склонения единиц времени на русском языке.
  • Кастомный выбор даты и времени в параметрах компонента в визуальном редакторе Bitrix.
  • Проверка валидности даты (пустая дата, некорректный формат, дата в будущем).

Состав модуля

  • Модуль:
    mibazarow.nosmoking
  • Компонент:
    mibazarow:nosmoking.counter
  • Пространство имен PHP-классов:
    Mibazarow\Nosmoking
  • Текущая версия:
    1.0.0
    (см.
    install/version.php
    )

Требования

  • 1C-Bitrix (ядро D7, т.к. используется
    Bitrix\Main\Loader
    и
    Bitrix\Main\Type\DateTime
    ).
  • Установленный модуль
    mibazarow.nosmoking
    .

Установка

  1. Поместите папку модуля в:
    • /local/modules/mibazarow.nosmoking/
      или
    • /bitrix/modules/mibazarow.nosmoking/
  2. В административной части Bitrix откройте установку модулей и установите
    mibazarow.nosmoking
    .
  3. При установке копируется компонент в:
    • /local/components/mibazarow/nosmoking.counter/

Удаление

При удалении модуля:

  • модуль снимается с регистрации;
  • удаляется только папка компонента:
    • /local/components/mibazarow/nosmoking.counter/

Папка вендора

/local/components/mibazarow/
не удаляется, чтобы не затронуть другие компоненты.

Подключение компонента

Пример подключения в шаблоне/странице:

Параметры компонента

START_DATE

  • Тип:
    CUSTOM
  • Назначение: дата и время начала отсчета
  • Форматы, которые корректно обрабатываются на сервере:
    • d.m.Y H:i:s
      (типичный ввод в Bitrix)
    • Y-m-d H:i:s
    • Y-m-d

Если дата не задана или невалидна, компонент покажет сообщение об ошибке вместо таймера.

Что возвращает компонент

В шаблон передается

arResult
с основными ключами:

  • START_DATE
    - нормализованная дата старта
  • START_TS
    - timestamp старта
  • DAYS
    ,
    HOURS
    ,
    MINUTES
    ,
    SECONDS
  • TOTAL_SECONDS
  • UNITS
    - массив для отображения блоков с подписями
  • IS_VALID
    - флаг валидности исходной даты
  • ERROR
    - текст ошибки

Публичные классы

Mibazarow\Nosmoking\Module

  • getModuleId(): string
    - возвращает
    mibazarow.nosmoking
  • isInstalled(): bool
    - проверяет, подключается ли модуль через Loader

Mibazarow\Nosmoking\TimeHelper

  • calculate(string $startDate): array
    - считает прошедшее время
  • toTimestamp(string $startDate): int
    - конвертирует дату в UNIX timestamp
  • buildDisplayUnits(int $days, int $hours, int $minutes, int $seconds): array
    - готовит данные для вывода
  • pluralizeRu(int $n, string $one, string $few, string $many): string
    - склонение числительных

Локализация

Сейчас предусмотрены русские языковые файлы:

  • lang/ru/install/index.php
  • install/components/mibazarow/nosmoking.counter/lang/ru/component.php

Быстрая проверка после установки

  1. Добавьте компонент на тестовую страницу.
  2. Укажите
    START_DATE
    в прошлом времени.
  3. Убедитесь, что:
    • таймер отрисован;
    • секунды меняются каждую секунду;
    • подписи единиц времени склоняются корректно.

FAQ / частые ошибки

1) Ошибка: "Дата начала не задана"

Причина:

  • параметр
    START_DATE
    пустой;
  • значение не сохранилось в настройках компонента.

Что проверить:

  • в параметрах компонента заполнено поле "Дата начала отсчёта";
  • в коде при ручном подключении компонента передается непустой
    START_DATE
    .

2) Ошибка: "Дата начала не может быть в будущем"

Причина:

  • переданная дата больше текущего времени сервера;
  • сервер и ожидаемая локальная зона пользователя отличаются.

Что делать:

  • укажите дату/время в прошлом;
  • проверьте системное время и timezone на сервере;
  • проверьте timezone сайта в настройках Bitrix.

3) Ошибка: "Некорректный формат даты"

Причина:

  • строка даты не распознана PHP
    DateTime
    ;
  • используется нестандартный формат.

Рекомендуемые форматы:

  • d.m.Y H:i:s
  • Y-m-d H:i:s
  • Y-m-d

Примеры корректных значений:

  • 01.02.2026 08:30:00
  • 2026-02-01 08:30:00
  • 2026-02-01

4) Время на клиенте отличается от ожидаемого

Симптом:

  • после загрузки страницы значение отличается на несколько часов.

Почему так происходит:

  • сервер рассчитывает стартовую дату и передает timestamp;
  • браузер считает текущее время на стороне клиента;
  • при расхождении часовых поясов/времени устройства может быть визуальный сдвиг.

Рекомендации:

  • синхронизируйте timezone сервера, Bitrix и окружения разработки;
  • убедитесь, что время на устройстве пользователя выставляется автоматически;
  • для критичных сценариев фиксируйте единую бизнес-зону (например,
    Europe/Moscow
    ) на стороне сервера.

5) Нюанс с летним/зимним временем (DST)

Симптом:

  • в дни перехода может казаться, что произошло смещение на 1 час.

Что учесть:

  • используйте явные timezone-идентификаторы (
    Europe/Moscow
    ,
    UTC
    и т.д.);
  • избегайте неоднозначных локальных строк без часового пояса в интеграционных сценариях.

6) Как диагностировать проблему быстро

Минимальный чек-лист:

  1. Проверить фактический
    START_DATE
    в параметрах компонента.
  2. Сверить время сервера (
    date
    ), PHP timezone и timezone сайта Bitrix.
  3. Проверить время и timezone в браузере/ОС клиента.
  4. Временно установить
    START_DATE
    в формате
    Y-m-d H:i:s
    и проверить результат.

Лицензия

ХЗ какая это лицензия. Делайте с кодом что хотите, в любом месте Вселенной