Использование PHP в шаблонах
Содержание |
Включение файлов на лету в публикуемых файлах
Для обеспечения быстродействия при публикации шаблонов желательно вынести отдельные, однотипные части шаблонов в файлы, которые будут публиковаться единожды, а затем включаться в остальные страницы при помощи PHP.
Как это сказывается на производительности
Представьте, что у вас 200 записей. Вы публикуете их. Данные в записи — это запросы к базе данных. Чем больше запросов — тем больше требуется ресурсов для выполнения задачи. Каждая запись, это (на примере стандартных шаблонов): получение самой записи, комментариев к ней, получение различных модульных шаблонов, получение последних записей, получение тегов для облака, и т.д. Большинство данных можно публиковать только один раз, используя отдельные индексные шаблоны, которые затем на лету включать в опубликованные файлы.
Какие части шаблонов можно вынести в отдельные файлы:
- Шапка
- Подвал
- Навигация
- Различные меню
- И т.д.
Как это сделать (на примере навигации)
Допустим, в шаблонах есть однотипные данные — навигация, которая, по идее, должна быть одинаковая на всех страницах. Но, поскольку каждая страница статическая, то при добавлении новых записей, на старых страницах информация в навигации может не обновиться. Поэтому необходимо:
- Создать индексный шаблон, назвав его, к примеру, «Навигация», с именем файла «navigation.php».
- Скопировать код навигации в этот шаблон.
- В шаблонах, где раньше находилась навигация, необходимо вместо неё добавить следующий код:
<?php include("/home/username/example.com/navigation.php"); ?>
Обратите внимание, что путь до файла должен быть абсолютным, то есть начинаться от корня сервера.
- И затем опубликовать все шаблоны.
После этого на всех страницах в навигации будет актуальная информация, а также снизится нагрузка на сервер. Шаблон навигация можно поставить в режим публикации статических файлов (по умолчанию), если необходимо, чтобы он публиковался автоматически, либо в ручной режим (шаблон опубликуется, когда вы это сделаете), либо в режим очереди публикации (необходимо использовать CRON через скрипт run-periodic-tasks).
То же самое, но с использованием модулей
- Вместо индексного файла необходимо создать модульный шаблон, например, «Navigation». Добавить в него код навигации.
- В его опциях указать «Обрабатывать как PHP включение».
- Затем в шаблонах, где использовалась навигация, добавить следующее:
<mt:Include module="Navigation" />
- После этого опубликовать все шаблоны.
Плюс этого метода, что можно указать время кеширования для шаблона «Navigation».