From 13f5c603ce445d2b3868559da840625d1610f217 Mon Sep 17 00:00:00 2001 From: Alexander Andreev Date: Sat, 21 Feb 2026 14:03:12 +0300 Subject: [PATCH] Admin: auto-sort new branches and unify sections editor UI --- admin.php | 66 ++++++++++++++++++++++++++++++++++++------------------- 1 file changed, 44 insertions(+), 22 deletions(-) diff --git a/admin.php b/admin.php index cbd5c27..a6c80f9 100644 --- a/admin.php +++ b/admin.php @@ -58,8 +58,8 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') { try { if ($action === 'create_section') { $name = trim((string)($_POST['name'] ?? '')); - $sort = (int)($_POST['sort_order'] ?? 1000); if ($name === '') throw new RuntimeException('Название раздела пустое'); + $sort = nextSectionSortOrder(); sectionCreate($name, $sort); $message = 'Раздел создан'; } @@ -82,7 +82,6 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') { if ($action === 'create_topic') { $name = trim((string)($_POST['name'] ?? '')); - $sort = (int)($_POST['sort_order'] ?? 1000); $parentId = (int)($_POST['parent_id'] ?? 0); $parent = null; if ($name === '') throw new RuntimeException('Название тематики пустое'); @@ -95,6 +94,7 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') { } } + $sort = nextTopicSortOrder($parentId > 0 ? $parentId : null); topicCreate($name, $parentId > 0 ? $parentId : null, $sort); $message = 'Тематика создана'; } @@ -486,6 +486,21 @@ function buildTopicTree(array $topics): array return $roots; } +function nextSectionSortOrder(): int +{ + $sort = (int)db()->query('SELECT COALESCE(MAX(sort_order), 990) + 10 FROM sections')->fetchColumn(); + return max(10, $sort); +} + +function nextTopicSortOrder(?int $parentId): int +{ + $st = db()->prepare('SELECT COALESCE(MAX(sort_order), 990) + 10 FROM topics WHERE parent_id <=> :pid'); + $st->bindValue('pid', $parentId, $parentId === null ? PDO::PARAM_NULL : PDO::PARAM_INT); + $st->execute(); + $sort = (int)$st->fetchColumn(); + return max(10, $sort); +} + function saveBulkBefore(array $files, int $sectionId): array { $ok = 0; @@ -844,34 +859,42 @@ function nextUniqueCodeName(string $base): string -
-

Редактировать выбранный раздел

- -
- -

-

-
-
-
- - -
- -

Нет разделов для редактирования.

- -
-

Создать раздел

-

+
+

Список разделов

+ +

Разделов пока нет.

+ +
+ +
+
+
+ + + +
+
+
+ + +
+
+

Фото:

+
+ +
+ +
+ @@ -891,7 +914,6 @@ function nextUniqueCodeName(string $base): string

-