Как работает Irokez 0.8
Автор: o.s.a.
- Структура файлов
- Принцип работы роутера
- Шаблонизатор
- Интеграция верстки
Структура файлов
В корневой директории мы видим следующие каталоги:
- data - здесь хранятся данные (в основном различные конфиги);
- handlers - обработчики (скрипты, создаваемые разработчиками);
- include - главные скрипты (основной движок);
- public - доступные через браузер файлы (картинки, стили, JavaScript);
- templates - шаблоны страниц;
- tmp - временные файлы (логи, кеш и др.);
- userfiles - файлы, закачиваемые/скачиваемые пользователями (картинки для галереи, файлы и др.).
А так же файлы:
- .htaccess - файл дополнительной конфигурации веб-сервера Apache;
- path.ini - файл с конфигами путей;
- loader.php - главный скрипт (загрузчик), которому веб-сервер передает управление, после обработки файла .htacces.
Принцип работы роутера
Сначала сервер получает GET запрос, который обрабатывается "роутером".
Роутер работает с каталогом handlers, в котором мы видим следующие подкаталоги:
- dynamic - контроллеры динамических разделов;
- error - обработчики ошибок (403, 404 и др.);
- static - контроллеры статических разделов;
- tags - контроллеры тегов, используемых в шаблонах;
Принцип работы роутера на примере http://site.com/news/
- роутер ищет статический контроллер (папку "news");
- иначе ищет динамический контроллер (принцип тот же, что и поиск раздела в irokez 0.7, т.е. в БД ищется раздел с именем "news". Если такой раздел найден, то вызывается его собственный обработчик. Список обработчиков берется как раз из папки /handlers/dynamic/. Т.е. аналогично папке /scripts/ в irokez 0.7);
- иначе вызывается обработчик ошибки (например, 404).
Т.е. к динамическим контроллерам относятся скрипты, которые можно привязать к любому разделу (например: новости, галерея, обратная связь и т.д.) Статические контроллеры разделены на 4 категории:
- admin - административная панель;
- api - скрипты-обработчики ajax-запросов;
- default - все остальные контроллеры (более подробно будет рассмотрен ниже);
- system - системные контроллеры (визивиг, кэптча и др.
У роутера есть несколько особенностей:
- нет разницы между:
- /handlers/static/test_section/
- /handlers/static/default/test_section/
Т.е. в default мы размещаем контроллеры для фронтенда сайта (frontend). - Оба варианта правильны:
- /handlers/static/section1/controller.php
Этот вариант используется, если у данного раздела нет подразделов. Т.е. данный контроллер является конечным. - /handlers/static/admin/index/controller.php
Этот вариант используется, если у данного раздела есть подразделы. Например, в /handlers/static/admin/ есть множество подразделов (sections, templates и др.). Сейчас нет контроллера для главной страницы админ. панели (http://site.com/admin/), но если бы мы захотели его сделать, то расположили бы в /handlers/static/admin/index/. Это нужно для того, чтобы все дополнительные файлы для данного контроллера лежали в отдельной папке /handlers/static/admin/index/, а не нагромождались бы в корне /handlers/static/admin/.
- /handlers/static/section1/controller.php
Шаблонизатор
Шаблонизатор обрабатывает только то, что заключено в фигурные скобки: "{" и "}"
А именно:
- php-переменные
Пример: {$content}
Объявление: переменные объявляются в php-контроллере, который подгружает данный шаблон.
Использование: используются для вывода php-переменных в шаблон - js-переменные
Пример: {%var}
Объявление: переменные объявляются в js-контроллере, который подгружает данный шаблон
Использование: используются для вывода js-переменных в шаблон
- пути
Пример: {@img}
Объявление: список доступных путей можно посмотреть в файле path.ini
Использование: используется для вывода динамических путей в шаблоне. Например, {@img}picture.jpg или {@css}style.css - циклы
Пример: {for $i=1; $i<=10; $i++}…{end} или {foreach $data as $key=>$value} <b>{$key}</b>: {value} {end}
Использование: используется для вывода массивов данных в шаблоне.
- функции
Пример: {$a|htmlspecialchars} - т.е. htmlscialchars($a) или {$a|func1|func2} - т.е. func2(func1($1))
Использование: используется для применения php-функций в шаблоне. - блоки
Пример: {block type="news" /}
Объявление: /handlers/tags/block/
Использование: используется для вывода блоков в шаблоне.
Интеграция верстки
Для интеграции верстки нужно:
- Создать шаблон страницы
Шаблоны страниц создаются в директории /templates/pages/ - Разметить стили
Стили нужно расположить в директории /public/css/common/ - Разметить картинки
Картинки нужно расположить в директории /public/img/common/
Для того, чтобы прописать путь до файла стилей, нужно воспользоваться конструкцией {@css}common/style.css. Для картинок - {@img}common/picture.jpg