Сделанный на заказ PHP шаблонизатор - PullRequest
2 голосов
/ 01 ноября 2011

Как небольшая часть университетского проекта, над которым я работаю (пользовательская система управления проектами на основе MVC), мне нужно разработать шаблонизатор. Я не хочу использовать автономную систему, такую ​​как Smarty, потому что я сам написал все остальные части проекта и не хочу сейчас возвращаться к этому.

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

Проблема, с которой я сталкиваюсь, заключается в том, что когда дело доходит до зацикливания - то есть таблицы пользователей или списка категорий. На данный момент у меня есть файл шаблона для страницы (users.html), который содержит открывающий и закрывающий теги, с тегом шаблона между ними, называемым {users}. Затем у меня есть другой файл шаблона (users-detail.html), в котором отображается строка таблицы с информацией о пользователе. Я создаю новый экземпляр шаблона users-detail.html, добавляю данные, анализирую их, затем помещаю вывод (строка HTML) в массив. Затем я зацикливаю этот массив, присоединяю все строки вместе, затем назначаю это тегу {users} в файле шаблона users.html.

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

Если у кого-нибудь есть какие-либо советы / рекомендации о том, как мне этого добиться, или какие-либо учебные пособия, которыми я мог бы следовать, чтобы получить вдохновение, которое было бы очень ценно.

Заранее спасибо.

1 Ответ

1 голос
/ 01 ноября 2011

Я видел такой подход раньше (включая еще один шаблон для внутренних циклов).Раньше я работал над старой версией vbulletin , которая делает (или делала) это.Это усложняет ситуацию, потому что вы не можете просто добавить цикл в шаблон - без настройки нового шаблона для каждого слоя цикла.

Я бы посоветовал вам вместо этого идти по маршруту Smarty .

Классически это утверждение:

Я не хочу использовать автономную систему, такую ​​как Smarty, потому что я написал каждую другую частьсамого проекта и не хочу сейчас возвращаться к этому.

... означает, что вы действительно должны просто использовать Smarty.В реальном мире это было бы плохим оправданием для самореализации чего-либо.Но я такой же, как вы, и я понимаю, что вы хотите что-то реализовать самостоятельно (потому что вы хотите учиться, вам весело, вы перфекционист и т. Д.).Пока вы делаете это в свое время и это личный проект, продолжайте.

Стоит изучить Smarty, чтобы увидеть, как он работает (не только синтаксис, но и как он компилирует шаблоны, хранитскомпилированная версия и т. д.).Вам удобно писать токенайзер / парсер на PHP, который может компилировать ваш язык шаблонов и выводить PHP?Если вы достаточно продвинуты, чтобы сделать это, сделайте это.В самом простом случае вы читаете тег типа {foreach from=$something} и как-то переводите его в <?php foreach ($something as $thing) { ?>.Вы проверяете типы токенов и т. Д., Чтобы убедиться в правильности тега шаблона и т. Д.

...