[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Холивар про шаблонизатор.
Страницы: 1, 2, 3, 4, 5, 6, 7, 8
Игорь_Vasinsky
зачем спорить с человеком или дискутировать - чтобы понять для себя что-то, который пишет

if (user == true){}


это регресс.

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
twin
BaNru
Цитата
А что же ты на работе-то не предложишь внедрить и объездить? (это не сарказм и не риторический вопрос)
А я скорее всего так и сделаю. Слава Богу должность позволяет. Только в обратном порядке - сначала обкатаю, потом по результатам попробую внедрить. Я собственно для того и затеял эту бучу. Хочу услышать мнения, может есть действительно серьёзные подводные камни.
Цитата
Так данные то в любом случае должны поступать из "движка". Переменная, константа, функция, ещё что-то.
Ну так а в чем тогда разница между Твигом к примеру и этой схемой? Если все равно в движок лезть надо...
Цитата
По твоей схеме проще, когда сверстано. А вот верстать не просто. Постоянно лезть в шаблонизатор и писать очередную конструкцию, чтобы вывести дату в другом формате.

Завтра заказчику или начальству взбредет цикл изменить, сделать его задом наперед, так лезть в шаблонизатор.
Это неверное заключение. Дело в том, что уже несколько лет у нас используется моя наработка. Почти тоже самое, только без {{ }} (обычные <? ?>) и шаблоны режутся на куски, как в DLE.

Так что опыта работы с этой схемой есть у меня. И все довольны. А так походу еще довольнее будут)))

PS Правда я надеялся на более конструктивные рассуждения, именно по поводу реализации такого алгоритма. А что кому удобнее - это дело индивидуальное. Я же не революцию хочу затеять, просто попробовать некую альтернативу устоявшимся стереотипам.

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
Arh
ИМХО.
Шаблонизатор нужен для разделения логики и верстки (логика в файле php, верстка подключается из файла html) вот и всё.

Дальше уже идут костыли.
Например что бы сделать в шаблоне <? echo $var;?> нужно шаблон инклюдить. И вроде всё отлично, подключил шаблон через include и верстка в отдельном файле и логика работает, если нужно, стильно, удобно, молодежно.
А потом появляется задача, где шаблон нужно вывести циклом (например список пользователей с аватарками и прочей инфой). Вы же не будете в цикле подключать файл 150 раз что бы его выполнить.
Вот тут и появляются теги {$name}. Сначала загрузили в переменную шаблон, а потом в цикле сколько угодно раз её обработали. Так же с условиями.

Вообще меня тоже интересует этот вопрос, как все сделать правильно =)
Сейчас использую примерно такую конструкцию.

если нужно подключить и сразу обработать без цикла, то подключаю так
$tags; //массив с тегами (ключ это имя тега)
echo $Tpl->Load('index.html')->Tags($tags);


если циклом то сначала подключаю шаблон, потом обрабатываю.
$html = $Tpl->load('index.html');
while ($row = $query->fetch()) {
echo $Tpl->Tags($html,$row);
}


Обрабатываются только переменные {$var} и константы {CONST}, условий пока что не делал, да и не уверен что они нужны.

Под капотом $Tpl->Tags
preg_match_all - который получает массив с найденными в шаблоне тегами
и str_replace - который заменяет в шаблоне теги из массива preg на теги из массива $row, который передал в цикле.

_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
twin
Arh
Цитата
А потом появляется задача, где шаблон нужно вывести циклом
Обычо часть шаблона. Весь то зачем выводить циклом smile.gif

Для того и топик - как лучше шаблон на эти части поделить.

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
Arh
Цитата (twin @ 26.05.2014 - 11:41)
Обычо часть шаблона. Весь то зачем выводить циклом smile.gif

Например шаблон новости, вывод списка новостей =)



_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
twin
Arh
Цитата
Например шаблон новости, вывод списка новостей =)
Что такое "шаблон новости"? Предполагаю, что это часть страницы (вернее шаблона страницы). В отдельном файле это? Тут вопрос стоит - как сделать один шаблон страницы, в одном файле, а уже в нем разместить и новости и хобости и прочую лабуду. И вот как заставить крутиться в цикле эту часть. Ну или вывести часть общего шаблона в зависимости от условий.

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
kaww
Цитата (twin @ 26.05.2014 - 07:41)
Обычо часть шаблона. Весь то зачем выводить циклом
,
например. комментарии к новостям. т.е. под текстом новости есть список комментариев, так же форма для комментирования, которая работает асинхронно + есть станица "Все комментарии", на которой агрегируются все комментарии ко всем новостям. Так вот. в этом случае как раз логично в отдельном файле хранить шаблон комментария. В противном случае нам придется поддерживать актуальность уже трех файлов - это старница новости, страница списка комментариев и ответ на успешное добавление комментария.
Arh
Цитата (twin @ 26.05.2014 - 12:07)
Тут вопрос стоит - как сделать один шаблон страницы, в одном файле.

То есть имеется сайт, у него только один шаблон index.html?
Если я правильно понял, то это же получиться огромный шаблон.
Это всё равно что написать весь проект в одном файле index.php, только тут 2 файла. index.php и index.html smile.gif


_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
twin
Цитата (kaww @ 26.05.2014 - 08:23)
Цитата (twin @ 26.05.2014 - 07:41)
Обычо часть шаблона. Весь то зачем выводить циклом
,
например. комментарии к новостям. т.е. под текстом новости есть список комментариев, так же форма для комментирования, которая работает асинхронно + есть станица "Все комментарии", на которой агрегируются все комментарии ко всем новостям. Так вот. в этом случае как раз логично в отдельном файле хранить шаблон комментария. В противном случае нам придется поддерживать актуальность уже трех файлов - это старница новости, страница списка комментариев и ответ на успешное добавление комментария.

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

Вообще, я удивляюсь вот чему. Почему программисты так боятся кнопок ctrl+с и ctrl+v? из кожи вон готовы вылезти, дабы не повторить код. Ну не всегда это хорошо, нужно искать золотую середину. Иногда и повторы бывают на пользу.

Arh
Цитата
То есть имеется сайт, у него только один шаблон index.html?
Если я правильно понял, то это же получиться огромный шаблон.
Нет, не правильно. Не на весь сайт, а на отдельную страницу. Допустим главная. Она может состоять из кучи всего - новостей, статей, комментариев, прочей лабуды. Или регистрация - форма, вывод ошибок, правила и так далее. Так вот, чтобы не делать по файлу на каждую часть и применяются шаблонизаторы. Вернее та их часть, которая отвечает за логику отображения. Если все в разных файлах, то проще вытащить логику в PHP. А если в одном? Поэтому СМАРТИ и имеет свой синтаксис с логическими элементами. И в шаблонах используются те же циклы, условия и пр. Которые делят шаблон на части.

А я хочу поделить шаблон без логики. Вернее вытащив её туда, где ей положено быть - в PHP.

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
Arh
twin
Я стараюсь мыслить "модульно" и по этому не понимаю зачем делать один шаблон под новости, статьи и комментарии, когда новости, статьи и комментарии это три разных модуля, которые могут быть отключены, не установлены или у пользователя нет прав на просмотр одного из модулей или администратор решил не выводить на этой странице статьи или решил по мимо новостей и прочей лабуды вывести туда чат. Динамика пропадает.
И еще пропадёт такая удобная фишка, как отключить модуль для пользователей, пока обновляешь его или правишь, так как шаблон той же формы отправки останется, а модуля уже нет.

_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
twin
smile.gif Так а в чем противоречие то? Отключить - подключить, это все равно на уровне PHP решается. И тут нет разницы, один файл или несколько.

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
Arh
Цитата (twin @ 26.05.2014 - 13:09)
smile.gif Так а в чем противоречие то? Отключить - подключить, это все равно на уровне PHP решается. И тут нет разницы, один файл или несколько.

А шаблон в ручную редактировать придётся?
Ведь если подключить новый модуль, нужно будет и в шаблон вставлять новую верстку.

_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
twin
Цитата
А шаблон в ручную редактировать придётся?
Ведь если подключить новый модуль, нужно будет и в шаблон вставлять новую верстку.
Естественно вручную. smile.gif Других способов редактирования шаблонов не придумали пока. А в чем разница, добавить новый "модуль" в отдельный файл или вставить в общий шаблон? А лишние обращения к ФС как? Я больше чем уверен, что компиляции у тебя нету.

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
Arh
Цитата (twin @ 26.05.2014 - 14:15)
Цитата
А шаблон в ручную редактировать придётся?
Ведь если подключить новый модуль, нужно будет и в шаблон вставлять новую верстку.
Естественно вручную. smile.gif Других способов редактирования шаблонов не придумали пока. А в чем разница, добавить новый "модуль" в отдельный файл или вставить в общий шаблон? А лишние обращения к ФС как? Я больше чем уверен, что компиляции у тебя нету.

Не понял что такое ФС (файловая система?)
И не понял про компиляцию в пхп.

Зачем модуль добавлять в какой то файл?
Есть модуль (папка с файлами), информация о модуле лежит в базе, там же лежит информация где и кому подключать модуль.
В главном шаблоне есть стандартные теги {CONTENT} {LEFT} {RIGHT} итд
администратор сайта в панели управления выбирает в какой тег выводить модуль, в крайнем случае он добавит свой тег в шаблон.

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

Конечно дергать много маленьких файлов не есть хорошо sad.gif, но в принципе можно их в оперативку засунуть =)

_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
BaNru
Игорь_Vasinsky, так, для сведения - это вылидный JS синтаксис.

Цитата
Ну так а в чем тогда разница между Твигом к примеру и этой схемой? Если все равно в движок лезть надо...

Есть разница

Давай предположим вывод товара на главную. Как это обычно делается

цикл i++ {
блок с товаром, ценой и т.д.
если i кратно 2 {
какой-то дополнительный элемент
}
}


Ты можешь это реализовать заранее в шаблоне? Но как? Ты не знаешь:
- i кратно чему, вдруг завтра надо 3 или 4?
- ты не знаешь что будет заложено в "какой-то дополнительный элемент"
- а вдруг там надо будет ещё одно условие, или два, три?

Переменные в любом случае передаются в шаблон.
Но если ты ограничил в шаблоне возможности, полностью связал по рукам и ногам, то как выполнить if (user == true){} ?
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.