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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Шаблонизатор 
:(
    Опции темы
NLspieler
Дата 4.9.2010, 14:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Уже давно бьюсь над проблемой полного разделения логики от отображения.

В итоге появилась идея сделать шаблонизатор.

Вот пример логики приложения, которая достает например статьи:
Код

$tem = new template ('templates/schablon.html') ; //Создаем объект. Выбираем шаблон

while ( $article = mysql_fetch_assoc ($bd_result) )
{
    $tem->add($article) ; //Вытаскиваем из базы массив, добавляем в объект
}

echo $tem->get_result() ; //Выводим результат


А вся логика отображения записывается в шаблон.
Шаблон выглядит примерно так:
Код

*define:class*
    *every:1*grey*end*
    *every:2*white*end*
*end*

*start*
<div class="block">
*end*

*before:4*
<div class="separator"></div>
*end*

    <div class="*do:class*">
        <img src="%%path%%" alt="%%alt%%" />
        <div>
            %%text%%
        </div>
    </div>

*finish*
</div>
*end*


Содержимое блока start отображается в самом начале, перед выводом самой первой статьи
содержимое блока finish отображается в самом конце, после последней статьи.
Перед каждой четвертой статьей отображается блок before:4

содержимое *define:class* говорит о том, что класс дива будет чередоваться: grey, white, grey, white и т.д.
*do:class* как раз говорит о том, куда нужно поставить результат *define:class*

Короче получился целый интерпретируемый язык  smile .

Стоит ли реализовывать такой шаблонизатор или лучше по-старинке писать всю логику отображения на php?


Это сообщение отредактировал(а) NLspieler - 4.9.2010, 14:41
PM MAIL   Вверх
Muerto
Дата 4.9.2010, 14:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1207
Регистрация: 23.9.2006

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



По моему не плохо но я предпочитаю слегка другой подход...

Строим файл шаблона на php

и наш Controller вызывает Model просто перед include, Объявляя все переменные которые нужно... Затем вызывает нужный View

Далее, если эта страницы не требует обновлений, и не изменяется каждый раз, то её можно занести в кэш, и больше никогда не обрабатывать

Я думаю твоим коллегам будет сложно работать с примером как выше...
А может другие предпочтут работать именно так, тут дело вкуса...

Но вообще получилось нечто вроде symphony , я его за эти фокусы и не залюбил...

Это сообщение отредактировал(а) Muerto - 4.9.2010, 14:49


--------------------
user posted image
PM MAIL   Вверх
Vasay
Дата 4.9.2010, 15:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2097
Регистрация: 8.3.2006

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



NLspieler, 

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




--------------------
Придумать идеальную защиту от дурака невозможно, дураки, наудивление, изобретательны.
PM MAIL   Вверх
NLspieler
Дата 4.9.2010, 15:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Vasay @  4.9.2010,  15:05 Найти цитируемый пост)
мне кажется, верситальшик не будет счастлив работать с таким шаблонизатором.

Я же для себя делаю


Цитата(Muerto @  4.9.2010,  14:44 Найти цитируемый пост)
Я думаю твоим коллегам будет сложно работать с примером как выше...

Коллег нету, и пока их нет, подстраиваться нет необходимости.

Я тут еще немного подумал и упростил проект шаблонизатора.

Код

*first*Если самый первый из всех*end*

*1:5*Каждый первый из пяти*end*
*3:5*Каждый третий из пяти*end*
*0:5*Любой из пяти, кроме первого и второго, короче по-умолчанию, а конкретно тут второй, четвертый и пятый*end*

*define:color*
    *1:2*white*end*
    *2:2*gray*end*
*end*

Абсолютно любой. Содержимое переданной из php переменной: %%var1%%
white or gray: *do:color*

*last*Если самый последний*end*


Теперь вроде все стало еще понятнее, хотя чего то все еще не хватает
PM MAIL   Вверх
Vasay
Дата 4.9.2010, 15:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2097
Регистрация: 8.3.2006

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



Цитата(NLspieler @  4.9.2010,  15:35 Найти цитируемый пост)
Я же для себя делаю


Для себя, конечно, можно делать все что угодно, но Вы же делаете шаблонизатор, что бы использовать его в проектах, а все проекты Вы собираетесь делать в одиночку и никому не показывать код?


И чем Вас не устраивает логика отображения на том же php? Если Вы пишите в одиночку, то не так уж сложно контролировать себя и не пихать в шаблоны что-то большее чем логику отображения?






--------------------
Придумать идеальную защиту от дурака невозможно, дураки, наудивление, изобретательны.
PM MAIL   Вверх
Muerto
Дата 4.9.2010, 15:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1207
Регистрация: 23.9.2006

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



По мне так просто ужас ...

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

В конце концов если делаешь для себя, так нужно что бы:
1. Тебе так было проще
2. Оно тебе экономило время разработки
3. Желательно что бы было преимущество над стандартными методами вроде того которого я описал...


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

а ответ на 3 я думаю однозначно нет... тут и ограничения в том что он выполняет только то что ты ему прописал где то, и в конце концов все равно это превращается в простой php твоим транслятором который читает файл и выполняет его...



--------------------
user posted image
PM MAIL   Вверх
capitan
Дата 5.9.2010, 23:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Очередной велосипед, только с квадратными колесами. Тратить время на такой код, который через пару недель будет вообще не понятен....
Если конечно это не вариант остаться в проекте, т.к. никто кроме вас в коде не разберется smile
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0808 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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