fenom/docs/dev/internal.md
2013-08-22 00:03:44 +04:00

5.9 KiB
Raw Blame History

How it work

Терминология

  • Исходный шаблон - изначальный вид шаблона в специальном синтаксисе
  • Код шаблона - резальтат компиляции шаблона, PHP код.
  • Провайдер - объект, источник исходных шаблонов.

Классы

  • Fenom - является хранилищем

    а также обладает соответсвующими setter-ами и getter-ами для настройки.

  • Fenom\Tokenizer - разбирает, при помощи tokens_get_all, строку на токены, которые хранит массивом. Обладает методами для обработки токенов, работающими как с конкретными токенами так и с их группами.

  • Fenom\Render - простейший шаблон. Хранит

  • Fenom\Template - шаблон с функцией компиляции, расширен от Fenom\Render. Содержит различные методы для разбора выражений при помощи Fenom\Tokenizer.

  • Fenom\Compiler - набор правил разбора различных тегов.

  • Fenom\Modifier - набор модификаторов.

  • Fenom\Scope - абстрактный уровень блочного тега.

  • Fenom\ProviderInterface - интерфейс провадеров шаблонов

  • Fenom\Provider - примитивный провайдер шаблонов с файловой системы.

Процесс работы

  • При вызове метода Fenom::display($template, $vars) шаблонизатор ищет в своем хранилище уже загруженный шаблон. Если шаблона нет - либо загружает код шаблона с файловой системыб либо инициирует его компиляцию. Последовательность компиляции шаблона следующая:
    • Создается "пустой" Fenom\Template
    • В него загружется исходный шаблон из провайдера
    • Исходный шаблон проходит pre-фильтры.
    • Начинается разбор исходного шаблона.
      • Ищется первый открывающий тег символ - {
      • Смотрятся следующий за { символ.
        • Если } или пробельный символ - ищется следующий символ {
        • Если * - ищется *}, текст до которого, в последствии, вырезается.
        • Ищется символ }. Полученный фрагмент шаблона считается тегом.
          • Если был тег {ignore} название тега проверяется на закрытие этого тега.
          • Для тега создается токенайзер и отдается в диспетчер тегов
          • Диспетчер тега вызывает различные парсеры выражений, компилятор тега и возвращает PHP код.
      • Проверяется стек на наличие не закрытых блоков тегов
    • PHP код проходит post-фильтры
    • Код шаблона сохраняеться на файлувую систему
    • Код шаблона выполняется для будущего использования