Несколько лет назад я создал небольшой веб-сайт на PHP, который теперь вырос, и, как вы, наверное, догадываетесь, это немного путаница.Хотя у меня есть отдельный шаблон, который выполняет окончательный вывод html, я все же в конечном итоге вынужден обрабатывать большую часть html в части «бизнес-логики» кода.
Моя главная проблема заключается в том, чтостраница содержит различные виджеты (такие как «последние записи», реклама и т. д.), которые меняются от страницы к странице, и, следовательно, их html- (template-) код не может быть жестко закодирован в шаблоне.На самом деле, даже контейнер основного содержимого является виджетом, поскольку структура страницы (или макет) всегда одинаковы.
Так что в итоге я получил массив с $ templateData ['mainContent'], $ templateData['widget1'], $ templateData ['widget2'] и т. д., которые генерируются в части бизнес-логики кода.
Как мне решить эту проблему?
Посмотрев вокругв течение некоторого времени, кажется, есть 2 способа решить эту проблему:
Очевидным способом было бы использование выделенного языка шаблонов с наследованием и включением, как это делает django, но с учетом сложности этих языковЯ действительно не хочу изучать еще один из них.Кроме того, я заметил, что за время, проведенное с django, он не особенно быстр (особенно потому, что он соблазняет использовать этот шаблон для css и javascript).
Другой вариант будетиспользовать шаблоны, которые предоставляет сам PHP.Но это будет означать, что каждый виджет будет иметь свой собственный php-шаблон и будет генерировать свой html-код, включая файл-шаблон, и перехватывать результат, используя буферизацию вывода.Это хорошая идея?Так как я до сих пор получаю HTML внутри переменных внутри логической части.Кроме того, разве эта неправильная выходная буферизация для чего-то, для чего она не была предназначена?А как насчет производительности?(где находится буфер, из которого я пишу / читаю / очищаю? Сколько стоят вызовы функций ob_ *?)
Из того, что я видел, есть сторонники обоих вариантов.,Лично мне больше нравится вариант 2 (так как он вроде того, что я уже делаю), но html-in-переменные выглядит очень неправильно, и я сомневаюсь, что я решил бы что-нибудь таким образом.
Может быть, естьдругой вариант?Как вы решили эту проблему?