Поддержка

Заметки

Модуль заметок и комментариев к записям ресурсов

Модуль Заметки (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 в точке входа:

resources/js/frame.ts
import { registerNotesModule } from '@frame/notes'
import notesLocale from '../../vendor/frame/notes/resources/lang/ru.json'

registerNotesModule()

app.use(FramePlugin, {
  i18n: { ...locale, ...notesLocale },
  // ...
})

Добавьте @source в CSS:

resources/css/frame.css
@source '../../node_modules/@frame/notes';

И в package.json:

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 из Tiptap
  • created_at / updated_at

Автор резолвится по auth('frame')->user() при создании.

Переводы

Переводы фронтенда лежат в vendor/frame/notes/resources/lang. Слейте их с основным локалем через i18n при инициализации FramePlugin (см. выше). Backend-переводы подхватываются автоматически через loadJsonTranslationsFrom в NotesServiceProvider.