Перейти к основному содержимому

Filament reference

Panel

AppPanelProvider описывает единственную основную Filament panel.

Ключевые настройки:

  • path: config('systematika.admin_panel');
  • login/password reset;
  • SPA mode;
  • Vite themes;
  • discovered resources/pages;
  • auth middleware;
  • render hooks для timezone и common JS;
  • navigation groups;
  • ReorderableColumns plugin.

Pages

PageНазначение
EditProfileПрофиль пользователя через Jetstream/Fortify forms
ManageSaleStateУправление настройкой распродажи через Spatie settings

Admin resources

ResourcePagesНазначение
Admin/UserResourcecreate, edit, listПользователи, роли, permissions, ограничения self-actions
Admin/RoleResourcecreate, edit, listРоли и набор permissions

Catalog resources

ResourcePagesRelation managersНазначение
Catalog/ProductResourcecreate, edit, listProductOfferings, SeriesElementsГлавный CRUD продуктов, классификатор, представление, карточка
Catalog/ProductOfferingResourceedit, listLessons, StatusSectionsСезоны/offers продукта, actual, dates, status, tariff
Catalog/TariffResourcecreate, edit, listProducts, TariffMovementsТарифы, скидки, special/free logic
Catalog/SeriesResourcecreate, edit, listSeriesElementsСерии продуктов
Catalog/OfferingResourcecreate, edit, listElementsСоставные коммерческие предложения

Content catalog resources

ResourcePageНазначение
ContentCatalog/CatalogFilterResourcemanageНастройки фильтров каталога
ContentCatalog/CatalogSeoPhraseResourcemanageSEO-фразы для комбинаций фильтров

Content page resources

ResourcePageНазначение
ContentPage/BannerResourcemanageБаннеры, HTML/data modes
ContentPage/ProductAboutSectionResourcemanageAbout-секции страниц продуктов

Dictionary resources

ResourcePages/relationsНазначение
Dictionary/BannerTypeResourcemanageТипы баннеров
Dictionary/LessonTypeResourcemanageТипы уроков
Dictionary/ProductFormatResourcemanageФорматы продуктов
Dictionary/ProductGoalResourcemanageЦели продуктов
Dictionary/ProductOfferingStatusResourcecreate, edit, list, MovementsСтатусы offering и правила переходов
Dictionary/ProductPageStatusResourcemanageСтатусы публичных страниц/карточек
Dictionary/ProductPriceStatusResourcemanageСтатусы цены для фильтра каталога
Dictionary/ProductTypeResourcecreate, edit, list, ProductSubtypesТипы и подтипы продуктов
Dictionary/TariffTypeResourcemanageТипы тарифов

Learning resources

ResourcePages/relationsНазначение
Learning/GroupDisciplineGkDtoResourceexport-like resourceDTO/export представление для GK catalog
Learning/GroupDisciplineManySchedulesResourcecreate, edit, list, ScheduleGroup discipline с несколькими расписаниями
Learning/GroupDisciplineSingleScheduleResourcecreate, edit, listGroup discipline с одним расписанием
Learning/GroupDisciplineResourcemanage, GroupLessonОбщая база group disciplines и lessons

Parameters resources

ResourcePages/relationsНазначение
Parameters/AcademicYearResourcecreate, edit, list, WeeksАкадемические годы и недели
Parameters/GradeResourcemanageКлассы/grades
Parameters/RoomResourcemanageКабинеты
Parameters/TeacherResourcemanageПреподаватели

Program resources

ResourcePages/relationsНазначение
Program/SubjectResourcecreate, edit, list, DifficultyLevels, SubsubjectsПредметы и связанные уровни/подпредметы
Program/DifficultyLevelResourcemanage levels/topics, Topics, TmodulesУровни сложности, темы и модули
Program/TopicResourcemanageТемы программы
Program/MiniGroupProgramResourcecreate, edit, list, Topics, ModulesRoadmap-программы мини-групп

Site resources

ResourcePageНазначение
Site/LandingLayoutResourcemanageLayout types для proxy pages
Site/LandingNullPrefixPageResourcemanageNull-prefix pages
Site/LandingPageCacheEntryResourcemanageCache entries proxy/grabbed pages
Site/LandingProxyPageResourcemanageDynamic routes из БД
Site/LandingRedirectResourcemanageRedirect rules

SystemCore resources

ResourcePageНазначение
SystemCore/CustomFieldDefinitionResourcemanageОпределения пользовательских полей
SystemCore/CustomFieldTypeResourcelistТипы пользовательских полей

Custom Filament components/views

ФайлНазначение
CustomCheckboxListКастомный список checkbox-ов для permissions/roles
resources/views/filament/edit-page-only-relation-managers.blade.phpEdit page только с relation managers
resources/views/filament/export-modal.blade.phpModal export UI
resources/views/filament/pages/*Custom page views/profile/team/api tokens
resources/views/filament/resources/*Custom resource/relation manager views

Как документировать новый resource

При добавлении Filament resource обновить:

  1. Эту страницу.
  2. Filament-админка при изменении ключевых пользовательских сценариев.
  3. Models reference, если появился новый model/resource pair.
  4. Migrations and datamodel, если появилась таблица.

Deep audit summary

Аудит Filament-зоны нашёл:

  • 38 resources;
  • 19 relation managers;
  • 66 page-классов;
  • основная логика находится в Resource и RelationManager, а большинство Pages являются стандартными List, Create, Edit, Manage wrappers.

Нетривиальная логика по зонам

Администрирование

UserResource:

  • пароль при создании генерируется автоматически;
  • пароль кладётся во flash-session для показа после create;
  • пользователю назначается роль user;
  • при смене direct permissions сбрасывается Spatie permission cache;
  • нельзя редактировать себя и пользователей via_gk.

RoleResource:

  • permissions выбираются карточками через CustomCheckboxList;
  • при изменении permissions сбрасывается Spatie permission cache;
  • системные роли super_admin и user защищены от edit/delete.

Параметры

AcademicYearResource:

  • WeeksRelationManager умеет генерировать недели;
  • после правки/удаления недели перенумеровываются по датам.

TeacherResource:

  • преподаватель связан many-to-many с DifficultyLevel;
  • таблица выводит связки предмет-уровень.

RoomResource:

  • хранит Zoom email;
  • хранит mk_id для внешней системы.

Справочники

ProductTypeResource:

  • поддерживает parent-child типы;
  • генерирует slug/id;
  • имеет ProductSubtypesRelationManager.

ProductOfferingStatusResource:

  • связывает статус сезона с format и page status;
  • MovementsRelationManager задаёт приоритетные переходы статусов.

BannerTypeResource:

  • id генерируется из name;
  • есть close_timeout;
  • есть url_patterns repeater с regex/disabled флагами.

Программа

SubjectResource:

  • управляет roadmapConfig;
  • хранит падежные формы названия;
  • action fixTree запускает DifficultyLevel::syncSubsForSubjectId.

DifficultyLevelResource:

  • скрыт из навигации;
  • отдельная страница ManageTopics показывает темы и модули;
  • есть фильтры по наличию продуктов и тем.

MiniGroupProgramResource:

  • уровень сложности зависит от выбранного предмета;
  • темы можно автозаполнить из учебного TopicModule.

Каталог

ProductResource:

  • вкладки Основное и Представление;
  • зависимые селекты: тип-продукта -> подтип, предмет -> подпредмет -> уровень;
  • цели через relation;
  • live preview карточки;
  • FileUpload изображения;
  • custom fields;
  • после save dispatch-ит reload-page.

ProductOfferingResource:

  • скрыт из навигации;
  • ListProductOfferings::canAccess() возвращает false;
  • редактирует статус, тариф, академический год, расписание;
  • уроки и status/about sections редактируются relation managers.

TariffResource:

  • режим special скрывает обычные ценовые поля;
  • цены read-only;
  • скидки и сезонные скидки вынесены отдельным блоком.

SeriesResource:

  • классификатор по типу, предмету и уровню;
  • relation manager подбирает продукты по параметрам серии.

OfferingResource:

  • оффер может включать продукты, серии или виртуальные элементы;
  • элементы фильтруются через классификатор.

Контент

CatalogSeoPhraseResource:

  • зависимые селекты subject -> subsubject;
  • зависимые селекты product_type -> product_subtype;
  • поддерживает статусы страницы и цены.

BannerResource:

  • работает либо с raw content, либо с constructor data.*;
  • набор полей зависит от type_id и via_data;
  • list page имеет custom view с фильтрацией и export JS для GkBanner.

ProductAboutSectionResource:

  • классификация по предмету, уровню, типу и статусу сезона;
  • поддерживает raw HTML и structured builder из трёх секций;
  • поддерживает placeholder-переменные.

Сайт

LandingNullPrefixPageResource:

  • to_path автозаполняется как v2/...;
  • action sync пишет активные маршруты в .htaccess через HTAccessHelper.

LandingProxyPageResource:

  • выбирает route-layout;
  • to_path автозаполняется URL старого v1/WordPress;
  • таблица показывает cache-состояние.

LandingPageCacheEntryResource:

  • preview cache по route;
  • удаление cache по записи;
  • bulk-action dropAllCache чистит resources/views/cache.

Обучение

GroupDisciplineSingleScheduleResource:

  • фильтрация по текущему учебному году;
  • track зависит от продукта;
  • teacher фильтруется по difficultyLevel;
  • end_date считается от start_date;
  • embedded schedule генерирует cipher и end_time.

GroupDisciplineManySchedulesResource:

  • похож на single schedule, но расписания вынесены в ScheduleRelationManager.

GroupDisciplineGkDtoResource:

  • read-only список активных групп курсов за последние 7 дней;
  • export action собирает window.COURSES_CATALOG JSON.

Relation managers with side effects

Relation managerSide effect / важная логика
WeeksRelationManagerАвторасчёт end_date, генерация недель, перенумерация после edit/delete
MovementsRelationManagerПриоритетные rule-based переходы статусов
TariffMovementsRelationManagerПриоритетные rule-based переходы тарифов
DifficultyLevelsRelationManagerTop/sub levels, roadmap flags, переход в ManageTopics
TmodulesRelationManagerМассово обновляет topic_module_id у тем
TopicsRelationManagerФильтр по модулю или “без модуля”, reorder внутри модуля
ModulesRelationManagerСвязь roadmap-модулей с учебными модулями
ProductOfferingsRelationManagerСоздаёт сезон и редиректит в EditProductOffering
LessonsRelationManagerТреки, недели, типы занятий, темы, цели, custom fields
StatusSectionsRelationManagerПодбирает секции “О продукте” по каскаду точности
SeriesElementsRelationManagerСобирает серии из продуктов с классификацией и reorder
ElementsRelationManagerСобирает офферы из продуктов, серий и виртуальных элементов
GroupLessonRelationManagerГенерирует занятия группы через helper-функции
ScheduleRelationManagerФильтрует teacher по уровню продукта, end_time ставит плюс 1 час