Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Самопальный простенький шаблонизатор 
:(
    Опции темы
=Женек=
Дата 7.5.2008, 20:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 548
Регистрация: 20.2.2005

Репутация: нет
Всего: 1



Пишу простенький шаблонизатор для себя.
Имена переменных заменяю на значения с помощью $str_replace


Столкнулся вот с какой задачей: есть фрагмент HTML-шаблона. В нем есть фрагмент, который может повторяться один или несколько раз. Я его выделяю тегами.

Ну например

Код

<table>
<tr><td>{caption}</td></tr>
<%item <tr><td>{value}</td></tr> %>   // - эта строка может повторяться несколько раз, обозначена "<%"
</table>



Как бы мне сделать функцию, которая обнаружив тэг <%item вставит его содержимое столько раз, сколько элементов в массиве $item ?
Ваши идеи?
PM MAIL   Вверх
Feldmarschall
Дата 7.5.2008, 20:07 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 22
Всего: 32



Код

<table>
<tr><td><?=$caption?></td></tr>
<? (foreach $item as $value):?>  <tr><td>{value}</td></tr> <?endforeach?>   // - эта строка может повторяться несколько раз, обозначена "<%"
</table>

 smile 

Это сообщение отредактировал(а) Feldmarschall - 7.5.2008, 20:07
PM   Вверх
=Женек=
Дата 7.5.2008, 20:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 548
Регистрация: 20.2.2005

Репутация: нет
Всего: 1



Уважаемый Генералиссимус!

Я читал разные статьи про шаблонизацию.
В одних из них предлагалась пассивная конструкция через include : <tr><td><?=$caption?></td></tr>
В других = активная, путем $str_replace, с шаблоном типа <tr><td>{caption}</td></tr>


Я выбрал второй вариант и спрашиваю как реализовать детали в этом варианте.





Это сообщение отредактировал(а) =Женек= - 7.5.2008, 20:57
PM MAIL   Вверх
Canarat
Дата 7.5.2008, 22:31 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 212
Регистрация: 11.3.2008
Где: Каспий

Репутация: 5
Всего: 5



=Женек=, тов.главнокомандующий привел контр-пример, подумай над ним, может примешь другое решение.

А сам анализ абсолютно элементарен.
а) Без регулярных выражений. Шаблонизатор проходит посимвольно весь шаблон, встречая последовательность "<%" начинает "собирать" все символы до закрывающего тега. Потом, встретив его, разбирает строку, т.е. проводит операции, которые ты описал в своем посте.
б) С регулярными выражениями. Используется callback-функция для замены последовательностей нужных символов. В этой функции проводятся все операции.
PM MAIL   Вверх
awers
Дата 7.5.2008, 23:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1465
Регистрация: 22.3.2006
Где: Россия, Таганрог

Репутация: 21
Всего: 31



Кхе кхе... либо smarty либо xml. Нафиг велосипед крутить? Для xml могу дать класс
PM MAIL WWW ICQ Skype   Вверх
=Женек=
Дата 8.5.2008, 06:05 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 548
Регистрация: 20.2.2005

Репутация: нет
Всего: 1



Цитата

Нафиг велосипед крутить?



Просто боюсь купив лопату получить впридачу громоздкий бульдозер.
Как он в плане ресурсоемкости?
PM MAIL   Вверх
awers
Дата 8.5.2008, 11:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1465
Регистрация: 22.3.2006
Где: Россия, Таганрог

Репутация: 21
Всего: 31



=Женек=, на всех проектах использую, никто не жалуется
PM MAIL WWW ICQ Skype   Вверх
=Женек=
Дата 8.5.2008, 18:41 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 548
Регистрация: 20.2.2005

Репутация: нет
Всего: 1



Ознакомился со Smarty - великолепная вещь, буду изучать. Спасибо.
PM MAIL   Вверх
Canarat
Дата 8.5.2008, 19:36 (ссылка) |    (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 212
Регистрация: 11.3.2008
Где: Каспий

Репутация: 5
Всего: 5



Изучишь основательно - почитай пару холиваров(даже тут есть немало таких), в которых он задействован. Найдешь кучу недостатков.

Исходя из кода, который ты привел в первом посте - лучше взять что-либо полегче. Да и вообще, в любом случае стоит выбирать что-либо полегче.
PM MAIL   Вверх
Feldmarschall
Дата 8.5.2008, 21:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 22
Всего: 32



Canarat, мне не нравится, что у него в щаблонизаторе оператор цикла.
Если бы был классический блочный - я бы понял. А так, он делает, действительно, второй смарти.

А недостатки везде есть. У нас у всех недостатки. Та к что теперь - и не жить совсем? =)
PM   Вверх
Canarat
Дата 9.5.2008, 08:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 212
Регистрация: 11.3.2008
Где: Каспий

Репутация: 5
Всего: 5



Feldmarschall, я просто в целом против псевдо-синтаксиса РНР в шаблонах.

А насчет второго смарти...логика в шаблонах должна быть, но настолько элементарного вида, чтобы не создавалось ощущение, что это обертка РНР-кода smile

Вообще это интересная тема, до каких пределов в шаблоне должно присутствовать управление логикой. Хочу создать, но опять развернется холивар по типу xslt vs. smarty.
PM MAIL   Вверх
Feldmarschall
Дата 9.5.2008, 09:02 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 22
Всего: 32



Всё уже отхоливарено до нас - см. http://forum.vingrad.ru/forum/topic-54581.html =)
Лично для меня смарти ничем не отличается от xslt. Как раз с точки зрения пределов управления логикой.
А главный вывод, который я для себя сделал - шаблонизатор делает программист для программиста =)
PM   Вверх
мухр
Дата 9.5.2008, 14:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 136
Регистрация: 11.8.2005

Репутация: нет
Всего: нет



=Женек=, на мой взгляд, самый удачный шаблонизатор - patTemplate. Тег-основанный, ничего лишнего не содержит. Использует объектную модель.
PM WWW   Вверх
Canarat
Дата 9.5.2008, 15:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 212
Регистрация: 11.3.2008
Где: Каспий

Репутация: 5
Всего: 5



Feldmarschall, хороший вывод, я всегда старательно закрываю на него глаза smile

Нет, та тема - это очень много мусора и очень мало дела. Например классная цитата из сообщения на одной из последних страниц:
Цитата

Я лишь к тому, что время  не является мерой "религии". 

http://forum.vingrad.ru/index.php?showtopi...t&p=1426829

И не подумаешь, что речь идет о шаблонизаторах..
PM MAIL   Вверх
skyboy
Дата 9.5.2008, 18:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 75
Всего: 260



Цитата(Feldmarschall @  9.5.2008,  08:02 Найти цитируемый пост)
шаблонизатор делает программист для программиста

вполне логично. но это ж не недостаток smile чем выше уровень абстракции - тем сложнее обучение использованию, но тем быстрее работа. ну, в общем случае. Как если макроассемблер после ассемблера.
Цитата(Canarat @  9.5.2008,  07:13 Найти цитируемый пост)
до каких пределов в шаблоне должно присутствовать управление логикой

до тех пор, пока это логика вывода, а не выборки из БД или обработки типа explode/preg_replace и т.д.

Добавлено через 17 секунд
Никак не могу найти пост, где говорится, что шаблонизатор не "логику от представления" отделяет, а логику обработки данных отлогики вывода :(

Добавлено через 1 минуту и 33 секунды
Цитата(Feldmarschall @  9.5.2008,  08:02 Найти цитируемый пост)
шаблонизатор делает программист для программиста

аа... это аллюзия к мифу "шаблонизатор - для дизайнера"?  smile 
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0535 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.