Форум dkLab и Denwer
Здесь общаются Web-разработчики.
Генеральный спонсор:
Хостинг «Джино»

Шаблонизатор для ленивых - издание второе (Semen)
Author Message
Semen
Участник форума



Joined: 09 Jun 2003
Posts: 45
Карма: 0
   поощрить/наказать


PostPosted: Wed Sep 20, 2006 10:35 am (написано за 13 минут 25 секунд)
   Post subject: Шаблонизатор для ленивых - издание второе
Reply with quote

Уже пожалуй пару лет назад я поднимал на форуме тему шаблонизатора, максимально дружественного к дизайнеру, который не хочет осваивать азы программирования. Недавно я пересмотрел эти идеи и предлагаю на суд общественности "шаблонизатор для ленивых" - LazyTemplate.
Сразу оговорюсь: это не совсем готовое решение, скорее работающий прототип для демонстрации идеи.
Итак идея такова:

В шаблонизаторе есть только два базовых объекта - переменная и блок. Переменная это идентификатор за знаком доллара $MyVar. Блок это любой текст (как угодно перемешанный с тегами html) ограниченный двойными скобками [[ ... ]].
Блок работает либо как уловный оператор либо как цикл либо как и то и другое вместе без каких-либо "ручных" указаний. Если хоть одна из переменных внутри блока истинна (не пустая строка), то блок отображается, если нет он просто выбрасывается. Если переменная массив, то блок дублируется столько раз, сколько в масиве элементов и в каждую копию вставляется соответсвующий элемент массива. Если массивов несколько так происходит с каждым. Вложенные блоки обрабатываются "снизу вверх" по тем же правилам.
Поведение блока можно изменять с помощью необязательных директив: [[{directive1 directive2...} ... ]].
Можно вставлять в блоки любой php код, вызывать пользовательские функции для различных "событий" парсера и т.п.

Преимущества этого шаблонизатора:
  1. Максимальная простота для простых задач
  2. Дизайнер может сам без проблем разобраться и поэкспериментировать
  3. Рутинные вещи вроде раскраски таблицы под зебру делаются "в одно касание"
  4. Можно реализовать практически сколь угодно сложные вещи используя "события" парсера
В этачменте лежит единственный файл - код и демка в одном флаконе.
Любая конструктивная критика и обсуждение приветствуется! :)


lazy_template.rar
 Description:

Download
 Filename:  lazy_template.rar
 Filesize:  4.64 KB
 Downloaded:  1171 Time(s)

Back to top
View user's profile Send private message
Rin
Участник форума



Joined: 01 Jun 2005
Posts: 515
Карма: 184
   поощрить/наказать

Location: Москва

PostPosted: Fri Sep 22, 2006 3:55 pm (спустя 2 дня 5 часов 19 минут; написано за 29 секунд)
   Post subject:
Reply with quote

По-моему, это дыра.
Code (php): скопировать код в буфер обмена
$ret = eval (www.php.net/eval)($code);
Back to top
View user's profile Send private message Send e-mail
Semen
Участник форума



Joined: 09 Jun 2003
Posts: 45
Карма: 0
   поощрить/наказать


PostPosted: Mon Sep 25, 2006 9:58 am (спустя 2 дня 18 часов 2 минуты; написано за 2 минуты 20 секунд)
   Post subject:
Reply with quote

На самом деле не такая уж и дыра. Внешний злоумышленник никак в этот eval залезть не может - этот код жестко забит в шаблон и увидеть его или изменить снаружи вроде бы невозможно.
Ну а если сам программист туда вставит не то что надо, то это уже его проблема :)
Back to top
View user's profile Send private message
Rin
Участник форума



Joined: 01 Jun 2005
Posts: 515
Карма: 184
   поощрить/наказать

Location: Москва

PostPosted: Sat Oct 28, 2006 6:59 pm (спустя 1 месяц 3 дня 9 часов 29 секунд; написано за 27 секунд)
   Post subject:
Reply with quote

Еще по eval()...

phpclub.ru/talk/showthread.php?threadid=92470&rand=3
Back to top
View user's profile Send private message Send e-mail
Валенок
Участник форума



Joined: 06 Apr 2006
Posts: 520
Карма: -3
   поощрить/наказать


PostPosted: Sat Oct 28, 2006 7:35 pm (спустя 36 минут; написано за 17 секунд)
   Post subject:
Reply with quote

Rin
"Можно вставлять в блоки любой php код" - а как эту фичу реализовать иначе?...
Back to top
View user's profile Send private message
Semen
Участник форума



Joined: 09 Jun 2003
Posts: 45
Карма: 0
   поощрить/наказать


PostPosted: Mon Oct 30, 2006 2:53 pm (спустя 1 день 19 часов 17 минут; написано за 3 минуты 47 секунд)
   Post subject:
Reply with quote

Валенок wrote:
Rin
"Можно вставлять в блоки любой php код" - а как эту фичу реализовать иначе?...
Можно (и нужно) переделать работу самого парсера. Надо чтобы он выбрасывал "события" на все жизненно важные действия типа подстановки переменных или нахождения тегов. А пользовательские обработчики событий уже будут делать что надо. В таком случае встроенные в шаблон пхп-блоки вообще становяться ненужными и от них можно отказаться. Правда писать такое пока нет времени... :(
Back to top
View user's profile Send private message
Semen
Участник форума



Joined: 09 Jun 2003
Posts: 45
Карма: 0
   поощрить/наказать


PostPosted: Thu Nov 02, 2006 11:38 am (спустя 2 дня 20 часов 45 минут; написано за 1 минуту 23 секунды)
   Post subject:
Reply with quote

Rin wrote:
Еще по eval()...

phpclub.ru/talk/showthread.php?threadid=92470&rand=3
Гм. Прочитал. Ничего революционного не нашел. Никаких неизвестных мне дыр с безопасностью тоже не нашел...
Back to top
View user's profile Send private message
wolandino
Заглянувший



Joined: 05 Aug 2005
Posts: 16
Карма: 3
   поощрить/наказать


PostPosted: Tue Nov 07, 2006 2:29 pm (спустя 5 дней 2 часа 50 минут; написано за 49 секунд)
   Post subject:
Reply with quote

Для небольших проектов - пойдет.
Однако ж для меня всегда идеалом являлся Smarty.
Back to top
View user's profile Send private message
Semen
Участник форума



Joined: 09 Jun 2003
Posts: 45
Карма: 0
   поощрить/наказать


PostPosted: Wed Nov 08, 2006 12:20 pm (спустя 21 час 51 минуту; написано за 48 секунд)
   Post subject:
Reply with quote

А именно для небольших и планировался т.к. нечего велосипед переизобретать.
Back to top
View user's profile Send private message
Ka3ax
Guest





Карма: 388
   поощрить/наказать


PostPosted: Mon Nov 13, 2006 11:57 pm (спустя 5 дней 11 часов 37 минут; написано за 1 минуту 2 секунды)
   Post subject:
Reply with quote

а как пользоваться, пару слов.
как переменные назначить?
хотелось бы пример увидеть в полномасштабном виде.
Back to top
Guest






Карма: 388
   поощрить/наказать


PostPosted: Wed Nov 15, 2006 11:52 am (спустя 1 день 11 часов 54 минуты; написано за 14 минут 31 секунду)
   Post subject: Re: Шаблонизатор для ленивых - издание второе
Reply with quote

Как я уже говорил:
Semen wrote:
Сразу оговорюсь: это не совсем готовое решение, скорее работающий прототип для демонстрации идеи.
Поэтому весьма спартански выглядит. Сейчас использую в одном из своих проектов, попутно дорабатываю.
Back to top
Dark-Demon
Участник форума
Banned


Joined: 04 Feb 2007
Posts: 45
Карма: -3
   поощрить/наказать

Location: spb

PostPosted: Mon Feb 05, 2007 4:19 am (спустя 2 месяца 19 дней 16 часов 27 минут; написано за 59 секунд)
   Post subject:
Reply with quote

Quote:
Блок работает либо как уловный оператор либо как цикл либо как и то и другое вместе без каких-либо "ручных" указаний. Если хоть одна из переменных внутри блока истинна (не пустая строка), то блок отображается, если нет он просто выбрасывается.
на мой взгляд лучше наоборот: если хоть одна ложна - неотображать блок. если же нам на неё плевать - реализовать возможность установки для необязательных переменных значеий по умолчанию.
Back to top
View user's profile Send private message
Rin
Участник форума



Joined: 01 Jun 2005
Posts: 515
Карма: 184
   поощрить/наказать

Location: Москва

PostPosted: Thu Feb 08, 2007 2:11 pm (спустя 3 дня 9 часов 52 минуты; написано за 1 минуту 35 секунд)
   Post subject:
Reply with quote

Dark-Demon wrote:
если хоть одна ложна - неотображать блок.
Согласен.
Back to top
View user's profile Send private message Send e-mail
d-maxx
Заглянувший



Joined: 25 Mar 2007
Posts: 6
Карма: 0
   поощрить/наказать


PostPosted: Sun Mar 25, 2007 9:59 pm (спустя 1 месяц 17 дней 7 часов 47 минут; написано за 4 минуты 3 секунды)
   Post subject:
Reply with quote

Меня убивает такая тенденция разработчиков шаблонизаторов - запихивать фактически тот же самый PHP-код в HTML, потом его яко бы компилировать и выводить пользователю ещё и из локальной области скрипта. Зачем, когда можно всё поставить между тегами <? и ?> ? По мне так лучше сделать так, что б потом в шаблоны эти не лезть и вообще про них забыть и редактировать всё только из PHP-скрипта. Ну это по моему субъективному мнению. А так, шаблонизатор неплохой.
Back to top
View user's profile Send private message
Чечеткин Дмитрий
Участник форума



Joined: 09 Aug 2006
Posts: 27
Карма: 2
   поощрить/наказать


PostPosted: Sun Aug 05, 2007 4:09 am (спустя 4 месяца 10 дней 6 часов 10 минут; написано за 1 минуту 20 секунд)
   Post subject:
Reply with quote

Понравилась идея.
Если не против, добавлю аналогично работающий тег в XTL.
Back to top
View user's profile Send private message
Guest






Карма: 388
   поощрить/наказать


PostPosted: Fri Sep 28, 2007 8:26 am (спустя 1 месяц 23 дня 4 часа 16 минут; написано за 12 секунд)
   Post subject:
Reply with quote

А не проще ли юзать xslt?
Back to top
ustas
Участник форума



Joined: 22 Jul 2004
Posts: 57
Карма: -2
   поощрить/наказать


PostPosted: Sat Sep 29, 2007 11:24 pm (спустя 1 день 14 часов 58 минут; написано за 5 минут 9 секунд)
   Post subject:
Reply with quote

Гость
не проще, аргументирую: стоимость специалиста для решений на xslt выше, чем верстальщика, и наверно не ниже php'ника. Стоимость php программиста выше, чем у верстальщика. Итог: верстальщик должен оставаться им же. Или ваш бухгалтер скоро будет вам напоминать, что полы у нас моет не техничка, а высококлассный специалист по полётам в околоземное пространство на ведрах с тряпками.
Back to top
View user's profile Send private message Send e-mail
Maus
Модератор



Joined: 29 Jun 2003
Posts: 8151
Карма: 271
   поощрить/наказать

Location: пос. Омсукчан Магаданской области

PostPosted: Wed Jan 30, 2008 2:43 am (спустя 4 месяца 3 часа 19 минут)
   Post subject:
Reply with quote


М

Ветка выделена в отдельную тему «мусор»,
расположенную в форуме Мусоропровод (30 Января 2008, 02:43).
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic All times are GMT + 3 Hours
Page 1 of 1    Email to a Friend.
You cannot post new topics in this forum. You cannot reply to topics in this forum. You cannot edit your posts in this forum. You cannot delete your posts in this forum. You cannot vote in polls in this forum. You cannot attach files in this forum. You can download files in this forum.
XML