mirror of
https://gitverse.ru/kpa39l/vesti.git
synced 2026-09-29 09:55:03 +00:00
feat(web): архив опубликованных — дерево навигации по годам/месяцам + пагинация (openspec archive-navigation)
This commit is contained in:
@@ -0,0 +1,40 @@
|
||||
# archive-navigation
|
||||
|
||||
Страница «Опубликовано» (`/published`) — настоящий архив с навигацией по годам и месяцам.
|
||||
|
||||
## Why
|
||||
|
||||
Сейчас `/published` — просто плоский список последних 100 опубликованных постов
|
||||
без какой-либо навигации. С ростом архива найти пост по дате невозможно: нет ни
|
||||
периодов, ни фильтров, ни разбивки. Это противоречит назначению страницы —
|
||||
«архив опубликованного».
|
||||
|
||||
Пользователь хочет классический архив: дерево лет/месяцев слева или справа,
|
||||
посты — за выбранный период. Чтобы не занимать место вверху страницы
|
||||
(навигация вверху слишком громоздкая), выбрана правая колонка (Q1–Q10,
|
||||
grill-with-docs 2026-09-20, записано в AGENT.MD).
|
||||
|
||||
## What Changes
|
||||
|
||||
- **web/app.py**, роут `GET /published`:
|
||||
- принимает query-параметры `year` (YYYY), `month` (MM), `page` (по умолчанию 1).
|
||||
- строит дерево навигации: `SELECT strftime('%Y', published_at) y, strftime('%m', published_at) m, COUNT(*) n FROM posts WHERE status='published' GROUP BY y, m` → группировка по годам, внутри — месяцы с количеством. Группа «Без даты» — посты с пустым `published_at` (характер: могут появиться; сейчас 0).
|
||||
- фильтрует посты по выбранному периоду: `year` + `month` (все посты за год, если месяц не указан), либо «Все посты» (без параметров).
|
||||
- пагинация по 10 постов (LIMIT 10 OFFSET).
|
||||
- рендер в `published.html` с деревом навигации, списком постов, подсветкой активного периода.
|
||||
- **web/templates/published.html**:
|
||||
- правая колонка (Bootstrap `col-md-3` + sticky) — дерево годов/месяцев со счётчиками, ссылка «Все посты», группа «Без даты»; пустые периоды не выводятся.
|
||||
- слева — список постов за выбранный период + Bootstrap pagination по 10 (prev/next + номера).
|
||||
- на мобильных — колонка сворачивается (Bootstrap collapse).
|
||||
- **web/app.py**: хелпер построения дерева (чистая функция, тестируемая).
|
||||
- Обновить `STATUS.md`, `CONTEXT.md` (глоссарий уже добавлен).
|
||||
|
||||
## Rollback
|
||||
|
||||
- Откат: `git checkout -- web/app.py web/templates/published.html` (change фиксирует
|
||||
состояние до правок), рестарт vesti-web.
|
||||
|
||||
## Затронутые сервисы/порты
|
||||
|
||||
- vesti-web (:8400), внешний https://vesti.nixg.ru. БД SQLite — только чтение
|
||||
через существующий `_db()` (WAL + busy_timeout).
|
||||
Reference in New Issue
Block a user