файл main_menu:

файл menu:

сервер: www.macmax.ru
проект: /site
обращение к проекту: /site/index.php?
запрошенный файл: /readme/index.html
виртуальная папка: /readme/
виртуальный файл: index.html

 

тег <content> файла /readme/index.html:

И зачем хранить этот файл на сервере? Зачем всем знать как что устроено?…
Лучше запомнить и удалить всё содержимое папки /readme/ :-)

Шаблонизатор. 
Набор скриптов, обеспечивающий создание небольшого сайта на основе шаблонов.

Требования

Для работы необходим сервер, поддерживающий выполнение PHP-скриптов (PHP: Hypertext Preprocessor). Для использования не требуется знание программирования, а только знание языка гипертекстовой разметки документов HTML (HyperText Markup Language) Здесь и далее предполагается, что ваш сервер настроен на исполнение файлов PHP-скриптов, имеющих расширение файлов .php, а файлы с расширением .html будут показаны пользователю как html-код. Если настройки вашего сервера другие, то необходимо в любом UTF-8 совместимом текстовом редакторе изменить соответствующие строки в файле index.php. Затем следует переименовать файлы, исправив расширения на нужные.

Для работы необходима поддержка языка PHP. Желательно версии 5.2 и выше. Все файлы примеров работают в кодировке UTF-8, что более предпочтительно, по сравнению с кириллическими Win и KOI. Хотя сама обслуживающая программа не использует дополнительные специфические функции, все же желательно, чтобы PHP-сборка включала расширения: -enable-utf8 и -enable-unicode-properties. Iconv тоже должен быть сконфигурирован с поддержкой UTF-8.

Установка

В любую папку на сервере (в том числе можно использовать корневую папку веб-пространства) скопируете содержимое дистрибутива. Будем называть эту папку корневой папкой проекта. Сейчас это папка /site, которая находится в корне веб-пространства сервера www.macmax.ru.

Если HTTP-сервер работает под Apache 1.3+ или Apache 2.0+, то очень желательно настроить mod_rewrite для защиты системных папок от прямого обращения к ним, а также для удаления index.php из строки запроса, чтобы URL’ы были нормальные. Удаление index.php из строки запроса позволит вам использовать привычные относительные или абсолютные ссылки на страницах. В противном случае необходимо следить за тем, чтобы в ссылках был корректный путь. Пример настроек можно найти в файле example.htaccess.

Дистрибутив уже настроен на работу. Дополнительные финишные настройки можно осуществить редактируя файл index.php. Редактировать файлы необходимо в UTF-8 совместимом редакторе. Если PHP ниже версии 5.2, вам необходимо изменить значение в строке контроля версии файла index.php. Обслуживающая программа содержит код, совместимый с PHP версии 4.3.2 и выше.

После копирования файлов на сервер обратитесь к index.php. Будет выполнен тест работоспособности. Сперва проверяется версия PHP и наличие трёх системных папок. Если пути ошибочны обязательно отредактируйте index.php, записав туда верные имена папок проекта. Далее проверяется сборка PHP на наличие функций которые не используются шаблонизатором, но могут вам понадобиться для работы в режиме с дополнительными возможностями. Если вы не предполагаете использовать дополнительные возможности, то на результаты тестов сборки PHP можно не обращать внимания. Когда вы будете удовлетворены результатами тестов, нужно удалить с сервера файл install.php и приступать к эксплуатации проекта.

О том, как и что

Этот шаблонизатор предназначен для небольших сайтов, которые обновляются не очень часто. Скрипты предоставляются бесплатно «KAK ЕСТЬ» и являются свободным программным обеспечением.

В корне проекта вы найдёте три папки. Первая содержит системные файлы, обеспечивающие всю работу по построению сайта на основе шаблонов (папка system). Редактировать содержимое этой папки не следует, если вы не понимаете последствия ваших действий. Все внесённые вами изменения в файлы этой папки могут поменять функциональность и идеологию работы шаблонизатора. Шаблоны, которые задают внешний вид страниц должны находиться в папке шаблонов (папка templates). А контент страниц, который будет подставлен в шаблон, должен быть представлен файлами в папке контента (папка html). Имена папок и место их расположения можно изменить, о чем необходимо записать в настройках стартового файла index.php.

Все используемые файлы изображений, подгружаемые CSS и JS файлы, и прочие им подобные необходимо хранить вне названных папок. В дистрибутиве для этого есть отдельная папка media. В папке шаблонов должны быть только шаблоны, в папке html только файлы с подгружаемым кодом, а в папке system управляющие файлы.

Папка HTML является корнем вашего проекта. В ней находятся файлы, которые будут запрашивать посетители сайта. Иерархия папок также учитывается. Кроме непосредственно файлов контента вы можете хранить здесь и файлы с кусками html-кода, который можно подгружать и использовать многократно на разных страницах сайта.

Обращение к странице проекта выглядит так:

<сервер><путь_до_проекта>index.php?<путь><файл.html>
Если с помощью Apache mod_rewrite было настроено обращение с нормальным URL, то так:
<сервер><путь_до_проекта><путь><файл.html>
Например, к этой странице можно обратиться
так: http://www.macmax.ru/site/index.php?/readme/index.html
или так: http://www.macmax.ru/site/readme/index.html
В любом случае запускается файл index.php и ему прямо или через rewrite rule передаётся адрес желаемой страницы.

После получения адреса, запрошенный файл ищется в папке html проекта. Если файл не найден, то выдаётся стандартное сообщение об ошибке 404 (Not Found). При успешном поиске, содержимое файла запоминается как SOURCE для дальнейшего использования. В корне html-папки проекта ищется файл с именем default_html и его содержимое запоминается как DEFAULT. Наличие в корне html-папки проекта файла default_html обязательно.

В коде SOURCE ищется html-тег с именем <template_name>, который должен содержать имя шаблона. Если такого тега нет или в папке шаблонов нет файла с таким именем, то в качестве шаблона будет использоваться шаблон default_template. Наличие в корне папки шаблонов файла default_template обязательно.

В коде шаблонов, в коде запрашиваемых файлов и в коде подгружаемых файлов можно использовать специальные метки, которые будут обработаны шаблонизатором. Метка начинается с символов «#{», затем сразу следует символ-код подстановки, затем латинские буквы имени и в конце символ «}».

Метки переменных (символ-код: $)

МеткаЗначениеОписание
#{$server_name}www.macmax.ru Имя сервера
#{$web_root}/site Папка проекта на сервере
#{$uri_prefix}/site/index.php? Обращение к проекту. Эта переменная хранит в себе строку, которую необходимо использовать для построения корректных ссылок. Если было обращение через index.php, то значение этой переменной содержит «index.php?». Чтобы записать корректную ссылку на эту страницу надо в коде поставить:
#{$uri_prefix}/readme/index.html
Посмотрите примеры обращения через index.php и без него (второй вариант будет работать только с настроенным Apache mod_rewrite). Если вы настроили URL rewriting для скрытия запускающего файла из  URL, то в файле index.php поставьте TRUE как значение $URL_REWRITING, чтобы получить правильное значение префикса.
#{$uri}/readme/index.html Запрошенный файл
#{$dirname}/readme/ Папка, где находится запрошенный файл
#{$filename}index.html Имя запрошенного файла

Метки подгружаемых тегов (символ-код: %)

МеткаПримерОписание
#{%<имя_тега>}#{%test} Будет подгружено содержимое тега <test>, то есть строка «#{%test}» <test>будет заменена этим содержимым</test> Результат:

будет заменена этим содержимым

Нужный тег ищется в SOURCE. Если там он не найден, то поиск продолжается в DEFAULT, если и там не найден, то будет произведена замена на пустую строку, то есть просто стирается метка. Это даёт возможность организовать значения тегов по умолчанию, записав их в DEFAULT. Например можно записать DEFAULT тег <title> и если в SOURCE не будет заголовка <title>, то подставиться значение по умолчанию.

Метки подгружаемых файлов (символ-код: ^)

МеткаПримерОписание
#{^<имя_без_расширения>}#{^test} Будет подгружен код из файла test.html, то есть строка «#{^test}» будет заменена содержимым файла test.html Результат:

Это код из файла test.html

Нужный файл ищется рядом с SOURCE. Если файл с таким именем не найден он ищется в корне html-папки проекта. Если и там не найден, то поиск продолжается в папке шаблонов. И если опять не найден, то метка удаляется. В демонстрационном комплекте эта особенность поиска используется для вывода меню.

Формирование страницы, которую увидит посетитель происходит по правилам подстановок в несколько этапов. Первым этапом формирования кода выводимой страницы в код шаблона вставляются значения переменных. Затем в код подгружается значения тегов, после вставляется содержимое файлов, которые обозначены в метках.

Вторым этапом подгружается PHP-обработчик, которому передаётся сформированный код. По умолчанию дистрибутив настроен так, что вызов предварительного обработчика не происходит, поскольку эта опция предназначена для продвинутых пользователей. Если вы не знакомы с языком программирования PHP, или не планируете использования дополнительного PHP-обработчика, то не включайте эту опцию и смело пропустите описание работы второго этапа. Включение происходит путём редактирования соответствующей строки в файле index.php. Предварительный обработчик должен считать содержимое массива $input, изменить $input['html_code'], который будет выведен на экран, записать нужные значения в массив $output, ключи которого являются метками переменных в тексте. В некоторых случаях допустимо изменение $input['html_source'] или $input['html_default'], поскольку они используются в третьем этапе. Имя файла предварительного обработчика совпадает с именем запрашиваемого файла, но с разрешением .php (или то, которое использует ваш сервер). Если предварительный обработчик с таким именем не найден, то произойдёт загрузка файла default_php из корня папки html или корня папки шаблонов.

Третий этап повторяет первый, но уже с обработанным текстом. Снова обрабатываются теги, затем файлы, и затем переменные. Полученный HTML выводиться на экран.

Эти странички иллюстрируют возможности шаблонизатора. Посмотрите их код и все будет понятно.