Статус: ✅ РЕАЛИЗОВАНО
Версия Quiz Engine: v1.0.0
Дата обновления: Сентябрь 2025
Quiz Engine успешно интегрирован в платформу "ИНФОТЕКА" с использованием простого и эффективного подхода прямого включения в базовый шаблон Hugo. Отказавшись от сложных схем с Git submodules или NPM пакетами, была выбрана стратегия максимальной простоты и надежности.
info-tech-io (GitHub organization)
├── quiz/ # Репозиторий Quiz Engine
│ ├── src/quiz-engine/
│ │ ├── quiz-engine.mjs # Основной модуль
│ │ └── ...
│
├── hugo-templates/ # Фабрика шаблонов
│ ├── components/quiz-engine/ # Компонент Quiz Engine
│ │ ├── static/quiz/ # Файлы Quiz Engine
│ │ └── layouts/shortcodes/
│ │ └── quiz.html # Hugo shortcode
│ └── templates/default/ # Пример шаблона, использующего Quiz Engine
│
└── mod_linux_base/ # Образовательный модуль
├── module.json # Указывает на использование компонента quiz-engine
├── content/lessons/
└── static/quizzes/
├── basics-01.json # Тесты модуля
└── advanced-02.json
- Компонентная система: Quiz Engine является компонентом в
hugo-templates. - Декларативное включение: Мод��ль активирует Quiz Engine, добавляя
"quiz-engine"в массивcomponentsв своемmodule.json. - Hugo shortcode: Простое встраивание через
{{< quiz src="quiz.json" >}}. - Статическая сборка:
hugo-templatesавтоматически включает необходимые файлы Quiz Engine при сборке модуля.
Файл: hugo-templates/components/quiz-engine/layouts/shortcodes/quiz.html
{{- $src := .Get "src" -}}
{{- $id := .Get "id" | default (printf "quiz-%d" now.Unix) -}}
{{- $theme := .Get "theme" | default "default" -}}
<div class="quiz-container"
id="{{ $id }}"
data-quiz-src="{{ $src }}"
data-quiz-theme="{{ $theme }}">
<div class="quiz-loading">
<p>📝 Загрузка теста...</p>
</div>
</div>
{{- if not (.Page.Scratch.Get "quiz-engine-loaded") -}}
{{- .Page.Scratch.Set "quiz-engine-loaded" true -}}
<script type="module">
import { initializeQuizzes } from '/quiz/src/quiz-engine/quiz-engine.mjs';
document.addEventListener('DOMContentLoaded', () => {
initializeQuizzes();
});
</script>
<link rel="stylesheet" href="/quiz/assets/quiz-styles.css">
{{- end -}}В Markdown контенте модуля:
# Урок 3: Работа с файлами в Linux
## Основные команды
Изучите основные команды для работы с файлами: `ls`, `cp`, `mv`, `rm`.
## Проверьте свои знания
{{< quiz src="/quizzes/files-basic.json" >}}
## Дополнительное задание
{{< quiz src="/quizzes/files-advanced.json" id="advanced-files" >}}Файл: mod_linux_base/static/quizzes/files-basic.json
{
"config": {
"type": "single-choice",
"showExplanation": "after-answer",
"allowRetry": true,
"showProgress": true
},
"question": {
"ru": "Какая команда используется для копирования файлов?",
"en": "Which command is used to copy files?"
},
"answers": [
{
"text": {
"ru": "cp источник назначение",
"en": "cp source destination"
},
"correct": true,
"explanation": {
"ru": "Верно! cp (copy) копирует файлы и директории.",
"en": "Correct! cp (copy) copies files and directories."
}
},
{
"text": {
"ru": "mv источник назначение",
"en": "mv source destination"
},
"correct": false,
"explanation": {
"ru": "mv используется для перемещения, а не копирования.",
"en": "mv is used for moving, not copying."
}
},
{
"text": {
"ru": "rm источник",
"en": "rm source"
},
"correct": false,
"explanation": {
"ru": "rm удаляет файлы, а не копирует их.",
"en": "rm deletes files, doesn't copy them."
}
}
]
}При обновлении контента модуля запускается GitHub Actions workflow:
# Упрощенный процесс сборки модуля
name: Build Module
on:
repository_dispatch:
types: [module-updated]
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout hugo-templates
uses: actions/checkout@v4
with:
repository: info-tech-io/hugo-templates
path: hugo-templates
- name: Checkout module content
uses: actions/checkout@v4
with:
repository: info-tech-io/${{ github.event.client_payload.module }}
path: module-content
- name: Read module.json and build
run: |
# Скрипт из hugo-templates читает module.json и запускает сборку
./hugo-templates/scripts/build.sh --module-path ./module-content
- name: Deploy to production
run: |
rsync -avz module-content/public/ server:/var/www/infotecha.ru/module-name/-
Функциональность
- 10+ интерактивных тестов в production
- Поддержка multiple choice вопросов
- Многоязычность (ru/en)
- Темизация под дизайн платформы
-
Производительность
- Время загрузки тестов < 100ms
- Размер Quiz Engine: ~50KB (минифицированный)
- 0 внешних зависимостей в runtime
-
Удобство использования
- Добавление теста: один shortcode в Markdown
- Создание нового теста: JSON файл
- Без необходимости знания JavaScript
- Модулей с тестами: 3
- Общее количество тестов: 15
- Типы вопросов: single-choice, multiple-choice, true-false
- Языки: русский, английский (готовность к расширению)
- Обновление в репозитории
quiz - Обновление компонента в
hugo-templates:# Автоматическое обновление через GitHub Actions ./hugo-templates/scripts/update-component.sh --name quiz-engine --from-repo quiz - Автоматический rebuild всех модулей, использующих компонент.
- Текущая версия: v1.0.0
- Совместимость: Обратная совместимость гарантирована для v1.x
- Обновления: Автоматические для bug fixes, ручные для feature releases
- Простота: Минимум сложности при интеграции
- Надежность: Никаких внешних зависимостей
- Производительность: Все ресурсы статические
- Масштабируемость: Легко добавлять новые модули с тестами
- Maintenance: Простое обновление и поддержка
- Ручное копирование: Обновления требуют копирования файлов
- Дублирование кода: Quiz Engine копируется в каждый модуль
- Версионирование: Сложнее отследить версии в разных модулях
- Новые типы вопросов: drag-and-drop, fill-in-the-blank
- Аналитика: Базовая статистика прохождения тестов
- Улучшение UX: Анимации, лучшая обратная связь
- Прогресс tracking: Сохранение результатов пользователей
- Адаптивные тесты: Вопросы на основе предыдущих ответов
- API интеграция: Экспорт результатов во внешние системы
Интеграция Quiz Engine в платформу "ИНФОТЕКА" прошла успешно с использованием компонентного подхода в hugo-templates. Это обеспечивает:
- Быстрая реализация: Интеграция заняла 1 неделю вместо планируемых 2-3
- Высокая надежность: 0 проблем с зависимостями
- Простота использования: Авторы контента легко добавляют тесты
Архитектура готова для дальнейшего развития и масштабирования по мере роста платформы.