☕ Кофе && Код 📝
Работа с датами и временем через Bitrix\Main\Type\DateTime
Проблема
Разработчики часто используют стандартные PHP функции для работы с датами, что приводит к проблемам с часовыми поясами и несоответствием форматов в разных частях системы.
Решение
Класс Bitrix\Main\Type\DateTime решает эти проблемы:
• Создание дат из различных источников: строк, timestamp, PHP DateTime
• Автоматическое преобразование между серверным и пользовательским временем через методы toUserTime()
• Форматирование с учетом конфига сайта через toString()
• Удобные методы модификации: add() для добавления интервалов, setTime() и setDate() для установки значений
• Корректное сравнение объектов дат
Итог
Класс DateTime обеспечивает единообразную работу с датами во всей системе Битрикс, автоматически учитывает настройки часовых поясов пользователей. Используйте его вместо стандартных PHP функций.
Читать полностью с примерами кода: https://bxmax.ru/coffee-code/rabota-s-datami-i-vremenem-cherez-bitrix-main-type-datetime
Работа с датами и временем через Bitrix\Main\Type\DateTime
Проблема
Разработчики часто используют стандартные PHP функции для работы с датами, что приводит к проблемам с часовыми поясами и несоответствием форматов в разных частях системы.
Решение
Класс Bitrix\Main\Type\DateTime решает эти проблемы:
• Создание дат из различных источников: строк, timestamp, PHP DateTime
• Автоматическое преобразование между серверным и пользовательским временем через методы toUserTime()
• Форматирование с учетом конфига сайта через toString()
• Удобные методы модификации: add() для добавления интервалов, setTime() и setDate() для установки значений
• Корректное сравнение объектов дат
Итог
Класс DateTime обеспечивает единообразную работу с датами во всей системе Битрикс, автоматически учитывает настройки часовых поясов пользователей. Используйте его вместо стандартных PHP функций.
Читать полностью с примерами кода: https://bxmax.ru/coffee-code/rabota-s-datami-i-vremenem-cherez-bitrix-main-type-datetime
👍10🔥5✍2🤝1
Коллеги!
Запускаем рубрику «Совет на обед» 🍽️ , где хочу поделиться своими размышлениями, исходя из опыта работы на множестве проектов. Советы, которые будут относиться не к коду как таковому, а к процессам разработки. Буду рад обсудить в комментариях, что вы думаете по этим вопросам.
Совет #1: Не редактируйте код через админку - даже на локальном сервере разработки
Знаю, админка Bitrix соблазняет: «Настройки компонента» → «Редактировать шаблон» → и ты уже правишь PHP прямо в браузере. Даже на собесах встречал разработчиков, которые говорили "ща пример кода в админке покажу" (и полбеды если не на проде).
Почему это плохо:
1. Git не увидит изменения — если вы работаете в IDE, а правите в админке, ваш коммит будет неполным. Потом будете искать «а где я это менял?». Ну и, если меняли на проде, словите в итоге конфликт.
2. Нет подсветки синтаксиса и автодополнения — textarea в браузере не знает про PSR, не подсветит ошибку, не подскажет метод класса
3. Нет форматирования — забудьте про автоотступы, выравнивание и code style. Код превращается в кашу
4. Нет истории изменений — Ctrl(Cmd)+Z работает только пока вкладка открыта. Закрыли браузер — всё, история потеряна
5. Легко сломать — один лишний символ, и белый экран. А бэкапа нет
⚠️ Всегда открывайте файлы в IDE. Даже если «надо поправить одну строчку». Путь к файлу видно в админке — скопируйте его и откройте нормально.
⌨️ Ctrl(Cmd)+Shift+O в PHPStorm
⌨️ Ctrl(Cmd)+P в VSCode
Дисциплина в мелочах = стабильность в проекте
#bitrix #битрикс #разработка #совет_на_обед
Запускаем рубрику «Совет на обед» 🍽️ , где хочу поделиться своими размышлениями, исходя из опыта работы на множестве проектов. Советы, которые будут относиться не к коду как таковому, а к процессам разработки. Буду рад обсудить в комментариях, что вы думаете по этим вопросам.
Совет #1: Не редактируйте код через админку - даже на локальном сервере разработки
Знаю, админка Bitrix соблазняет: «Настройки компонента» → «Редактировать шаблон» → и ты уже правишь PHP прямо в браузере. Даже на собесах встречал разработчиков, которые говорили "ща пример кода в админке покажу" (и полбеды если не на проде).
Почему это плохо:
1. Git не увидит изменения — если вы работаете в IDE, а правите в админке, ваш коммит будет неполным. Потом будете искать «а где я это менял?». Ну и, если меняли на проде, словите в итоге конфликт.
2. Нет подсветки синтаксиса и автодополнения — textarea в браузере не знает про PSR, не подсветит ошибку, не подскажет метод класса
3. Нет форматирования — забудьте про автоотступы, выравнивание и code style. Код превращается в кашу
4. Нет истории изменений — Ctrl(Cmd)+Z работает только пока вкладка открыта. Закрыли браузер — всё, история потеряна
5. Легко сломать — один лишний символ, и белый экран. А бэкапа нет
⚠️ Всегда открывайте файлы в IDE. Даже если «надо поправить одну строчку». Путь к файлу видно в админке — скопируйте его и откройте нормально.
⌨️ Ctrl(Cmd)+Shift+O в PHPStorm
⌨️ Ctrl(Cmd)+P в VSCode
/local/templates/.default/components/bitrix/news.list/my_template/template.php
Дисциплина в мелочах = стабильность в проекте
#bitrix #битрикс #разработка #совет_на_обед
👍11🔥4🤝1🫡1
☕ Кофе && Код 📝
Контроль дневных лимитов SMS через Limitation
Проблема
При массовой отправке SMS легко превысить дневные лимиты провайдера, что приводит к блокировке или дополнительным расходам. Нужен контроль количества отправленных сообщений.
Решение
Модуль messageservice содержит класс Limitation для управления лимитами. Метод setDailyLimit() устанавливает лимит для провайдера и номера. Метод getDailyLimits() показывает текущее состояние. Метод checkDailyLimit() проверяет доступность отправки. При превышении лимита сообщения автоматически откладываются до следующего дня.
Итог
Класс Limitation обеспечивает централизованный контроль над количеством SMS и защищает от превышения квот провайдеров.
Читать полностью с примерами кода: https://bxmax.ru/coffee-code/kontrol-dnevnyh-limitov-sms-cherez-limitation
Контроль дневных лимитов SMS через Limitation
Проблема
При массовой отправке SMS легко превысить дневные лимиты провайдера, что приводит к блокировке или дополнительным расходам. Нужен контроль количества отправленных сообщений.
Решение
Модуль messageservice содержит класс Limitation для управления лимитами. Метод setDailyLimit() устанавливает лимит для провайдера и номера. Метод getDailyLimits() показывает текущее состояние. Метод checkDailyLimit() проверяет доступность отправки. При превышении лимита сообщения автоматически откладываются до следующего дня.
Итог
Класс Limitation обеспечивает централизованный контроль над количеством SMS и защищает от превышения квот провайдеров.
Читать полностью с примерами кода: https://bxmax.ru/coffee-code/kontrol-dnevnyh-limitov-sms-cherez-limitation
👍7🔥4✍1🤝1
«Совет на обед» 🍽️ #2: Используйте git — даже если разрабатываете в одиночку
«Я один на проекте, зачем мне git?» — слышу регулярно. А потом: «Вчера всё работало, я что-то поменял, теперь белый экран, и я не помню что именно».
Почему git нужен даже соло-разработчику:
1. История изменений — ваша машина времени — можно посмотреть, что было неделю назад, и понять, какое изменение всё сломало. git diff и git log — наши спасательные круги
2. Откат за секунды — сломал что-то? git checkout . или git reset --hard — и ты снова в рабочем состоянии. Без git придётся восстанавливать из бэкапа (если он есть)
3. Эксперименты без страха — хочешь попробовать новый подход? Создай ветку, экспериментируй. Не получилось — просто удалил ветку. Получилось — смержил
4. Понятно, что деплоить — git status покажет все изменённые файлы. Не забудешь залить важный файл, не зальёшь лишний
5. Переход в команду — проект вырос, нужен второй разработчик. С git — добавили человека и работаете. Без git — боль и хаос
💡 Минимальный воркфлоу:
Три команды. Даже если никогда не будете делать ветки и PR — уже получите историю и возможность отката.
⚠️ Важно: Коммитьте осмысленно и регулярно. Один коммит = одна логическая задача. «Сделал фичу за день» — это 3-5 коммитов, а не один гигантский. В прод потом можно сделать squash в рамках фичи. И не храните в репозитории ядро Битрикса ( /bitrix/ ) — "здесь у вас нет власти" ©
Git — это не про командную работу. Это про контроль над своим кодом.
#bitrix #битрикс #разработка #совет_на_обед
«Я один на проекте, зачем мне git?» — слышу регулярно. А потом: «Вчера всё работало, я что-то поменял, теперь белый экран, и я не помню что именно».
Почему git нужен даже соло-разработчику:
1. История изменений — ваша машина времени — можно посмотреть, что было неделю назад, и понять, какое изменение всё сломало. git diff и git log — наши спасательные круги
2. Откат за секунды — сломал что-то? git checkout . или git reset --hard — и ты снова в рабочем состоянии. Без git придётся восстанавливать из бэкапа (если он есть)
3. Эксперименты без страха — хочешь попробовать новый подход? Создай ветку, экспериментируй. Не получилось — просто удалил ветку. Получилось — смержил
4. Понятно, что деплоить — git status покажет все изменённые файлы. Не забудешь залить важный файл, не зальёшь лишний
5. Переход в команду — проект вырос, нужен второй разработчик. С git — добавили человека и работаете. Без git — боль и хаос
💡 Минимальный воркфлоу:
git init
git add .
git commit -m "feat: добавил форму обратной связи"
Три команды. Даже если никогда не будете делать ветки и PR — уже получите историю и возможность отката.
⚠️ Важно: Коммитьте осмысленно и регулярно. Один коммит = одна логическая задача. «Сделал фичу за день» — это 3-5 коммитов, а не один гигантский. В прод потом можно сделать squash в рамках фичи. И не храните в репозитории ядро Битрикса ( /bitrix/ ) — "здесь у вас нет власти" ©
Git — это не про командную работу. Это про контроль над своим кодом.
#bitrix #битрикс #разработка #совет_на_обед
👍13🔥4🤝2
«Совет на обед» 🍽️ #3: Документируйте решения, а не только код
Код отвечает на вопрос «как». Но через полгода вы откроете проект и спросите себя: «Почему мы сделали именно так?» И ответа не будет.
Знакомые ситуации:
1. «Зачем тут костыль?» — кто-то написал странный workaround. Причина забыта, удалить страшно, оставить стыдно. А может, там был критичный баг в API Битрикса?
2. «Почему не использовали инфоблоки?» — в проекте своя таблица для каталога. Было решение с обоснованием, но его никто не записал. Теперь каждый новый разработчик задаёт этот вопрос
3. «Кто это согласовал?» — интеграция работает через костыль. Заказчик уверен, что просил по-другому. Доказательств нет
💡 Решение — ADR (Architecture Decision Records):
Простой markdown-файл на каждое важное решение:
🎯 Что документировать:
- Выбор архитектуры (почему Highload-блоки, а не ORM)
- Отказ от стандартных решений (свой кэш вместо встроенного)
- Интеграции (почему REST, а не webhook)
- Костыли с пояснением (обход бага в конкретной версии)
Где хранить: Папка /docs/adr/ в репозитории на уровне строго(!) выше корня сайта. Рядом с кодом, в git, с историей изменений.
Лайфхак: Не пишите ADR на всё подряд. Только на решения, которые вызовут вопрос «почему?» через полгода. Если объяснение занимает 5 минут устно — запишите его один раз письменно.
Код устаревает. Документация решений остаётся актуальной, пока живёт проект.
#bitrix #битрикс #совет_на_обед #adr
Код отвечает на вопрос «как». Но через полгода вы откроете проект и спросите себя: «Почему мы сделали именно так?» И ответа не будет.
Знакомые ситуации:
1. «Зачем тут костыль?» — кто-то написал странный workaround. Причина забыта, удалить страшно, оставить стыдно. А может, там был критичный баг в API Битрикса?
2. «Почему не использовали инфоблоки?» — в проекте своя таблица для каталога. Было решение с обоснованием, но его никто не записал. Теперь каждый новый разработчик задаёт этот вопрос
3. «Кто это согласовал?» — интеграция работает через костыль. Заказчик уверен, что просил по-другому. Доказательств нет
💡 Решение — ADR (Architecture Decision Records):
Простой markdown-файл на каждое важное решение:
# ADR-001: Хранение каталога в отдельной таблице
## Статус
Принято (2024-03-15)
## Контекст
Каталог содержит 500 000 товаров с частым обновлением цен
## Решение
Используем отдельную таблицу вместо инфоблоков
## Причины
- Инфоблоки тормозят при таком объёме
- Нужны специфичные индексы
- Импорт через API 1С требует скорости
## Последствия
- Теряем стандартные компоненты Битрикса
- Нужно писать свой CRUD
- Выигрыш в скорости: ~10x на выборках
🎯 Что документировать:
- Выбор архитектуры (почему Highload-блоки, а не ORM)
- Отказ от стандартных решений (свой кэш вместо встроенного)
- Интеграции (почему REST, а не webhook)
- Костыли с пояснением (обход бага в конкретной версии)
Где хранить: Папка /docs/adr/ в репозитории на уровне строго(!) выше корня сайта. Рядом с кодом, в git, с историей изменений.
Лайфхак: Не пишите ADR на всё подряд. Только на решения, которые вызовут вопрос «почему?» через полгода. Если объяснение занимает 5 минут устно — запишите его один раз письменно.
Код устаревает. Документация решений остаётся актуальной, пока живёт проект.
#bitrix #битрикс #совет_на_обед #adr
👍10🔥4🤝1
🎯 AJAX-контроллеры в Битрикс: модули и компоненты
AJAX-запросы — основа современного интерфейса. Но в каждом втором проекте я вижу ajax.php с кучей if-else и ручной проверкой токенов. Давайте уже закроем эту тему для себя окончательно 😄
Подробный гайд по контроллерам — встроенному механизму для обработки AJAX:
• Контроллеры в модулях — отдельные классы с экшенами
• Контроллеры в компонентах — интерфейс Controllerable и ajax.php
• Подписанные параметры — передача настроек компонента в AJAX
• Фильтры безопасности — CSRF, авторизация, HTTP-методы
Что внутри статьи:
→ Структура модуля с контроллером
→ Настройка .settings.php для маршрутизации
→ Вызов экшенов через BX.ajax.runAction
→ Атрибуты PHP 8 вместо configureActions
→ Отдача файлов и постраничная навигация
→ Полный пример — система «Избранное»
Один контроллер вместо десятка костылей 🔥
Читать с примерами кода: https://bxmax.ru/blog/ajax-zaprosy-v-bitriks-kontrollery-v-modulyah-i-komponentah
⬇️ Готовые примеры контроллеров — в первом комментарии!
AJAX-запросы — основа современного интерфейса. Но в каждом втором проекте я вижу ajax.php с кучей if-else и ручной проверкой токенов. Давайте уже закроем эту тему для себя окончательно 😄
Подробный гайд по контроллерам — встроенному механизму для обработки AJAX:
• Контроллеры в модулях — отдельные классы с экшенами
• Контроллеры в компонентах — интерфейс Controllerable и ajax.php
• Подписанные параметры — передача настроек компонента в AJAX
• Фильтры безопасности — CSRF, авторизация, HTTP-методы
Что внутри статьи:
→ Структура модуля с контроллером
→ Настройка .settings.php для маршрутизации
→ Вызов экшенов через BX.ajax.runAction
→ Атрибуты PHP 8 вместо configureActions
→ Отдача файлов и постраничная навигация
→ Полный пример — система «Избранное»
Один контроллер вместо десятка костылей 🔥
Читать с примерами кода: https://bxmax.ru/blog/ajax-zaprosy-v-bitriks-kontrollery-v-modulyah-i-komponentah
⬇️ Готовые примеры контроллеров — в первом комментарии!
👍9🔥8✍1
Битрикс × ИИ: Реанимация проекта 🤖
Реанимируем наш спецпроект по сравнению LLM в разработке на 1С-Битрикс, который начали еще летом. Мир ИИ меняется слишком быстро, поэтому решил всё полностью переработать.
Что нового:
• Единый бенчмарк: Каждая модель получает идентичное ТЗ и оценивается по строгим критериям (D7, архитектура, чистота кода).
• Актуальность: Старые исследования удалены. Задания и критерии проверки переписаны с нуля под современные реалии Битрикс.
• Живой рейтинг: Будем обновлять таблицу по мере выхода новых моделей и апдейтов.
Стартуем с Gemini 3 Flash Preview ⚡️
Первой в обновленном тесте стала свежая модель от Google. Несмотря на статус «бюджетной», она показала на удивление отличный результат. На сегодняшний момент это идеальное сочетание цены, скорости и качества генерации кода под Битрикс. Отлично подойдёт для написания компонентов и небольших модулей.
Планы:
В течение недели буду закидывать обновления по другим актуальным моделям. Следите за рейтингом!
👉 https://bxmax.ru/bitrix-ai
Реанимируем наш спецпроект по сравнению LLM в разработке на 1С-Битрикс, который начали еще летом. Мир ИИ меняется слишком быстро, поэтому решил всё полностью переработать.
Что нового:
• Единый бенчмарк: Каждая модель получает идентичное ТЗ и оценивается по строгим критериям (D7, архитектура, чистота кода).
• Актуальность: Старые исследования удалены. Задания и критерии проверки переписаны с нуля под современные реалии Битрикс.
• Живой рейтинг: Будем обновлять таблицу по мере выхода новых моделей и апдейтов.
Стартуем с Gemini 3 Flash Preview ⚡️
Первой в обновленном тесте стала свежая модель от Google. Несмотря на статус «бюджетной», она показала на удивление отличный результат. На сегодняшний момент это идеальное сочетание цены, скорости и качества генерации кода под Битрикс. Отлично подойдёт для написания компонентов и небольших модулей.
Планы:
В течение недели буду закидывать обновления по другим актуальным моделям. Следите за рейтингом!
👉 https://bxmax.ru/bitrix-ai
🔥10👍4❤1🤝1
☕ Кофе && Код 📝
Обновление свойств и количества товаров в корзине Bitrix через Sale API
Проблема
При разработке на 1С-Битрикс часто возникает задача программного изменения товаров в корзине.
Решение
Необходимо использовать современное API модуля
Итог
Работа через объектную модель
Читать полностью с примерами кода: https://bxmax.ru/coffee-code/obnovlenie-svoystv-i-kolichestva-tovarov-v-korzine-bitrix-cherez-sale-api
Обновление свойств и количества товаров в корзине Bitrix через Sale API
Проблема
При разработке на 1С-Битрикс часто возникает задача программного изменения товаров в корзине.
Решение
Необходимо использовать современное API модуля
sale и объектную модель Bitrix\Sale\Basket. Сначала загружается корзина текущего пользователя по его FUser ID. Затем в коллекции находится нужный элемент BasketItem. Через методы объекта можно безопасно менять количество товара и управлять его свойствами с помощью коллекции PropertyCollection. Завершающим этапом является вызов метода save(), который автоматически запускает все необходимые внутренние пересчеты системы.Итог
Работа через объектную модель
BasketItem обеспечивает целостность данных и корректную работу маркетинговых правил при любых манипуляциях с составом корзины.Читать полностью с примерами кода: https://bxmax.ru/coffee-code/obnovlenie-svoystv-i-kolichestva-tovarov-v-korzine-bitrix-cherez-sale-api
👍8✍3🔥3
«Совет на обед» 🍽️ #4: Используйте миграции для изменения структуры БД
«Я создал свойство в инфоблоке на локалке, а на проде забыл» — классика боли в Bitrix-разработке. Миграции нужны всегда, даже если вы работаете в одиночку. Как только у проекта появляется больше одного окружения (local, dev, prod), ручное управление базой данных превращается в кошмар.
Почему миграции — это мастхэв:
1. Синхронизация состояний БД — каждый разработчик просто запускает команду, и его база обновляется до актуального состояния. Никаких «скинь дамп БД».
2. Версионирование изменений — вы точно знаете, когда и зачем было добавлено то или иное поле, создана таблица или изменён Highload-блок.
3. Автоматизация деплоя — миграции накатываются автоматически при деплое. Это исключает человеческий фактор: забыли нажать галку — сломали сайт.
💡 Решение:
К сожалению, в Bitrix до сих пор нет штатного механизма миграций «из коробки». Поэтому sprint.migration на сегодняшний день — это стандарт де-факто. Он умеет версионировать почти всё: инфоблоки, свойства, HL-блоки, пользовательские поля, почтовые события и даже настройки модулей.
Модуль на Маркетплейсе
🎯 Золотое правило: Всегда реализуйте `up()` и `down()`
Многие пишут только метод up(), считая, что откат не понадобится. Это ошибка.
- Зачем нужен `down()`: Если вы переключились на другую ветку, где этой структуры ещё нет, или если деплой пошёл не так и нужно быстро откатиться к предыдущему стабильному состоянию.
- Дисциплина: Если вы не можете написать откат для своей миграции, возможно, она делает слишком много. Разделяйте сложные изменения на несколько простых.
Используйте конструктор миграций в админке sprint.migration. Он сам сгенерирует код для создания инфоблока или свойства, вам останется только проверить его и закоммитить. Для сложной логики или кастомных случаев - пишем руками.
Миграции — это не дополнительная работа, это страховка вашего спокойствия.
#bitrix #битрикс #разработка #совет_на_обед #бд #миграции #sprintmigration
«Я создал свойство в инфоблоке на локалке, а на проде забыл» — классика боли в Bitrix-разработке. Миграции нужны всегда, даже если вы работаете в одиночку. Как только у проекта появляется больше одного окружения (local, dev, prod), ручное управление базой данных превращается в кошмар.
Почему миграции — это мастхэв:
1. Синхронизация состояний БД — каждый разработчик просто запускает команду, и его база обновляется до актуального состояния. Никаких «скинь дамп БД».
2. Версионирование изменений — вы точно знаете, когда и зачем было добавлено то или иное поле, создана таблица или изменён Highload-блок.
3. Автоматизация деплоя — миграции накатываются автоматически при деплое. Это исключает человеческий фактор: забыли нажать галку — сломали сайт.
💡 Решение:
К сожалению, в Bitrix до сих пор нет штатного механизма миграций «из коробки». Поэтому sprint.migration на сегодняшний день — это стандарт де-факто. Он умеет версионировать почти всё: инфоблоки, свойства, HL-блоки, пользовательские поля, почтовые события и даже настройки модулей.
Модуль на Маркетплейсе
🎯 Золотое правило: Всегда реализуйте `up()` и `down()`
Многие пишут только метод up(), считая, что откат не понадобится. Это ошибка.
- Зачем нужен `down()`: Если вы переключились на другую ветку, где этой структуры ещё нет, или если деплой пошёл не так и нужно быстро откатиться к предыдущему стабильному состоянию.
- Дисциплина: Если вы не можете написать откат для своей миграции, возможно, она делает слишком много. Разделяйте сложные изменения на несколько простых.
Используйте конструктор миграций в админке sprint.migration. Он сам сгенерирует код для создания инфоблока или свойства, вам останется только проверить его и закоммитить. Для сложной логики или кастомных случаев - пишем руками.
Миграции — это не дополнительная работа, это страховка вашего спокойствия.
#bitrix #битрикс #разработка #совет_на_обед #бд #миграции #sprintmigration
👍9🔥5
Где название свойства?
Один из подписчиков у меня сегодня спросил: есть стандартный код на D7 для получения элементов с множественным свойством (например, «Автор»):
Значения мы получаем без проблем. Но как красиво вытащить название самого свойства («Автор»), не делая при этом отдельный запрос к таблице свойств по ID?
Очевидный путь — дёрнуть PropertyTable::getList, но это лишнее обращение к БД. Я крутил варианты полчаса, чтобы найти способ сделать это через уже имеющийся объект сущности.
Оказывается, можно пролезть через такую цепочку:
Мы обращаемся к полю сущности, из него получаем объект свойства инфоблока и уже у него берём имя. Работает быстро и без «костылей» в коде. Хотя цепочка неоднозначно длинная получилась 🥴
Я, честно говоря, первый раз столкнулся с необходимостью именно такого пути. Если кто-то знал такой вариант или знает, как сделать ещё проще/правильнее — поделитесь в комментариях?
Один из подписчиков у меня сегодня спросил: есть стандартный код на D7 для получения элементов с множественным свойством (например, «Автор»):
use Bitrix\Iblock\Elements\ElementNewsTable;
use Bitrix\Iblock\Elements\EO_ElementNews_Entity;
use Bitrix\Main\Loader;
Loader::includeModule('iblock');
$elements = ElementNewsTable::getList([
'select' => [
'ID',
'NAME',
'CODE',
'AUTHOR' // Множественное свойство
],
'filter' => [
'ACTIVE' => 'Y'
]
])->fetchCollection();
/** @var EO_ElementNews_Entity $element */
foreach ($elements as $element) {
$authors = $element->get('AUTHOR')->getAll();
foreach ($authors as $author) {
echo $author->getValue() . '<br/>';
}
}
Значения мы получаем без проблем. Но как красиво вытащить название самого свойства («Автор»), не делая при этом отдельный запрос к таблице свойств по ID?
Очевидный путь — дёрнуть PropertyTable::getList, но это лишнее обращение к БД. Я крутил варианты полчаса, чтобы найти способ сделать это через уже имеющийся объект сущности.
Оказывается, можно пролезть через такую цепочку:
$fieldTitle = $element->entity->getField('AUTHOR')->getIblockElementProperty()->getName();
Мы обращаемся к полю сущности, из него получаем объект свойства инфоблока и уже у него берём имя. Работает быстро и без «костылей» в коде. Хотя цепочка неоднозначно длинная получилась 🥴
Я, честно говоря, первый раз столкнулся с необходимостью именно такого пути. Если кто-то знал такой вариант или знает, как сделать ещё проще/правильнее — поделитесь в комментариях?
👍12🔥1🤝1
Битрикс × ИИ: Anthropic: Claude Opus 4.5
Пребываю немного в шоке от продолжения эксперимента.
Вчера пытался добиться хоть каких-то результатов от свежевыпущенной день назад китайской Z.AI: GLM 4.7. В итоге она проработала 17 минут над модулем, создала франкенштейна, которого сама же не смогла исправить за 10 итераций.
Аналогично запустил на этом тесте OpenAI: GPT-5.1 Codex Max. Работал быстрее и, примерно минут через 7, выдал хоть и нерабочий, но более адекватный результат. Однако и он не смог исправить проблемы за 10 итераций.
Поэтому обе модели не попали в рейтинг.
Мой фаворит (до выхода Gemini 3 Flash) в разработке Claude Opus 4.5, самая топовая модель Anthropic, прошёл тест довольно неплохо. Однако, если учитывать его цену (5$ / 20$ за млн токенов на ввод/вывод) и кол-во правок - он значительно уступает Gemini 3 Flash (54 балла против 79).
Я считаю, что он хорошо подходит для режима планирования задачи. А рабочей лошадкой использовать Gemini 3 Flash.
Смотрим подробный разбор на сайте: https://bxmax.ru/bitrix-ai/claude-opus-4-5
А что используете в повседневной работе вы? Может есть предложение протестировать конкретную модель?
В ближайших планах: Grok Code, Gemini 3 Pro, GPT-5.2, Claude Sonnet 4.5
Пребываю немного в шоке от продолжения эксперимента.
Вчера пытался добиться хоть каких-то результатов от свежевыпущенной день назад китайской Z.AI: GLM 4.7. В итоге она проработала 17 минут над модулем, создала франкенштейна, которого сама же не смогла исправить за 10 итераций.
Аналогично запустил на этом тесте OpenAI: GPT-5.1 Codex Max. Работал быстрее и, примерно минут через 7, выдал хоть и нерабочий, но более адекватный результат. Однако и он не смог исправить проблемы за 10 итераций.
Поэтому обе модели не попали в рейтинг.
Мой фаворит (до выхода Gemini 3 Flash) в разработке Claude Opus 4.5, самая топовая модель Anthropic, прошёл тест довольно неплохо. Однако, если учитывать его цену (5$ / 20$ за млн токенов на ввод/вывод) и кол-во правок - он значительно уступает Gemini 3 Flash (54 балла против 79).
Я считаю, что он хорошо подходит для режима планирования задачи. А рабочей лошадкой использовать Gemini 3 Flash.
Смотрим подробный разбор на сайте: https://bxmax.ru/bitrix-ai/claude-opus-4-5
А что используете в повседневной работе вы? Может есть предложение протестировать конкретную модель?
В ближайших планах: Grok Code, Gemini 3 Pro, GPT-5.2, Claude Sonnet 4.5
BXMax
Claude Opus 4.5 - Битрикс × ИИ - BXMax
Детальный анализ AI модели Claude Opus 4.5 в разработке на 1С-Битрикс. Баллы: 54/100
🔥9👍5👏2🤝1
«Совет на обед» 🍽️ #5: Техдолг — когда «костыль» становится памятником архитектуры
«Мы это потом поправим, сейчас нужно, чтобы просто заработало» — самая большая ложь, которую разработчик говорит себе и заказчику. В проектах такие «временные» решения имеют свойство превращаться в костыли, на которых спустя год держится вся архитектура.
Чем опасен бесконтрольный техдолг:
1. «Эффект зыбучих песков» — каждая новая фича внедряется всё дольше и сложнее, потому что вам приходится обходить старые костыли.
2. Страх рефакторинга — код становится настолько запутанным, что команда боится его трогать: «Работает — не лезь». В итоге система перестает развиваться.
3. Сложный онбординг — новый разработчик тратит недели на то, чтобы понять, почему данные передаются через глобальный массив или почему инфоблок используется не по назначению.
💡 Как с этим жить:
Полностью избежать техдолга невозможно (бизнес требует скорости), но его нужно инвентаризировать:
* Помечайте костыли в коде: Используйте @todo с указанием даты и фамилии. Современные IDE легко соберут вам список всех таких мест.
* Заводите задачи в бэклог: Если вы написали грязный хак, чтобы закрыть дедлайн — создайте задачу на рефакторинг сразу же. Опишите, что именно сделано плохо и как должно быть.
* Правило «Бойскаута»: Оставляйте код чище, чем он был до вас. Если вы пришли править баг и увидели рядом мелкий техдолг — исправьте его по пути.
🎯 Золотое правило: Костыль без документации — это мина замедленного действия
Если пришлось сделать «грязно» — напишите в комментарии ПОЧЕМУ это было сделано (например: «API Битрикса в версии 25.0 выдает ошибку X, ждем патча»).
Лайфхак: Раз в квартал устраивайте «день уборки». Выбирайте самые раздражающие куски техдолга и вычищайте их. Это сильно поднимает моральный дух команды и ускоряет будущую разработку.
#bitrix #битрикс #разработка #совет_на_обед #техдолг #clean_code
«Мы это потом поправим, сейчас нужно, чтобы просто заработало» — самая большая ложь, которую разработчик говорит себе и заказчику. В проектах такие «временные» решения имеют свойство превращаться в костыли, на которых спустя год держится вся архитектура.
Чем опасен бесконтрольный техдолг:
1. «Эффект зыбучих песков» — каждая новая фича внедряется всё дольше и сложнее, потому что вам приходится обходить старые костыли.
2. Страх рефакторинга — код становится настолько запутанным, что команда боится его трогать: «Работает — не лезь». В итоге система перестает развиваться.
3. Сложный онбординг — новый разработчик тратит недели на то, чтобы понять, почему данные передаются через глобальный массив или почему инфоблок используется не по назначению.
💡 Как с этим жить:
Полностью избежать техдолга невозможно (бизнес требует скорости), но его нужно инвентаризировать:
* Помечайте костыли в коде: Используйте @todo с указанием даты и фамилии. Современные IDE легко соберут вам список всех таких мест.
* Заводите задачи в бэклог: Если вы написали грязный хак, чтобы закрыть дедлайн — создайте задачу на рефакторинг сразу же. Опишите, что именно сделано плохо и как должно быть.
* Правило «Бойскаута»: Оставляйте код чище, чем он был до вас. Если вы пришли править баг и увидели рядом мелкий техдолг — исправьте его по пути.
🎯 Золотое правило: Костыль без документации — это мина замедленного действия
Если пришлось сделать «грязно» — напишите в комментарии ПОЧЕМУ это было сделано (например: «API Битрикса в версии 25.0 выдает ошибку X, ждем патча»).
Лайфхак: Раз в квартал устраивайте «день уборки». Выбирайте самые раздражающие куски техдолга и вычищайте их. Это сильно поднимает моральный дух команды и ускоряет будущую разработку.
#bitrix #битрикс #разработка #совет_на_обед #техдолг #clean_code
👍6🔥3🤝2
Проблема двух ядер: Как не сойти с ума? 🤯
Почему в 2025 году мы всё еще видим $DB->Query() в Битрикс-проектах? И как разработчику писать современный код, когда вокруг «легаси-болото»?
В новом посте-мнении разбираем:
• Почему старое ядро никак не умрет (спойлер: это экономика).
• Стратегию выживания: правило бойскаута и изоляция легаси.
• Как Service Locator помогает строить мосты между «старым» и «новым».
Если вы устали от спагетти-кода и хотите стать настоящим архитектором, этот текст для вас.
🔗 https://bxmax.ru/blog/problema-dvuh-yader-kak-ne-soyti-s-uma-pri-podderzhke-bitriks-proektov-v-2026-godu
#bitrix #legacy #architecture #d7 #development
Почему в 2025 году мы всё еще видим $DB->Query() в Битрикс-проектах? И как разработчику писать современный код, когда вокруг «легаси-болото»?
В новом посте-мнении разбираем:
• Почему старое ядро никак не умрет (спойлер: это экономика).
• Стратегию выживания: правило бойскаута и изоляция легаси.
• Как Service Locator помогает строить мосты между «старым» и «новым».
Если вы устали от спагетти-кода и хотите стать настоящим архитектором, этот текст для вас.
🔗 https://bxmax.ru/blog/problema-dvuh-yader-kak-ne-soyti-s-uma-pri-podderzhke-bitriks-proektov-v-2026-godu
#bitrix #legacy #architecture #d7 #development
👍8🔥5🤝3
«Совет на обед» 🍽️ #6: Логи в «одном окне» — прекратите играть в детектива
Поиск причины ошибки в Bitrix-проекте часто превращается в квест: что-то упало в системном error_log, что-то записалось в bitrix/modules/main.log, а что-то разработчик интеграции заботливо сложил в log_txt_123.log в корне сайта. Если у вас больше одного источника правды — у вас нет ни одного.
В чем боль разрозненных логов:
1. Потеря времени: Вы тратите 20 минут на поиск места, где залогирована ошибка, вместо того чтобы её чинить.
2. Игнорирование критических багов: Если ошибка пишется в файл, который никто не открывает, она «не существует», пока не позвонит разгневанный клиент.
3. Разрыв контекста: Тяжело сопоставить события в БД с событиями в файловой системе.
💡 Как навести порядок штатно:
Многие забывают, что в D7 уже есть полноценная поддержка стандарта PSR-3. Не нужно изобретать велосипеды или сразу тащить Monolog:
* Используйте `Bitrix\Main\Diag\Logger`: Это штатный механизм. Вы можете настроить разные логгеры (файлы, syslog) для разных модулей прямо в .settings.php.
* Забудьте про `AddMessage2Log`: Это легаси-путь. Современный подход — получать логгер через Logger::create('имя_канала').
* Контекст решает: Штатные логгеры позволяют передавать массив контекста. Пустая фраза «Ошибка оплаты» бесполезна. Передавайте ['orderId' => 123, 'user' => 45], и Битрикс сам разложит это в читаемый вид (или в JSON, если настроите `JsonLinesFormatter`).
* Безопасность прежде всего: Никогда не храните файлы логов внутри DOCUMENT_ROOT. Даже если вы назвали файл log_hidden_123.txt, его можно подобрать или найти через индексацию. Храните логи на уровень выше корня сайта. Если это невозможно — закройте директорию через .htaccess или настройки Nginx.
🎯 Золотое правило: Логи — это инструмент мониторинга, а не свалка «на всякий случай»
Лайфхак: В .settings.php можно настроить логгер так, что он будет писать ошибки в разные файлы в зависимости от уровня (например, debug.log для всего и critical.log только для проблем, требующих срочного реагирования). Это позволяет не тонуть в мусоре при разборе полетов.
#bitrix #битрикс #logging #PSR3 #разработка #совет_на_обед #D7 #clean_code
Поиск причины ошибки в Bitrix-проекте часто превращается в квест: что-то упало в системном error_log, что-то записалось в bitrix/modules/main.log, а что-то разработчик интеграции заботливо сложил в log_txt_123.log в корне сайта. Если у вас больше одного источника правды — у вас нет ни одного.
В чем боль разрозненных логов:
1. Потеря времени: Вы тратите 20 минут на поиск места, где залогирована ошибка, вместо того чтобы её чинить.
2. Игнорирование критических багов: Если ошибка пишется в файл, который никто не открывает, она «не существует», пока не позвонит разгневанный клиент.
3. Разрыв контекста: Тяжело сопоставить события в БД с событиями в файловой системе.
💡 Как навести порядок штатно:
Многие забывают, что в D7 уже есть полноценная поддержка стандарта PSR-3. Не нужно изобретать велосипеды или сразу тащить Monolog:
* Используйте `Bitrix\Main\Diag\Logger`: Это штатный механизм. Вы можете настроить разные логгеры (файлы, syslog) для разных модулей прямо в .settings.php.
* Забудьте про `AddMessage2Log`: Это легаси-путь. Современный подход — получать логгер через Logger::create('имя_канала').
* Контекст решает: Штатные логгеры позволяют передавать массив контекста. Пустая фраза «Ошибка оплаты» бесполезна. Передавайте ['orderId' => 123, 'user' => 45], и Битрикс сам разложит это в читаемый вид (или в JSON, если настроите `JsonLinesFormatter`).
* Безопасность прежде всего: Никогда не храните файлы логов внутри DOCUMENT_ROOT. Даже если вы назвали файл log_hidden_123.txt, его можно подобрать или найти через индексацию. Храните логи на уровень выше корня сайта. Если это невозможно — закройте директорию через .htaccess или настройки Nginx.
🎯 Золотое правило: Логи — это инструмент мониторинга, а не свалка «на всякий случай»
Лайфхак: В .settings.php можно настроить логгер так, что он будет писать ошибки в разные файлы в зависимости от уровня (например, debug.log для всего и critical.log только для проблем, требующих срочного реагирования). Это позволяет не тонуть в мусоре при разборе полетов.
#bitrix #битрикс #logging #PSR3 #разработка #совет_на_обед #D7 #clean_code
👍11🔥5🤝2
Битрикс × ИИ: OpenAI: GPT-5.2
Сегодня прогнал 2 модели: Grok Code Fast был очень быстр, но сгенерил аццкую жуть с require_once файлов классов внутри модуля. Остановил его на полпути - там править бесполезно.
Следующим был запущен OpenAI GPT-5.2 — новый рекордсмен по качеству кода, но с очень дорогим «процессорным временем». Модель выдала отличные 94 балла за качество (89 в итоговом зачете), филигранно реализовав сложные вещи вроде шифрования кук (CryptoCookie) и синхронизации кнопок в JS.
Однако за интеллект приходится платить: 14 минут на генерацию, 4 итерации правок и стоимость в $1.20 за задание.
Вердикт: GPT-5.2 — это «хирург» для сложных архитектурных узлов и проверки безопасности. Но основной «рабочей лошадкой» по-прежнему остается Gemini 3 Flash: по соотношению цена/скорость/результат она всё ещё вне конкуренции
Подробный разбор на сайте: https://bxmax.ru/bitrix-ai/openai-gpt-52
В ближайших планах: Claude Sonnet 4.5, Gemini 3 Pro, Kimi K2 и Claude Haiku 4.5
Сегодня прогнал 2 модели: Grok Code Fast был очень быстр, но сгенерил аццкую жуть с require_once файлов классов внутри модуля. Остановил его на полпути - там править бесполезно.
Следующим был запущен OpenAI GPT-5.2 — новый рекордсмен по качеству кода, но с очень дорогим «процессорным временем». Модель выдала отличные 94 балла за качество (89 в итоговом зачете), филигранно реализовав сложные вещи вроде шифрования кук (CryptoCookie) и синхронизации кнопок в JS.
Однако за интеллект приходится платить: 14 минут на генерацию, 4 итерации правок и стоимость в $1.20 за задание.
Вердикт: GPT-5.2 — это «хирург» для сложных архитектурных узлов и проверки безопасности. Но основной «рабочей лошадкой» по-прежнему остается Gemini 3 Flash: по соотношению цена/скорость/результат она всё ещё вне конкуренции
Подробный разбор на сайте: https://bxmax.ru/bitrix-ai/openai-gpt-52
В ближайших планах: Claude Sonnet 4.5, Gemini 3 Pro, Kimi K2 и Claude Haiku 4.5
BXMax
GPT-5.2 - Битрикс × ИИ - BXMax
Детальный анализ AI модели GPT-5.2 в разработке на 1С-Битрикс. Баллы: 89/100
🔥7👍3👏1🤝1
🎯 Вектор развития — 2026. Куда инвестируем время в Новом году?
Anonymous Poll
78%
🏗 Архитектура и Core: Глубокое D7, ООП, паттерны и чистый код внутри Битрикса
38%
⚡️ Фреймворки: Laravel / Symfony (для расширения кругозора или перехода на Headless)
34%
🤖 AI-Driven Development: Мастерство промптов, Cursor, интеграция нейросетей в свои модули
38%
🛠 DevOps и Окружение: Docker, CI/CD, оптимизация Highload-проектов
16%
🚀 Другие стеки: Go / Python / Node.js (выход за пределы PHP)
19%
🎨 Frontend: React / Vue / Vibe UI (современный фронт)
16%
📈 Soft Skills & Management: Уход в тимлиды или менеджмент
28%
🧘 Ментальное здоровье: Буду беречь себя и оттачивать то, что уже умею
3%
💬 Свой вариант (в комментариях)
🔥 От хаоса к контролю: как ServiceLocator в Bitrix спасает от спагетти-кода и позволяет управлять зависимостями
Я джва месяца писал!.. И добил-таки)
О чём статья
Практическое руководство по ServiceLocator в Bitrix — от проблемы до решения. Разбираем DI-контейнер фреймворка, три способа регистрации сервисов, autowire и типичные ошибки.
Что узнаете
- Как работает ServiceLocator и чем он лучше new
- Три способа регистрации: className, constructorParams, constructor
- Автоматическое разрешение зависимостей через рефлексию
- Интеграция с компонентами, агентами, событиями
- Антипаттерны, которые превратят ваш код в спагетти
https://bxmax.ru/blog/bitrix-servicelocator-di-advanced-guide
Исходники демо-модуля в первом комментарии.
Буду рад фидбэку в комментариях!
Я джва месяца писал!.. И добил-таки)
О чём статья
Практическое руководство по ServiceLocator в Bitrix — от проблемы до решения. Разбираем DI-контейнер фреймворка, три способа регистрации сервисов, autowire и типичные ошибки.
Что узнаете
- Как работает ServiceLocator и чем он лучше new
- Три способа регистрации: className, constructorParams, constructor
- Автоматическое разрешение зависимостей через рефлексию
- Интеграция с компонентами, агентами, событиями
- Антипаттерны, которые превратят ваш код в спагетти
https://bxmax.ru/blog/bitrix-servicelocator-di-advanced-guide
Исходники демо-модуля в первом комментарии.
Буду рад фидбэку в комментариях!
🔥9👍3🎉1🤩1🤝1
