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

Папки

Папки нужны, чтобы страницы сайта не лежали одной плоской кучей. Это способ организации внутри PageCraft — и только он.

  • Папка принадлежит сайту и создаётся в нём: site_id обязателен.
  • Вложенность произвольной глубины через parent_id; папка без родителя лежит в корне сайта.
  • Страница либо лежит в папке (folder_id), либо в корне сайта (folder_id: null).
  • Папки одного сайта нельзя вкладывать в папки другого — ответ 422.
POST /api/v1/folders
{
"name": "Акции 2026",
"site_id": 3,
"parent_id": 12
}
Действие Запрос
список папок сайта GET /api/v1/folders?site_id=3
одна папка со счётчиками GET /api/v1/folders/{id}
создать POST /api/v1/folders
переименовать или переместить PUT /api/v1/folders/{id}
удалить вместе с содержимым DELETE /api/v1/folders/{id}

В ответе про папку есть pages_count и subfolders_count — количество непосредственных детей. Запрос одной папки дополнительно отдаёт total_pages_count и total_subfolders_count — то же с учётом всего поддерева.

Переименование и перемещение делаются одним запросом: передайте name, parent_id или оба. parent_id: null поднимает папку в корень сайта. Пустое имя отклоняется (422), как и попытка сделать папку потомком самой себя или собственного потомка — «Нельзя сделать папку потомком самой себя».

Папка страницы — обычное поле, меняется вместе с остальными:

PUT /api/v1/pages/42
{ "folder_id": 12 }

folder_id: null возвращает страницу в корень сайта. В интерфейсе для этого есть отдельная операция (PUT /api/pages/{id}/move), делающая ровно то же самое.

В ответе приходит deleted_pages и deleted_subfolders — сколько объектов удалилось на самом деле. Перед удалением стоит запросить GET /api/v1/folders/{id} и посмотреть на total_pages_count: удаление опубликованной страницы в PageCraft не убирает её с витрины, там она останется висеть без связи с исходником.

  • backend/src/Entity/PageFolder.php, Page.php
  • backend/src/Service/PageFolder/CreatePageFolderService.php, UpdatePageFolderService.php, DeletePageFolderService.php
  • backend/src/Controller/V1/PageFolder/*, backend/src/Controller/PageFolder/*
  • backend/src/Service/Page/UpdatePageService.php