![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| =Женек= |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 548 Регистрация: 20.2.2005 Репутация: нет Всего: 1 |
Пишу простенький шаблонизатор для себя.
Имена переменных заменяю на значения с помощью $str_replace Столкнулся вот с какой задачей: есть фрагмент HTML-шаблона. В нем есть фрагмент, который может повторяться один или несколько раз. Я его выделяю тегами. Ну например
Как бы мне сделать функцию, которая обнаружив тэг <%item вставит его содержимое столько раз, сколько элементов в массиве $item ? Ваши идеи? |
|||
|
||||
| Feldmarschall |
|
|||
|
Новичок ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2641 Регистрация: 11.12.2007 Репутация: 22 Всего: 32 |
Это сообщение отредактировал(а) Feldmarschall - 7.5.2008, 20:07 |
|||
|
||||
| =Женек= |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 548 Регистрация: 20.2.2005 Репутация: нет Всего: 1 |
Уважаемый Генералиссимус!
Я читал разные статьи про шаблонизацию. В одних из них предлагалась пассивная конструкция через include : <tr><td><?=$caption?></td></tr> В других = активная, путем $str_replace, с шаблоном типа <tr><td>{caption}</td></tr> Я выбрал второй вариант и спрашиваю как реализовать детали в этом варианте. Это сообщение отредактировал(а) =Женек= - 7.5.2008, 20:57 |
|||
|
||||
| Canarat |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 212 Регистрация: 11.3.2008 Где: Каспий Репутация: 5 Всего: 5 |
=Женек=, тов.главнокомандующий привел контр-пример, подумай над ним, может примешь другое решение.
А сам анализ абсолютно элементарен. а) Без регулярных выражений. Шаблонизатор проходит посимвольно весь шаблон, встречая последовательность "<%" начинает "собирать" все символы до закрывающего тега. Потом, встретив его, разбирает строку, т.е. проводит операции, которые ты описал в своем посте. б) С регулярными выражениями. Используется callback-функция для замены последовательностей нужных символов. В этой функции проводятся все операции. |
|||
|
||||
| awers |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1465 Регистрация: 22.3.2006 Где: Россия, Таганрог Репутация: 21 Всего: 31 |
Кхе кхе... либо smarty либо xml. Нафиг велосипед крутить? Для xml могу дать класс
|
|||
|
||||
| =Женек= |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 548 Регистрация: 20.2.2005 Репутация: нет Всего: 1 |
Просто боюсь купив лопату получить впридачу громоздкий бульдозер. Как он в плане ресурсоемкости? |
|||
|
||||
| awers |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1465 Регистрация: 22.3.2006 Где: Россия, Таганрог Репутация: 21 Всего: 31 |
=Женек=, на всех проектах использую, никто не жалуется
|
|||
|
||||
| =Женек= |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 548 Регистрация: 20.2.2005 Репутация: нет Всего: 1 |
Ознакомился со Smarty - великолепная вещь, буду изучать. Спасибо.
|
|||
|
||||
| Canarat |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 212 Регистрация: 11.3.2008 Где: Каспий Репутация: 5 Всего: 5 |
Изучишь основательно - почитай пару холиваров(даже тут есть немало таких), в которых он задействован. Найдешь кучу недостатков.
Исходя из кода, который ты привел в первом посте - лучше взять что-либо полегче. Да и вообще, в любом случае стоит выбирать что-либо полегче. |
|||
|
||||
| Feldmarschall |
|
|||
|
Новичок ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2641 Регистрация: 11.12.2007 Репутация: 22 Всего: 32 |
Canarat, мне не нравится, что у него в щаблонизаторе оператор цикла.
Если бы был классический блочный - я бы понял. А так, он делает, действительно, второй смарти. А недостатки везде есть. У нас у всех недостатки. Та к что теперь - и не жить совсем? =) |
|||
|
||||
| Canarat |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 212 Регистрация: 11.3.2008 Где: Каспий Репутация: 5 Всего: 5 |
Feldmarschall, я просто в целом против псевдо-синтаксиса РНР в шаблонах.
А насчет второго смарти...логика в шаблонах должна быть, но настолько элементарного вида, чтобы не создавалось ощущение, что это обертка РНР-кода Вообще это интересная тема, до каких пределов в шаблоне должно присутствовать управление логикой. Хочу создать, но опять развернется холивар по типу xslt vs. smarty. |
|||
|
||||
| Feldmarschall |
|
|||
|
Новичок ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2641 Регистрация: 11.12.2007 Репутация: 22 Всего: 32 |
Всё уже отхоливарено до нас - см. http://forum.vingrad.ru/forum/topic-54581.html =)
Лично для меня смарти ничем не отличается от xslt. Как раз с точки зрения пределов управления логикой. А главный вывод, который я для себя сделал - шаблонизатор делает программист для программиста =) |
|||
|
||||
| мухр |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 136 Регистрация: 11.8.2005 Репутация: нет Всего: нет |
=Женек=, на мой взгляд, самый удачный шаблонизатор - patTemplate. Тег-основанный, ничего лишнего не содержит. Использует объектную модель.
|
|||
|
||||
| Canarat |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 212 Регистрация: 11.3.2008 Где: Каспий Репутация: 5 Всего: 5 |
Feldmarschall, хороший вывод, я всегда старательно закрываю на него глаза
Нет, та тема - это очень много мусора и очень мало дела. Например классная цитата из сообщения на одной из последних страниц:
http://forum.vingrad.ru/index.php?showtopi...t&p=1426829 И не подумаешь, что речь идет о шаблонизаторах.. |
|||
|
||||
| skyboy |
|
|||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 75 Всего: 260 |
вполне логично. но это ж не недостаток
до тех пор, пока это логика вывода, а не выборки из БД или обработки типа explode/preg_replace и т.д. Добавлено через 17 секунд Никак не могу найти пост, где говорится, что шаблонизатор не "логику от представления" отделяет, а логику обработки данных отлогики вывода :( Добавлено через 1 минуту и 33 секунды аа... это аллюзия к мифу "шаблонизатор - для дизайнера"? |
|||
|
||||
![]()
|
| Правила форума "PHP" | |
|
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |