<small>Предыдущие статьи:

- ➡️ [Раздел 09. Параметризация](/docs/09-parametrization)
- ➡️ [Раздел 10. Мультипроектность](/docs/10-multiproject)
- ➡️ [Раздел 11. Модуль Base](/docs/11-module-base)
</small>
# SLOT-H: Модуль Free

Модуль Free отвечает за публичную часть сайта. Он доступен без авторизации и содержит страницы, которые видит пользователь при первом посещении.

---

## Состав модуля

### Главная страница

Контроллер `Index` обрабатывает запросы к главной странице. Он отвечает за отображение стартовой страницы проекта, которая задаётся в конфигурации.

### Страница About

Контроллер `About` содержит информацию о проекте или компании. Статическая страница, не требующая динамического контента.

### Страница Docs

Контроллер `Docs` содержит документацию или инструкции для пользователей. Статическая страница.

### Статические страницы

Контроллер `Page` обрабатывает статические страницы: политика конфиденциальности и пользовательское соглашение.

### Раздача статики

Контроллер `Scope` обслуживает статические файлы: CSS, JavaScript, шрифты. Файлы отдаются через контроллер, а не напрямую через веб-сервер. Это позволяет контролировать кеширование и версионирование файлов. При запросе файла система проверяет его хеш и отдаёт актуальную версию.

### API для публичной части

Контроллер `Person` предоставляет API-методы для работы с пользователями в публичной части: проверка статуса авторизации, получение уведомлений, обработка сессии.

---

## Отсутствие моделей

В модуле Free отсутствует папка `Models` и `DbTables`. Это демонстрирует, что модели являются опциональной частью модуля. Если модуль не работает с собственными таблицами в базе данных, папка `Models` не создаётся.

Это также подчёркивает принцип, заложенный в архитектуре: контроллеры не знают о моделях напрямую. Они вызывают модели тогда, когда это необходимо, и только те, которые нужны для конкретного экшена. Отсутствие папки `Models` в модуле не мешает контроллерам работать с моделями из других модулей, например, из `Base`.

---

## Структура модуля
```
Modules/Free/
├── Bootstrap.php          # Загрузка модуля
├── Crud.php               # Права доступа
├── Preloader.php          # Предзагрузка (авторизация)
├── Controllers/           # Контроллеры
│   ├── About.php          # Страница "О нас"
│   ├── Docs.php           # Страница документации
│   ├── Index.php          # Главная страница
│   ├── Page.php           # Статические страницы (policy, terms)
│   ├── Person.php         # API публичной части
│   └── Scope.php          # Раздача статики
├── Public/                # CSS, JS
│   ├── css/
│   │   └── Project_1/
│   │       ├── About/
│   │       │   └── index.css
│   │       ├── Docs/
│   │       │   └── index.css
│   │       ├── Index/
│   │       │   ├── auth.css
│   │       │   └── index.css
│   │       └── Page/
│   │           └── policy_terms.css
│   └── js/
│       └── Project_1/
│           ├── About/
│           │   └── index.js
│           ├── Docs/
│           │   └── index.js
│           └── Index/
│               ├── auth.js
│               └── index.js
└── Views/                 # Шаблоны
    └── Project_1/
        ├── About/
        │   └── index.phtml
        ├── Docs/
        │   └── index.phtml
        ├── Index/
        │   ├── auth.phtml
        │   └── index.phtml
        └── Page/
            ├── policy.phtml
            └── terms.phtml
```
---

## Права доступа

Модуль Free доступен без авторизации. Все контроллеры модуля имеют права на чтение (`READ_RULE`) для всех пользователей, включая неавторизованных. Это позволяет показывать публичные страницы без входа в систему.

---

## Особенности реализации

- Статические страницы About и Docs имеют собственные представления и стили. Страницы policy и terms используют общий стиль `policy_terms.css`.
- Контроллер `Scope` обрабатывает запросы к статическим файлам через хеш, что гарантирует актуальность файлов при каждом изменении. Браузер кеширует файлы, но при изменении хеш меняется, и браузер загружает новую версию.
- Модуль Free может быть расширен дополнительными контроллерами и представлениями для конкретного проекта. Все публичные страницы, не требующие авторизации, должны располагаться в этом модуле.

---

## Что дальше?

- ➡️ [Раздел 13. Модуль Geo](/docs/13-module-geo)
- ➡️ [Раздел 14. Создание модуля](/docs/14-module-custom)
- ➡️ [Раздел 15. Структура базы данных](/docs/15-database-diagram)
