Skip to content

Releases/v210.1.0 - #1

Merged
MaximHarder merged 15 commits into
mainfrom
releases/v210.1.0
Oct 28, 2026
Merged

MaximHarder merged 15 commits into
mainfrom
releases/v210.1.0

Conversation

@MaximHarder

@MaximHarder MaximHarder commented Oct 28, 2026 •

Copy link
Copy Markdown
Contributor

Добавление модуля «Связи» (Connections) 210.1.0

Описание

Добавляется новый плагин для DataLife Engine — «Связи» (Connections), позволяющий собирать новости в группы связанных материалов (сборки) и выводить их читателю на странице полной новости. Модуль нужен для того, чтобы редактор мог вручную связывать материалы между собой (сезоны, циклы, хронологии и т.п.) и управлять порядком и видимостью элементов прямо из админки, а на сайте — получать аккуратный блок связанных публикаций без дублей и скрытых позиций.

Модуль работает поверх DevCraft Admin и не требует правок ядра DataLife Engine.

Изменения в коде

  • Добавлена реализация модуля в upload/devcraft/src/modules/Connections/:
    • контроллеры: вывод блока на полной новости (FullstoryController), вкладка «Связи» на форме новости (NewsFormController, AddNewsController), точка входа include (show_connections.php);
    • обработчики AJAX для CRUD сборок, элементов, типов связей, категорий сборок, направленных пар, поиска новостей, порядка и видимости;
    • модели Cycle ORM: сборка, элемент сборки, категория сборки, тип связи, направленная пара;
    • сервисы для работы со сборками, элементами, типами, деревом и публичным выводом;
    • снимок формы новости (NewsFormSnapshot) с валидацией структуры;
    • схемы фильтрации для страниц типов связей и категорий сборок;
    • страницы админки (категории сборок, история изменений и др.);
  • Публичный вывод реализован через include в шаблон полной новости с фильтрами по типу (type, type_exclude), категории (category, category_exclude) и набору шаблонов (template), с запасным путём Air → Default.
  • Добавлены интеграционные точки для сателлита автоматизации (AutomationHostBridge), вызываемые после изменения состава сборки.

Внесённые изменения за пределами кода

  • LICENSE заменён на MIT (ранее — полный текст GNU GPL v3).
  • readme.md полностью переписан под модуль «Связи»: описание, требования (DLE ≥ 21.0, PHP ≥ 8.3, DevCraft Admin ≥ 200.4.1), установка, настройка, публичный вывод, идентификация модуля и ссылки на документацию.

Дополнительная информация

  • При первом заходе в раздел «Связи» (?mod=dle_connections) создаются таблицы модуля; права на запись нужны для каталога devcraft/cache.
  • Типы связей и категории сборок не создаются автоматически — их нужно завести вручную после установки.
  • Отдельного флажка «Включено» в настройках нет: модуль отключается через менеджер плагинов DataLife Engine.
  • В шаблоне публичного добавления новости тег {dc-connections} должен находиться внутри формы, иначе черновик сборок не сохранится вместе с новостью.

Issues

Fixes #(Issue)

Тип изменений

  • Исправление ошибки (обратная совместимость, исправление проблемы)
  • Новая функциональность (обратная совместимость, добавление новой функции)
  • Изменение, нарушающее обратную совместимость (исправление или новый функционал, который может сломать существующую логику)
  • Эти изменения требуют обновления документации

Контрольный список:

  • Мой код соответствует стилевым правилам проекта
  • Я провёл самопроверку своего кода
  • Я добавил комментарии в код, особенно в сложных для понимания местах
  • Я обновил соответствующую документацию
  • Мои изменения не вызывают новых предупреждений
  • Я добавил тесты, доказывающие работоспособность исправления или новой функциональности
  • Все новые и существующие unit-тесты успешно проходят локальную проверку
  • Все зависимые изменения были объединены и опубликованы в соответствующих модулях
  • Я проверил код на наличие орфографических ошибок

Коммиты

  • feat: добавляет модель типа связи и обработчики AJAX 7d3b9b9 diff patch
  • feat: добавляет поддержку типов сборок и привязку f059b75 diff patch
  • feat: заменяет SVG иконку на FontAwesome для drag-handle 7401dcb diff patch
  • feat: добавляет slug и контекст для связей ba40ddd diff patch
  • feat: добавляет поддержку типов коллекций fa43bf6 diff patch
  • feat: заменяет RuntimeException на JsonResponse::abort 279adea diff patch
  • feat: добавляет поддержку кастомных наборов 799d5a8 diff patch
  • feat: добавляет поддержку ручных переопределений связей 69e77a3 diff patch
  • feat: добавляет условный рендеринг и улучшает 3f8d5e3 diff patch
  • refactor: удаляет лишний параметр comparison в тегах has 552476f diff patch
  • feat: разделяет админские и публичные ассеты модуля eefdfe5 diff patch
  • feat: упрощает инициализацию и добавляет локализацию 7ac32b8 diff patch
  • feat: улучшает семантику и доступность шаблонов связей 69faf14 diff patch
  • feat: оборачивает виджет связей в шаблон темы 0b7b3e1 diff patch
  • feat: добавляет форматирование даты с учётом a2a9ea3 diff patch

Добавляет новую сущность ConnectionRelationType для
управления типами связей между новостями. Реализует
AJAX-обработчики для сохранения и переупорядочивания
элементов сборок. Добавляет SVG-иконки для интерфейса.
новостей

Добавляет возможность указывать тип (категорию) при
создании и редактировании сборок. При создании новой
сборки теперь требуется выбрать исходную новость, которая
автоматически добавляется в сборку. Добавлен новый
интерфейс управления категориями сборок с таблицей и
действиями для переименования и удаления. Обновлены
обработчик AJAX и сервисы для работы с новыми полями.
Удаляет встроенный SVG файл из span.dd-handles и
заменяет его на FontAwesome иконку \f142(три точки)
через CSS ::before. Добавляет возможность перетаскивания
сборок (коллекций) целиком, а не только отдельных новостей.
Упрощает разметку и унифицирует стиль с DLE.
Добавляет поле slug в тип сборки связей для публичной
идентификации через фильтры. Расширяет шаблон отображения
элемента связи поддержкой контекстных связей и комментариев.
Создаёт репозиторий для работы с направленными парами связей.
Добавляет возможность устанавливать и синхронизировать
тип коллекции при создании и обновлении связей. Извлекает
логику транслитерации в общий DataManager для переиспользования.
Обновляет фронтенд для работы с типами коллекций и их
отображения в интерфейсе.
Заменяет выброс RuntimeException на использование
JsonResponse::abort() в сервисах для корректной обработки
ошибок валидации и бизнес-логики. Добавляет перехват
JsonResponseException в обработчик AJAX запросов для
возврата правильного HTTPответа. Это обеспечивает
единообразную обработку ошибок и корректные HTTP коды
(422, 404, 409) вместо 500.
шаблонов для связей между новостями

Добавляет параметр template для выбора подпапки
с набором шаблонов (list.tpl + item.tpl). Создаёт
новый набор chronology для отображения связей
в виде временной шкалы. Обновляет стандартный
набор с использованием элемента details для
сворачивания коллекций. Улучшает логику выбора
скина с fallback на Air вместо Default.
Добавляет флаг is_manual_override для отслеживания
ручных изменений связей в редакторе. Разделяет логику
upsert на две части: для редактора (с флагом) и для
автоматизации (с опциями сохранения переопределений).
Добавляет метод для удаления устаревших связей с
учётом ручных переопределений и видимости новостей.
обработку запросов в модуле связей

Добавляет условное отображение элементов в шаблонах
через проверку наличия значений (категория, описание,
комментарий, дата). Улучшает обработку AJAX-запросов:
добавляет поддержку кастомного текста загрузчика и
режима silent. Расширяет логику определения DOM-элемента
из результата создания. Исправляет передачу параметров
в диалоговые кнопки для корректной работы с элементами.
Убирает пустой параметр comparison="" из условных
тегов [has] в шаблонах подключений. Параметр не
использовался и только загромождал код. Функциональность
остаётся прежней, так как поведение по умолчанию
совпадает с удаляемым значением.
Добавляет использование ModuleSiteAssetsBuilder для
отделения публичных ассетов от админских. В Connections
теперь админские скрипты и стили загружаются отдельно.

Рефакторит CollectionService: извлекает логику привязки
типа категории в отдельный метод bindCollectionType для
переиспользования в create, update и clearCollectionTypes.

Обновляет install.xml: перемещает инъекцию DevCraft
Connections в addnews.php на болееранний этап и добавляет
обработку сохранения снимка формы при создании новости.

Обновляет changelog: документирует изменения в публичной
форме добавления новостей.
Снижает минимальную версию DLE с 21.0 до 20.0 для
расширения совместимости.

Удаляет избыточные проверки инициализации DevCraft,
так как фреймворк уже загружается автоматически при
использовании модуля.

Оборачивает текст "Связи" в функцию локализации
__() для поддержки многоязычности интерфейса.
Заменяет details/summary на nav/h2 для лучшей структуры
документа. Добавляет aria-labelledby для связи заголовков с
контейнерами. Использует time элемент с datetime атрибутом
вместо span для дат. Заменяет хардкод ссылок на переменную
{full-link}. Оборачивает опциональные элементы в условия
[has] для чистоты разметки. Удаляет скрытые служебные
элементы.
Добавляет метод для оборачивания виджета связей в
шаблон темы с поддержкой fallback на Air и Default.
Виджет теперь загружается из
`templates/{skin}/devcraft/connections/addnews.tpl`.

Удаляет глобальные siteAssets из манифеста, так как
стили и скрипты теперь подключаются через теги в
main.tpl темы.

Исправляет синтаксическую ошибку в install.xml и
обновляет документацию по подключению модуля.
локализации и конфига

Добавляет логику форматирования даты в публичном
дереве с поддержкой локализованного вывода. Теперь
дата отображается согласно конфигурации приложения
и использует функцию langdate, если она доступна.
Если парсинг даты не удался, выводится исходная
строка.
@MaximHarder

Copy link
Copy Markdown
Contributor Author

@DevCraftBot summerize

@DevCraftBot

DevCraftBot commented Oct 28, 2026 •

Copy link
Copy Markdown
Contributor

Описание запроса обновлено.

@MaximHarder
MaximHarder merged commit 0f01347 into main Oct 28, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants