Заметки
Модуль Заметки (frame/notes) добавляет к любой записи ресурса возможность оставить произвольные текстовые заметки — встроенный блок на странице просмотра, хранение в отдельной таблице frame_notes, морф-связь с моделью.
Возможности
- Блок заметок на странице записи (add/edit/delete)
- Сортировка по дате, авторство
- Rich-text редактор (Tiptap)
- Gate
frame-notesдля контроля доступа - Переводы backend/frontend
Установка
Composer
composer require frame/notes
Миграция frame_notes подгружается автоматически — запустите php artisan migrate.
Frontend
Подключите модуль до FramePlugin в точке входа:
import { registerNotesModule } from '@frame/notes'
import notesLocale from '../../vendor/frame/notes/resources/lang/ru.json'
registerNotesModule()
app.use(FramePlugin, {
i18n: { ...locale, ...notesLocale },
// ...
})
Добавьте @source в CSS:
@source '../../node_modules/@frame/notes';
И в package.json:
"@frame/notes": "file:vendor/frame/notes"
Переустановите зависимости: rm -rf node_modules package-lock.json && npm install --legacy-peer-deps.
Сборка
npm run build:frame
Контроль доступа
Модуль регистрирует gate frame-notes. По умолчанию разрешён всем авторизованным пользователям. Переопределите в FrameServiceProvider или AuthServiceProvider:
use Illuminate\Support\Facades\Gate;
Gate::define('frame-notes', fn ($user) => $user?->hasRole('editor'));
API
Эндпоинты под префиксом Frame API (по умолчанию /api/frame):
| Метод | Эндпоинт | Описание |
|---|---|---|
| GET | /notes/{resource}/{id} | Список заметок записи |
| POST | /notes/{resource}/{id} | Создать заметку |
| PATCH | /notes/{note} | Обновить заметку |
| DELETE | /notes/{note} | Удалить заметку |
Схема
Модель Frame\Notes\Models\Note:
id(bigint)notable_type/notable_id(morphs) — владелец (любой ресурс)user_id(nullable) — авторcontent(text) — содержимое, html из Tiptapcreated_at/updated_at
Автор резолвится по auth('frame')->user() при создании.
Переводы
Переводы фронтенда лежат в vendor/frame/notes/resources/lang. Слейте их с основным локалем через i18n при инициализации FramePlugin (см. выше). Backend-переводы подхватываются автоматически через loadJsonTranslationsFrom в NotesServiceProvider.