Files
LMS/docs/06-authoring.md
Vladislav Kopnin df5020fea6 Learn UI: prev/next navigation, sidebar outline, editing on every page; merge import; defense date
- article page: ← / → navigation across the whole material tree (including
  between sections), sticky sidebar outline with the current article highlighted
- editing on chapter, section and article pages: rename, publish/hide, delete,
  create section/article, move articles while deleting a section; forms return
  to the page they were opened from (validated internal `back` parameter)
- article page opens the edit dialog directly via ?edit=1 (used by "Править"
  links on section/chapter pages)
- import: optional sync flag — with it stale sections/articles of archived
  chapters are deleted (previous behaviour), without it import only adds and
  updates, so material edited in the UI is not overwritten
- student area: lab page and lab cards now show the defense date next to the
  submission deadline
- fix SpEL crash on the student lab page (`and` with nullable strings)
2026-09-17 17:14:16 +03:00

129 lines
7.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Как оформлять учебные материалы
Материалы лежат в файлах, а на сервер попадают **импортом ZIP** (админка → `/learn` →
«Импорт zip»). Этот документ — для автора: какой markdown поддерживается, как вставлять
картинки и видео, какие есть ограничения.
## Структура архива
```text
chapters/01-Справочная информация/01-Среда разработки/01-Какую среду выбрать.md
chapters/02-Основы языка C/01-Ввод-вывод и типы/01-Типы данных и ввод-вывод.md
assets/choose-01.svg # картинки и видео — в корне архива, в папке assets/
assets/demo-install.mp4
```
* `chapters/<NN-глава>/<NN-раздел>/<NN-статья>.md` — три уровня обязательны;
число в начале имени задаёт порядок.
* В начале файла — front-matter с заголовком и (необязательно) slug:
```markdown
---
title: "Qt Creator: установка и настройка в Windows"
slug: "qt-creator-windows"
---
```
* Если slug не указать, он сгенерируется из названия. Менять slug у существующей статьи
не стоит — изменится адрес страницы.
## Обычный markdown
Поддерживаются заголовки `##`, списки, таблицы, цитаты (`>`), ссылки, `**жирный**`,
`*курсив*`, блоки кода с указанием языка и сноски.
````markdown
| Клавиши | Действие |
|---|---|
| `Ctrl+R` | собрать и запустить |
```c
int main(void) { return 0; }
```
```bash
gcc -Wall -g main.c -o main
```
````
Код в блоках подсвечивается автоматически (нужен язык после открывающих ```).
## Спойлер (скрытый текст)
Удобно для решений задач: студент видит условие, а решение открывает по клику.
````markdown
:::spoiler Решение
```c
printf("Ответ: 42\n");
```
:::
````
## Картинки
Картинки кладите в `assets/` архива и вставляйте **директивой с подписью**:
```markdown
:::figure assets/qtw-01.svg | Рис. 1. Скачивание установщика
```
Получится оформленный рисунок с подписью (`<figure><img><figcaption>`). Работает и обычная
вставка `![Рис. 1](assets/qtw-01.svg)`, но тогда подписи не будет.
Поддерживаются `png`, `jpg`, `jpeg`, `gif`, `svg`, `webp` — до **10 МБ** на файл.
## Видео
Видеофайл также кладётся в `assets/`, вставка — директивой:
```markdown
:::video assets/demo-install.mp4 | Видео: установка и первая программа
```
На странице появится проигрыватель с элементами управления; подпись необязательна.
Поддерживаются `mp4` (рекомендуется, кодек H.264), `webm`, `ogg` — до **100 МБ** на файл.
Плеер поддерживает перемотку (сервер отдаёт файл частями).
## Правка прямо на страницах материалов
Администратору доступны действия не только на главной `/learn`, но и на каждой странице:
* **статья** — «Править» (модальное окно с markdown), «Скрыть/Опубликовать», «Удалить»,
а также навигация **← предыдущая / следующая →** (работает и между разделами) и
**боковое содержание** со всеми главами, разделами и статьями;
* **раздел** — «+ Статья», «Переименовать раздел», «Скрыть/Опубликовать»,
«Перенести статьи и удалить», «Удалить раздел»; у каждой статьи в списке — «Править»
(открывает статью с готовым окном правки), скрытие и удаление;
* **глава** — «+ Раздел», «Переименовать главу», «Скрыть/Опубликовать», «Удалить главу»;
у каждого раздела — переименование, скрытие, перенос статей и удаление, у каждой статьи — «Править».
## Импорт: что происходит с материалами
* Главы, разделы и статьи из архива **обновляются** (совпадение по главе + разделу + slug статьи).
* Режим **синхронизации** (галка в форме импорта) дополнительно **удаляет** разделы и статьи
главы, которых нет в архиве — архив считается источником истины («удалено устаревших: N»).
* Без галки импорт работает в режиме **merge**: только добавляет и обновляет то, что есть
в архиве. Так можно догрузить отдельные статьи, **не затрагивая правки, сделанные в приложении**.
* Главы, которых нет в архиве совсем, не затрагиваются — их нужно удалить вручную.
* Минимальный архив (например, только один раздел + `assets/`) безопасно импортировать
в режиме merge: остальные материалы останутся как есть.
* Ссылки вида `assets/имя` автоматически заменяются на публичный адрес
`/api/v1/content/assets/...`; сами файлы складываются в хранилище.
## Публикация и скрытие
У каждой главы, раздела и статьи в `/learn` есть кнопка **«Скрыть…»/«Опубликовать…»** и
бейдж «скрыто». Скрытые материалы видны только администратору (со значком), студенты и
гости их не видят; прямые ссылки на скрытое отдают «не найдено». Удобно готовить материал
постепенно.
## Практические советы по медиа
* Скриншоты: PNG или SVG, ширина 960–1400 px; обрезайте лишнее, выделяйте важное рамкой.
* Скринкасты: 1280×720, 30 fps, H.264, до 1–2 минут — так файл остаётся в пределах 50 МБ.
* Имена файлов — латиницей и уникально: `qtw-01.svg`, `vsw-02.svg`, `demo-install.mp4`.
Одинаковые имена в разных главах перекрывают друг друга.
* Большие видео лучше сжимать (`ffmpeg -i in.mov -vcodec libx264 -crf 28 -preset veryfast out.mp4`)
или публиковать ссылкой на внешний хостинг.