Как работает Irokez 0.8

Автор: o.s.a.

  1. Структура файлов
  2. Принцип работы роутера
  3. Шаблонизатор
  4. Интеграция верстки

Структура файлов

В корневой директории мы видим следующие каталоги:

  • 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/

  1. роутер ищет статический контроллер (папку "news");
  2. иначе ищет динамический контроллер (принцип тот же, что и поиск раздела в irokez 0.7, т.е. в БД ищется раздел с именем "news". Если такой раздел найден, то вызывается его собственный обработчик. Список обработчиков берется как раз из папки /handlers/dynamic/. Т.е. аналогично папке /scripts/ в irokez 0.7);
  3. иначе вызывается обработчик ошибки (например, 404).

Т.е. к динамическим контроллерам относятся скрипты, которые можно привязать к любому разделу (например: новости, галерея, обратная связь и т.д.) Статические контроллеры разделены на 4 категории:

  • admin - административная панель;
  • api - скрипты-обработчики ajax-запросов;
  • default - все остальные контроллеры (более подробно будет рассмотрен ниже);
  • system - системные контроллеры (визивиг, кэптча и др.

У роутера есть несколько особенностей:

  1. нет разницы между:
    • /handlers/static/test_section/
    • /handlers/static/default/test_section/
    Сделано это для того, чтобы логически разделить контроллеры.
    Т.е. в default мы размещаем контроллеры для фронтенда сайта (frontend).
  2. Оба варианта правильны:
    • /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/.

Шаблонизатор

Шаблонизатор обрабатывает только то, что заключено в фигурные скобки: "{" и "}"

А именно:

  • 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/
    Использование: используется для вывода блоков в шаблоне.

Интеграция верстки

Для интеграции верстки нужно:

  1. Создать шаблон страницы
    Шаблоны страниц создаются в директории /templates/pages/
  2. Разметить стили
    Стили нужно расположить в директории /public/css/common/
  3. Разметить картинки
    Картинки нужно расположить в директории /public/img/common/

Для того, чтобы прописать путь до файла стилей, нужно воспользоваться конструкцией {@css}common/style.css. Для картинок - {@img}common/picture.jpg

Tags: how-to file structure router template