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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Шаблонизатор на XML+XSL, Рекомендации и обмен опытом 
:(
    Опции темы
mishaSL
Дата 4.12.2007, 20:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Сначало немного объясню суть.
В данный момент переписываю практически с нуля свою CMS систему. До этого использовал свой шаблонизатор - шаблоны были в HTML и проблем собственно не было. 
Почему задумался об XSLT... Хочется достичь того, чтобы практически весь вывод информации (включая всякие мелочи такие, как прописание дополнительных стилей в зависимости от получаемой информации и т.д.) можно было настроить в шаблонах. Наворачивать HTML-шаблонизатор всякими дополнительными функциями приведет к снижению скорости работы, и я вообще не вижу смысла изобретать псевдоязык, если есть такой сильный и мощный инструмент как XSLT.

Прикинув этапы прохождения информации:
1. Получение информации из БД MySQL. (Вся информация хранится именно там).
2. Составление XML файла с этой информацией.
3. Передача XML файла (или DOM-объекта) в шаблонизатор и указание какой XSL шаблон использовать. Соответственно обработка и вывод информации.

Но смущает одно:
Составление XML файла из информации полученной из БД MySQL - получается как бы дополнительный этап и есть подозрения, что скорость работы всей этой системы после такой организации шаблонов резко снизится.

Так вот хотел услышать мнения тех, кто уже писал что-то подобное. Или начинал писать, но остановился по каким-либо причинам. Как вы думаете, есть ли еще какие-либо минусы в данной структуре организации шаблонов?


P.S. Модераторы - оставьте пожалуйста тему в этом разделе форума. Заранее спасибо.





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


Добрый кот
***


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

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



Цитата

Наворачивать HTML-шаблонизатор всякими дополнительными функциями приведет к снижению скорости работы

Ага... а использование XSLT ускорит? ;)

Цитата

и я вообще не вижу смысла изобретать псевдоязык

Есть native template уже. Зачем изобретать?

Этапы верные. Подозрения про скорость тоже. Но упадёт она не при генерации XML, а при применении XSLT-преобразования.

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

Это сообщение отредактировал(а) SamDark - 4.12.2007, 21:32


--------------------
rmcreative.ru — Это жжж неспроста...
yiiframework.ru — О фреймворке Yii на русском.
reggi — здесь я регистрирую домены
PM MAIL WWW GTalk Jabber MSN   Вверх
N0dwis
Дата 5.12.2007, 01:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Как раз дописываю такую штуку. Насчет скорости честно говоря не заметил, но пока и страницы не особо сложные.
Минусов я пока особых не нашел, кроме того, что приходится разбираться в дополнение к php, xhtml, sql еще и с xml, xslt.
А так мне понравилось - отделение кода от дизайна почти стопроцентное. Почему почти - иногда надо вставить какую-то мелочь - типа заголовок, таблицу специального вида и т.п. Городить из-за этого очередной тег xml не хочется, вот и приходится все-таки вставлять чистый xhtml.


Это сообщение отредактировал(а) N0dwis - 5.12.2007, 01:25
PM MAIL   Вверх
teroni
Дата 5.12.2007, 02:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(mishaSL @  4.12.2007,  20:31 Найти цитируемый пост)

Но смущает одно:
Составление XML файла из информации полученной из БД MySQL - получается как бы дополнительный этап и есть подозрения, что скорость работы всей этой системы после такой организации шаблонов резко снизится.
Определитесь, какая у вас конечная цель - максимальная скорость или удобство редактирования шаблонов? И одним из этого пожертуйте ради второго, ведь как не крути, а максимальная скорость всегда будет вообще без использования шаблонизатора.
PM MAIL   Вверх
mishaSL
Дата 5.12.2007, 13:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(teroni @  5.12.2007,  02:25 Найти цитируемый пост)
Определитесь, какая у вас конечная цель - максимальная скорость или удобство редактирования шаблонов?

Один фактор не должен критически влиять на другой. Конечно же скорость может немного упасть, но не критически. Иначе смысла не будет во всей этой гибкости шаблонов.

Цитата(SamDark @  4.12.2007,  21:12 Найти цитируемый пост)
Ага... а использование XSLT ускорит? ;)

Ну согласись, есть разница: использовать стандартное расширение PHP написанное на C или использовать для обработки дополнительных условий в шаблоне сам PHP.

Цитата(SamDark @  4.12.2007,  21:12 Найти цитируемый пост)
Есть native template уже. Зачем изобретать?

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

Цитата(N0dwis @  5.12.2007,  01:25 Найти цитируемый пост)
вот и приходится все-таки вставлять чистый xhtml

Ну его можно прямо в XSL шаблон запихать и программный код не трогать...

Цитата(SamDark @  4.12.2007,  21:12 Найти цитируемый пост)
Но упадёт она не при генерации XML, а при применении XSLT-преобразования.

Есть сомнения, но по фактам что-то против сказать не могу - возможно ты прав. 

Буду пробовать, если интересно буду отписываться в этой теме...


--------------------
Лучший способ научиться программированию - это посмотреть как это делают другие...
PM MAIL   Вверх
SamDark
Дата 5.12.2007, 14:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый кот
***


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

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



mishaSL
Цитата

Один фактор не должен критически влиять на другой.

Посмотрите в сторону шаблонов в CakePHP. Там используется native-синтаксис. т.е. парсинга дополнительного нет. При этом всё довольно гибко.

Цитата

Ну согласись, есть разница: использовать стандартное расширение PHP написанное на C или использовать для обработки дополнительных условий в шаблоне сам PHP.

Знаю. Поэтому и порекомендовал native-шаблоны.

Цитата

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

И ещё один плюс к native-шаблонам.


--------------------
rmcreative.ru — Это жжж неспроста...
yiiframework.ru — О фреймворке Yii на русском.
reggi — здесь я регистрирую домены
PM MAIL WWW GTalk Jabber MSN   Вверх
N0dwis
Дата 5.12.2007, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(mishaSL @  5.12.2007,  13:54 Найти цитируемый пост)
Ну его можно прямо в XSL шаблон запихать и программный код не трогать...

Иногда не получается, да и удобнее просто вставить xhtml.

Цитата(SamDark @  5.12.2007,  14:09 Найти цитируемый пост)
Знаю. Поэтому и порекомендовал native-шаблоны.

Что есть native-шаблоны в общем случае? CakePHP я ж понимаю платный, ну а сама технология что собой представляет? Где почитать?
PM MAIL   Вверх
SamDark
Дата 5.12.2007, 14:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый кот
***


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

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



N0dwis
CakePHP бесплатный smile

native-шаблоны заключены в самом php т.к. php/fi изначально писался как шаблонизатор для си cgi.

Код

<ul>
<?foreach($items as $item):?>
  <li><?=$item?></li>
<?enforeach?>
</ul>



--------------------
rmcreative.ru — Это жжж неспроста...
yiiframework.ru — О фреймворке Yii на русском.
reggi — здесь я регистрирую домены
PM MAIL WWW GTalk Jabber MSN   Вверх
mishaSL
Дата 5.12.2007, 15:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(SamDark @  5.12.2007,  14:09 Найти цитируемый пост)
Поэтому и порекомендовал native-шаблоны.

Цитата(SamDark @  5.12.2007,  14:09 Найти цитируемый пост)
И ещё один плюс к native-шаблонам. 


Да все в этом замечательно. Но есть одно НО, хочется достичь четкого разделения данных, шаблонов и чтобы данные никак не были связаны с особенностями движка. Т.е. к примеру человек который абсолютно не знает что это за движок и его особенностей,  видит перед собой исходный XML файл, и соответственно одними только знаниями XSL настраивать весь вывод. Я думаю это должно быть очень удобно. 
Просто при использовнии native template в любом случае технология построения шаблонов начинает зависеть от движка.

Ладно, как-только допишу эту систему выложу здесь сравнительные тесты. Чтобы всем было понятно, насколько это все пригодно для использования, и на сколько уменьшается производительность по сравнению с теми же native-шаблонами. В любом случае считаю надо попробовать.


--------------------
Лучший способ научиться программированию - это посмотреть как это делают другие...
PM MAIL   Вверх
SamDark
Дата 5.12.2007, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый кот
***


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

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



mishaSL
Это только при плохом использовании native template.

Попробовать можно. Но, в принципе, уже всё есть готовое ;)


--------------------
rmcreative.ru — Это жжж неспроста...
yiiframework.ru — О фреймворке Yii на русском.
reggi — здесь я регистрирую домены
PM MAIL WWW GTalk Jabber MSN   Вверх
mishaSL
Дата 5.12.2007, 17:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(SamDark @  5.12.2007,  15:45 Найти цитируемый пост)
Попробовать можно. Но, в принципе, уже всё есть готовое ;) 

Если есть ссылочка, поделись пожалуйста.


--------------------
Лучший способ научиться программированию - это посмотреть как это делают другие...
PM MAIL   Вверх
SamDark
Дата 5.12.2007, 17:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый кот
***


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

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





--------------------
rmcreative.ru — Это жжж неспроста...
yiiframework.ru — О фреймворке Yii на русском.
reggi — здесь я регистрирую домены
PM MAIL WWW GTalk Jabber MSN   Вверх
mishaSL
Дата 5.12.2007, 20:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



SamDark, за ссылки большое спасибо, но
Цитата(SamDark @  5.12.2007,  17:27 Найти цитируемый пост)
http://phptal.motion-twin.com/

насколько я понял это еще один язык шаблонов... или я что-то не понял....

Цитата(SamDark @  5.12.2007,  17:27 Найти цитируемый пост)
http://www.xml.lt/Resources/Framework

А это насколько я понимаю framework... может там и есть это, но пока что не разбирался подробно...



--------------------
Лучший способ научиться программированию - это посмотреть как это делают другие...
PM MAIL   Вверх
SamDark
Дата 5.12.2007, 20:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый кот
***


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

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



mishaSL
Цитата

насколько я понял это еще один язык шаблонов... или я что-то не понял....

Это XSLT-шаблонизатор.


--------------------
rmcreative.ru — Это жжж неспроста...
yiiframework.ru — О фреймворке Yii на русском.
reggi — здесь я регистрирую домены
PM MAIL WWW GTalk Jabber MSN   Вверх
N0dwis
Дата 6.12.2007, 09:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Шо-то это бред какой-то, а не шаблонизатор... Все равно все в куче - php, xhtml, xml.
PM MAIL   Вверх
SamDark
Дата 6.12.2007, 13:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый кот
***


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

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



N0dwis
mishaSL,
У меня начинает складываться впечатление, что вы хотите шаблонизатором отделить PHP от HTML, а не логику представления от логики работы приложения. Я всё правильно понимаю?


--------------------
rmcreative.ru — Это жжж неспроста...
yiiframework.ru — О фреймворке Yii на русском.
reggi — здесь я регистрирую домены
PM MAIL WWW GTalk Jabber MSN   Вверх
N0dwis
Дата 6.12.2007, 15:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Ну да, я же это и писал.
При использовании xml логика представления вообще размазывается, смещается в xsl, а приложение только формирует нужные данные в нужном формате.
Кроме того, при таком подходе, изменить дизайн может даже человек не знакомый с программированием вообще и с php в частности.
PM MAIL   Вверх
SamDark
Дата 6.12.2007, 16:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый кот
***


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

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



N0dwis
Так вы про логику или про язык? Логика легко разделяется с использованием native-шаблонов.

К тому, же XSLT не так уж и легче PHP и человек, не знакомый с программированием вообще, XSLT, как по мне, не осилит.

Это сообщение отредактировал(а) SamDark - 6.12.2007, 16:05


--------------------
rmcreative.ru — Это жжж неспроста...
yiiframework.ru — О фреймворке Yii на русском.
reggi — здесь я регистрирую домены
PM MAIL WWW GTalk Jabber MSN   Вверх
N0dwis
Дата 6.12.2007, 16:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Я про язык - не люблю дикую смесь php и html, которая есть практически во всех движках.
А xslt - осилит, проверено! Да и можно ж изменять существующие шаблоны, тогда еще проще...
PM MAIL   Вверх
SamDark
Дата 6.12.2007, 16:42 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый кот
***


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

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



N0dwis
Понятно. Вы хотите повторить Smarty на XSLT. Как сделаете - покажите, что выйдет. Интересно.


--------------------
rmcreative.ru — Это жжж неспроста...
yiiframework.ru — О фреймворке Yii на русском.
reggi — здесь я регистрирую домены
PM MAIL WWW GTalk Jabber MSN   Вверх
N0dwis
Дата 6.12.2007, 16:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



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

Это сообщение отредактировал(а) N0dwis - 6.12.2007, 16:53
PM MAIL   Вверх
SamDark
Дата 6.12.2007, 18:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый кот
***


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

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



N0dwis
Ну, можно сюда привести два кусочка кода:
1. Получение объекта и формирование XML.
2. Кусочек XSL, который всё это дело переводит в (X)HTML.


--------------------
rmcreative.ru — Это жжж неспроста...
yiiframework.ru — О фреймворке Yii на русском.
reggi — здесь я регистрирую домены
PM MAIL WWW GTalk Jabber MSN   Вверх
mishaSL
Дата 6.12.2007, 18:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(SamDark @  6.12.2007,  16:42 Найти цитируемый пост)
Вы хотите повторить Smarty на XSLT.

Конечно же нет.

SamDark, ты немного не понимаешь чего хочется достичь в итоге. Как допишу (на это уйдет примерно 5-6 недель) обязательно покажу и приведу сравнительную таблицу (плюсы и минусы) по отношению к другим методам шаблонизации на PHP.




--------------------
Лучший способ научиться программированию - это посмотреть как это делают другие...
PM MAIL   Вверх
SamDark
Дата 6.12.2007, 19:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый кот
***


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

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



Ок, буду ждать. Скорее всего данная тема интересна не только нам.


--------------------
rmcreative.ru — Это жжж неспроста...
yiiframework.ru — О фреймворке Yii на русском.
reggi — здесь я регистрирую домены
PM MAIL WWW GTalk Jabber MSN   Вверх
soloweb
Дата 7.12.2007, 02:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Georgian
*


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

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



Ну да я тоже хочу посмотреть что в итоге получится! smile Сам лично использую Smarty + Php !
Вот спрашивается зачем XML + XSLT если эффект от применения в итоге тот же XHTML smile Не понимаю!
Ну выгрыш может и сыграет когда обработка XSLT будет на стороне клиента smile Но тут есть свои разноогласия!
Попраьте меня если я не прав ! smile 
PM MAIL WWW ICQ   Вверх
N0dwis
Дата 7.12.2007, 09:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Привожу куски кода (все классы находятся в разных файлах, привожу вместе только для примера):

Код

/* Класс, который формирует меню из базы данных */
class MenuBlock implements IBlock
{
    public function GetContent()
    {
        global $connection;
        $items = $connection->Query("select * from raid_menu", true);
        $menu = new Menu(0); // параметр 0 - вертикальное меню, 1 - горизонтальное

        foreach ($items as $cur_item)
        {
            $menu->AddItem($cur_item["name"], "http://".$_SERVER["SERVER_NAME"]."/".$cur_item["module"]);
        }

        return $menu->GetMenu();
    }
}


/*
 * Класс, генерирующий xml структуру для меню
 */
class Menu
{
    private $result = null;
    private $type = 0;

    public function __construct($type)
    {
        global $doc;

        $this->type = $type;
        $this->result = $doc->createElement("menu");
        if ($type == 0)
            $this->result->setAttribute("type", "vertical");
        else
            $this->result->setAttribute("type", "horizontal");
    }

    public function AddItem($name, $link)
    {
        global $doc;

        $item = $doc->createElement("menu-item");
        $link_node = $doc->createElement("link");
        $text = $doc->createCDATASection($link);
        $link_node->appendChild($text);
        $name_node = $doc->createElement("name");
        $text = $doc->createCDATASection($name);
        $name_node->appendChild($text);
        
        $item->appendChild($link_node);
        $item->appendChild($name_node);

        $this->result->appendChild($item);
    }

    public function GetMenu()
    {
        return $this->result;
    }
}



После всех этих телодвижений получается где-то такое дерево xml. Это кусок из общего xml файла - преобразование выполняется сразу всей страницы, а не по частям.
Код

      <menu type="vertical">
        <menu-item>
          <link><![CDATA[http://raid2.vdv.com/news]]></link>
          <name><![CDATA[Новости]]></name>
        </menu-item>
        <menu-item>
          <link><![CDATA[http://raid2.vdv.com/recensies]]></link>
          <name><![CDATA[Рецензии]]></name>
        </menu-item>
        <menu-item>
          <link><![CDATA[http://raid2.vdv.com/articles]]></link>
          <name><![CDATA[Статьи]]></name>
        </menu-item>
        <menu-item>
          <link><![CDATA[http://raid2.vdv.com/links]]></link>
          <name><![CDATA[Ссылки]]></name>
        </menu-item>
        <menu-item>
          <link><![CDATA[http://raid2.vdv.com/about]]></link>
          <name><![CDATA[О сайте]]></name>
        </menu-item>
        <menu-item>
          <link><![CDATA[http://raid2.vdv.com/faq]]></link>
          <name><![CDATA[FAQ]]></name>
        </menu-item>
      </menu>


А это кусок xsl, который выполняет преобразование
Код

<!-- Меню -->
<xsl:template match="menu">
     <xsl:choose>
        <xsl:when test="@type='vertical'">
            <xsl:call-template name="vertical-menu" />
        </xsl:when>
        <xsl:otherwise>
            <xsl:call-template name="horizontal-menu" />
        </xsl:otherwise>
    </xsl:choose>
</xsl:template>

<xsl:template name="vertical-menu">
   <div id="menu">
    <xsl:for-each select="menu-item">
        <div class="menu-item">
            <a>
                <xsl:attribute name="href">
                    <xsl:value-of select="link" disable-output-escaping="yes" />
                </xsl:attribute>
                <xsl:value-of select="name" disable-output-escaping="yes" />
            </a>
        </div>
    </xsl:for-each>
    </div>
</xsl:template>


Ну а стили для всего вроде <div class="menu-item"> задаются отдельно в css файле, его приводить не буду, ничего особо интересного.

Так получается полное отделение html от php. Если прийдется даже самым кардинальным способом изменять дизайн - это затронет только xsl файл и класс для формирования этого куска xml, но чаще всего достаточно будет поменять только xsl. Кроме того, класс Menu, довольно специфичный, но я сделал еще несколько достаточно общих - таблица, список и т.п., и эти классы может применять уже не только один модуль, а многие для своих нужд.
Жду критику, замечания и идеи.  smile 

Насчет преобразования на стороне клиента - думал, но там больше проблем - совместимость браузеров, проблемы с кнопкой "Назад", закладки. Ну а плюсы - код становится более понятным, проще изменение дизайна, возможность передавать данные сразу в xml - для мобильников например.
PM MAIL   Вверх
SamDark
Дата 7.12.2007, 12:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый кот
***


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

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



N0dwis
Хорошо вышло. Сейчас как раз работаю с такой вот системой на Java.

Совет:
Написать общий класс XMLDataElement, умеющий свои property преобразовывать в XML и от него отнаследовать все остальные классы для конктретных моделей данных. Заодно получится класс для генерации XML из не совсем стандартных данных.


p.s. преобразования на стороне клиента лучше не делать. Ещё рано. Браузерам от этого нехорошо...


--------------------
rmcreative.ru — Это жжж неспроста...
yiiframework.ru — О фреймворке Yii на русском.
reggi — здесь я регистрирую домены
PM MAIL WWW GTalk Jabber MSN   Вверх
N0dwis
Дата 7.12.2007, 13:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(SamDark @  7.12.2007,  12:46 Найти цитируемый пост)
Совет:
Написать общий класс XMLDataElement, умеющий свои property преобразовывать в XML и от него отнаследовать все остальные классы для конктретных моделей данных. Заодно получится класс для генерации XML из не совсем стандартных данных.

Идея!!
Спасибо!! (жалко не могу еще поднимать репутацию)

Это сообщение отредактировал(а) N0dwis - 7.12.2007, 13:34
PM MAIL   Вверх
Vaulter
Дата 7.12.2007, 13:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



ващет "хорошие" броузеры сами говорят чего они могут а чего нет 
в HTTP заголовках 
Код

Accept    text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5




--------------------
PM MAIL WWW ICQ   Вверх
SamDark
Дата 7.12.2007, 15:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый кот
***


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

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



Vaulter
К сожалению, не все хорошие и не все говорят правду.


--------------------
rmcreative.ru — Это жжж неспроста...
yiiframework.ru — О фреймворке Yii на русском.
reggi — здесь я регистрирую домены
PM MAIL WWW GTalk Jabber MSN   Вверх
Vaulter
Дата 7.12.2007, 16:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



SamDark, Дык. если он плохой, пусть жрет обычную HTML разметку (сделанную на сервере),
а если хороший (или врет что секёт в xml) кормим ему xml + xsl 
дабы снизить нагрузки на сервере.


--------------------
PM MAIL WWW ICQ   Вверх
SamDark
Дата 7.12.2007, 16:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый кот
***


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

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



Vaulter
Ну, когда нагрузка большая - это оправдано. А так - лишняя заморочка.

Это сообщение отредактировал(а) SamDark - 7.12.2007, 16:24


--------------------
rmcreative.ru — Это жжж неспроста...
yiiframework.ru — О фреймворке Yii на русском.
reggi — здесь я регистрирую домены
PM MAIL WWW GTalk Jabber MSN   Вверх
egao
Дата 9.12.2007, 13:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



> Этапы верные. Подозрения про скорость тоже. Но упадёт она не при генерации XML, а при применении XSLT-преобразования.

процентов в 80 всех запросов шаблонизация будет происходить на стороне клиента, что в конечном счёте даст приличную экономию на шаблонизации и уменьшение исходящего трафика.


> Жду критику, замечания и идеи.

вместо for-each лучше по возможности применять apply-templates. будет гибче.


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

что там не так с кнопкой "назад" и закладками?? с аяксом не путаешь?


> p.s. преобразования на стороне клиента лучше не делать. Ещё рано. Браузерам от этого нехорошо... 

да ладно smile не так уж всё и плохо smile


> ващет "хорошие" броузеры сами говорят чего они могут а чего нет в HTTP заголовках

они не говорят, поддерживают ли они xslt smile


формирование данных:
Код
    $reg->page= $page= (object) array();
    $page->title= '\(^_^)/';
    $page->content= array( );
    $page->theme= 'papyrus';
    $reg->printer= 'printers/xslt';


трансформация в xml:
Код
function native2xml( $var, $name='data' ){
    $xml= '';
    if( is_object( $var ) || is_array( $var ) ):
        foreach( $var as $n => $v )
            $xml.= "\n" . native2xml( $v, $n ) . "\n";
    else:
        $xml= $var;
    endif;
    $shortN= preg_replace( '/(^[^a-zA-Z_]+|[^\w]+)/', '_', $name );
    if( !$shortN ) $shortN= 'i';
    $name= htmlspecialchars( $name, ENT_QUOTES, 'UTF-8' );
    return '<' . $shortN . (( $shortN != $name )?( ' _="'. $name . '"' ):( '' )) . '>' .$xml . '</' . $shortN . '>';
}


вывод пользователю:
Код
$clientXSLT= preg_match( '!^(Mozilla/[456]|Opera/9)!', @$reg->server->HTTP_USER_AGENT );

$page->link2xsl= '/theme/' . $page->theme . '/xsl/get.xsl';
$page->extRoot= $reg->extRoot;
$page->linkPrefix= $reg->linkPrefix;
if( $clientXSLT ):
    $page->xslType= 'client side';
    header( 'Content-Type: application/xml; charset="utf-8"' );
    echo '<?xml version="1.0" encoding="utf-8" ?><?xml-stylesheet type="text/xsl" href="' . $reg->extRoot . $page->link2xsl . '" ?>';
    echo native2xml( $page, 'page' );
else:
    $page->xslType= 'server side';
    $xml= new DOMDocument( );
    $xml->loadXML( native2xml( $page, 'page' ) );
    $xsl= new DOMDocument( );
    $xsl->load( $reg->intRoot . $page->link2xsl );
    $proc= new XSLTProcessor( );
    $proc->importStyleSheet( $xsl );
    header( 'Content-Type: text/html; charset="utf-8"' );
    echo $proc->transformToXML( $xml );
endif;


вот, что из этого в итоге получается 
 посредством этого шаблона 

ещё один пример

немного теории

Это сообщение отредактировал(а) egao - 9.12.2007, 14:15
PM MAIL   Вверх
Endeveit
Дата 10.12.2007, 12:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(SamDark @  4.12.2007,  22:12 Найти цитируемый пост)
Опыт с XSL есть. Получается очень гибко, довольно сложно и не сильно быстро.

Поддержу тостующего по всем пунктам кроме сложности.
На самом деле достаточно нескольких недель чтобы в полной мере овладеть работой с XSL-преобразованиями.
Проблемы со скоростью решаются кэшированием всего и вся.
На преобразование на стороне клиента надеяться не советую.
PM WWW   Вверх
Feldmarschall
Дата 11.12.2007, 15:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


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

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



Я, всё же, полагаю, что изначальные предпосылки у автора не совсем верные.
Цитата(mishaSL @  4.12.2007,  20:31 Найти цитируемый пост)
Но смущает одно:
Составление XML файла из информации полученной из БД MySQL - получается как бы дополнительный этап и есть подозрения, что скорость работы всей этой системы после такой организации шаблонов резко снизится.

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

В этом смысле я как раз порекомендую автору озаботиться не возвеличиванием какого-то одного шаблона (они ,по сути, все одинаковые - что пхп, что спарти, что хслт), а задуматься над структурой приложения, которая должны быть такой, чтобы шаблонизаторы можно было менять, как перчатки. Вот тогда это будет действительно отделение логики от представления.

Непонятно, из каких соображений получилась мысль о том, что скорость работы значительно снизится. Вроде бы, приложение делает все то же самое, что и любые другие. Откуда снижение производительности?

Цитата(mishaSL @  4.12.2007,  20:31 Найти цитируемый пост)
Так вот хотел услышать мнения тех, кто уже писал что-то подобное. Или начинал писать, но остановился по каким-либо причинам. Как вы думаете, есть ли еще какие-либо минусы в данной структуре организации шаблонов?

Непонятно, если честно, чем "данная структура" отличается от любых других. Вроде бы, система везде одна и та же - получили нужные данные и отдали их шаблонизатору. Или я его-то не понял?
PM   Вверх
SamDark
Дата 11.12.2007, 22:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый кот
***


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

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



Feldmarschall
Читаем внимательней. Хотелось разделить php и вёрстку, а не логику и представление.

Про структуру вы правы: все шаблонизаторы одинаковы.


--------------------
rmcreative.ru — Это жжж неспроста...
yiiframework.ru — О фреймворке Yii на русском.
reggi — здесь я регистрирую домены
PM MAIL WWW GTalk Jabber MSN   Вверх
Feldmarschall
Дата 11.12.2007, 23:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


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

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



Я читал. На второй странице. Но несмотря на употребляемые им термины, автор, все-таки, разделяет именно логику приложения и логику представления. 

Впрочем, перечитав повнимательнее исходное сообщение, я понял, что "дополнительным этапом" автор называет не получение данных, а генерацию из них XML. И даже частично, пожалуй, разделяю его опасения. Но, всё-таки, поскольку мы ограничены пределами восприятия человека и пропускной способностью интернета, я не думаю, что объем сначала генерируемого, а потом тут же разбираемого XML будет таким, чтобы сказаться на  производительности.

Зато нашёл гораздо более серьёзный недостаток:

Цитата(N0dwis @  5.12.2007,  01:25 Найти цитируемый пост)
иногда надо вставить какую-то мелочь - типа заголовок, таблицу специального вида и т.п. Городить из-за этого очередной тег xml не хочется, вот и приходится все-таки вставлять чистый xhtml.


Ежу понятно, что это перечеркивает всю идею и все заявления о том, что "Если придется даже самым кардинальным способом изменять дизайн - это затронет только xsl файл".
Особенно учитывая, что все наши проекты состоят из таких "мелочей".
PM   Вверх
SamDark
Дата 12.12.2007, 13:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый кот
***


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

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



Feldmarschall
Цитата

Sam Dark: Так вы про логику или про язык? Логика легко разделяется с использованием native-шаблонов.

N0dwis: Я про язык - не люблю дикую смесь php и html, которая есть практически во всех движках.



--------------------
rmcreative.ru — Это жжж неспроста...
yiiframework.ru — О фреймворке Yii на русском.
reggi — здесь я регистрирую домены
PM MAIL WWW GTalk Jabber MSN   Вверх
Feldmarschall
Дата 12.12.2007, 13:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


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

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



Ох. Ну я же говорю, что "несмотря на термины, которые он употребляет".
Вообще, мы о чем сейчас говорим? О том, что я неправильно цитирую букву высказываний автора? О том, что я невнимательный?
Или, все-таки, о сути его действий? Я предпочитаю последнее.

В отделении "пхп от хтмл" как таковом нет смысла.
Делать что-то имеет смысл, если у тебя есть объективные причины.
Я могу назвать 3-4 объективные причины отделять логику представления от логики отображения.
Разделять же "пхп и хтмл" ни одной объективной причины назвать нельзя.
А как он там это называет - дело десятое. 

Заявления типа "мне не нравится дикая смесь" и "я написал движок, который позволяет легко сменить дизайн" (как будто движок с native шаблонизатором этого не позволяет!) - исключительно субъективные. И обсуждать их тогда вообще бессмысленно. Все равно что спорить, что вкуснее - яблоки или колбаса. 

Но если вам так хочется, я могу принять правила этой игры, и говорить про отделение пхп от хтмл. Хотя мне очень не хочется этого делать, поскольку такое именование поддерживает одно из самых дремучих заблуждений пхп-программистов.

Тем более, что сам автор, в результате, так до конца их и не разделил.

Это сообщение отредактировал(а) Feldmarschall - 12.12.2007, 13:49
PM   Вверх
SamDark
Дата 12.12.2007, 14:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый кот
***


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

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



Feldmarschall
Смысла для меня лично нет, но не для автора. У автора причины субъективны. Но они тоже причины. Он спросил, как сделать, чтобы ему было вкусно, а не как сделать универсально и правильно.

p.s. я-то пытался в самом начале навести на правильный путь, но не вышло...


--------------------
rmcreative.ru — Это жжж неспроста...
yiiframework.ru — О фреймворке Yii на русском.
reggi — здесь я регистрирую домены
PM MAIL WWW GTalk Jabber MSN   Вверх
N0dwis
Дата 12.12.2007, 17:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(Feldmarschall @  12.12.2007,  13:48 Найти цитируемый пост)
Разделять же "пхп и хтмл" ни одной объективной причины назвать нельзя.

Я назвал ее выше, может не в явной форме. Причина - возможность довольно кардинально поменять дизайн сайта человеку, абсолютно не знакомому с php и смутно представляющего себе что такое программирование вообще.
Плюс еще одна причина - такой движок довольно легко можно переделать для wap (пока близко не сталкивался, но там же вроде идет чистый xml).
Кроме того, native шаблоны даже программисту будет править довольно тяжело - опять смесь php и html тяжело воспринимается.

Цитата(Feldmarschall @  11.12.2007,  23:51 Найти цитируемый пост)
Ежу понятно, что это перечеркивает всю идею и все заявления о том, что "Если придется даже самым кардинальным способом изменять дизайн - это затронет только xsl файл".

Ну во-первых никто не идеален. Во-вторых это относится к очень уж экзотическим мелочам, если элемент встречается больше 2-х раз, уже есть смысл для него создать отдельный класс представления и стандартизировать его. Да и сейчас я использую вставку xhtml чаще всего просто для сообщений пользователю типа "Неправильный пароль". Ну а в третьих - я над этим работаю.


Цитата(Feldmarschall @  12.12.2007,  13:48 Найти цитируемый пост)
Я могу назвать 3-4 объективные причины отделять логику представления от логики отображения.

Назовите объективные причины.


Цитата(SamDark @  12.12.2007,  14:21 Найти цитируемый пост)
Он спросил, как сделать, чтобы ему было вкусно, а не как сделать универсально и правильно.

Правильно вообще понятие относительное, но от хорошей идеи никогда не отказывался. Буду благодарен за объяснение.

PM MAIL   Вверх
SamDark
Дата 12.12.2007, 17:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый кот
***


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

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



N0dwis
Код

class View{
    private $vars = array(); 
    
    function assign($varname, $value){ 
        $this->vars[$varname] = $value; 
    } 

    function remove($varname) { 
        unset($this->vars[$varname]); 
    }

    function fetch($name){
        $template = $this->getTemplate($name);
        if($template){
            ob_start();
            $err_level = error_reporting(1015);
    
            // Загружаем переменные 
            foreach ($this->vars as $key => $value) { 
                    $$key = $value; 
            }
            
            include($template);
            error_reporting($err_level);
            return ob_get_clean();         
        }
        else{
            return false;
        }
    }

    function display($name){
        echo $this->fetch($name);
        die();
    }
}


В контроллере соотв.:

Код

$this->view->set('posts', array(
  0 => array(
     'title' => 'test1',
     'text' => 'test1'
  ),
  1 => array(
     'title' => 'test2',
     'text' => 'test2'
  )
));
$this->view->display('posts');


Шаблон:
Код

<dl>
<?foreach($posts as $post):?>
   <dt><?=$post['title']?></dt>
   <dd><?=$post['text']?></dd>
<?endforeach?>
</dl>


Это сообщение отредактировал(а) SamDark - 12.12.2007, 17:56


--------------------
rmcreative.ru — Это жжж неспроста...
yiiframework.ru — О фреймворке Yii на русском.
reggi — здесь я регистрирую домены
PM MAIL WWW GTalk Jabber MSN   Вверх
Feldmarschall
Дата 12.12.2007, 19:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


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

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



N0dwis, спасибо за интересный ответ.
Прежде, чем отвечать по пунктам, хочу задать один вопрос:
Скажи, почему ты так сопротивляешься определению "отделение логики приложения от логики представления"? Что тебе кажется в нем неправильным? Неприложимым к твоему случаю?


Это сообщение отредактировал(а) Feldmarschall - 12.12.2007, 19:14
PM   Вверх
N0dwis
Дата 12.12.2007, 20:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(Feldmarschall @  12.12.2007,  19:14 Найти цитируемый пост)
Скажи, почему ты так сопротивляешься определению "отделение логики приложения от логики представления"? Что тебе кажется в нем неправильным? Неприложимым к твоему случаю?

Я не сопротивляюсь, а полностью поддерживаю! Просто я задавался целью именно отделить код html от кода php, т.к. смотреть на вот это
Код

echo "<table cellpadding='0' cellspacing='0' width='100%'>\n";
    echo "<tr>\n<td align='left' width='100%' class='tbl'><a href='".FUSION_SELF."?msg_send=0'>".$locale['401']."</a></td>\n";
    echo "<td width='1%' class='tbl' style='white-space:nowrap;font-weight:".($folder=="inbox"?"bold":"normal")."'><a href='".FUSION_SELF."?folder=inbox'>".$locale['402']." [".$bdata['inbox_total']."/".$msg_settings['pm_inbox']."]</a></td>\n";
    echo "<td width='1%' class='tbl' style='white-space:nowrap;font-weight:".($folder=="outbox"?"bold":"normal")."'><a href='".FUSION_SELF."?folder=outbox'>".$locale['403']." [".$bdata['outbox_total']."/".$msg_settings['pm_sentbox']."]</a></td>\n";

немного утомительно (кусок из php-fusion).
А отделение логики приложения от логики представления - классическая в общем-то задача, решается с помощью MVC-подобных паттернов (Mediator, Observer), хотя честно признаюсь на php я это не реализовывал, только на С++ smile . 
Если использовать еще и шаблоны в смысле отделения php от html, то класс View делится еще на 2 - собственно логика представления и внешний вид представления (где-то так, хотя теорию я по этому поводу не развивал smile ).
SamDark, спасибо!

P.S. Вспомнил еще один плюс связки xml+xslt - не разрываются теги html. Обычно в шаблонизаторах код шаблонов храниться в нескольких файлах (даже если в одном - проблема остается) и получается, грубо, что теги, скажем, <body> и </body>, будут находиться в разных файлах, либо в разных частях файла - опять нарушается логика и восприятие. В случае же xslt - каждый блок представляет собой законченный кусок с начальным и конечным тегом.
PM MAIL   Вверх
Feldmarschall
Дата 12.12.2007, 20:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


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

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



Возьмем два куска кода.
Один из примера, SamDark,  второй - из примера на w3schools.com
Код

<xsl:for-each select="catalog/cd">
  <tr>
    <td><xsl:value-of select="title"/></td>
    <td><xsl:value-of select="artist"/></td>
  </tr>
</xsl:for-each>

Код

<?foreach($posts as $post):?>
  <tr>
    <td><?=$post['title']?></td>
    <td><?=$post['artist']?></td>
  </tr>
<?endforeach?>

положа руку на сердце, сможешь ли ты сказать, что первый чем-то принципиально отличается от второго?
PM   Вверх
Feldmarschall
Дата 12.12.2007, 21:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


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

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



Если речь только про "смотреть на это", то к чему все эти рассказы про объективные причины и возможность кардинанльно поменять дизайн сайта?
Все, что ты говоришь объективного, относится к разделению логики приложения и логики отображения. И относится, в том числе, к native PHP шаблонам. Получается, ты приписываешь своему разделению чужие свойства. 

Вот и остается из твоих "объективных" причин только "утомительно смотреть".
Давай и с этим разберемся
Перепишем приведенный тобой пример по-человечкски:
Код

<table cellpadding='0' cellspacing='0' width='100%'>
  <tr>
    <td align='left' width='100%' class='tbl'>
      <a href='<?=FUSION_SELF?>?msg_send=0'><?=$locale['401']?></a>
    </td>
    <td width='1%' class='tbl' style='white-space:nowrap;font-weight: <?if ($folder=="inbox"):?>bold<?else?>normal<?endif?>'>
       <a href='<?=FUSION_SELF?>?folder=inbox'><?=$locale['401']?> [<?=$bdata['inbox_total']?>/<?=$msg_settings['pm_inbox']?>]</a>
    </td>
    <td width='1%' class='tbl' style="white-space:nowrap;font-weight:<?if ($folder=="outbox"):?>bold<?else?>normal<?endif?>">
      <a href='<?=FUSION_SELF?>?folder=outbox'><?=$locale['401']?> [<?=$bdata['outbox_total']?>/<?=$msg_settings['pm_sentbox']?>]</a>
    </td>


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

PM   Вверх
N0dwis
Дата 12.12.2007, 21:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Принципиально, ничем, я уже говорил. Для программиста вообще идентичные. Но с точки зрения дизайнера, мне кажется, первый легче для восприятия. Я не прав?
PM MAIL   Вверх
Feldmarschall
Дата 12.12.2007, 21:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


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

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



Чем легче-то?
Кто такой, вообще, этот "дизайнер"? Человек с Фотошопом и Иллюстратором? Он HTML в глаза не видал.
Как ни спроси любого пхпшника, для чего ему шаблон - он отвечает, "шобы дизайнер мог править!". А спрашиваешь, кто режет шаблоны у них в конторе - "программииииисты...". В лучшем лучае - верстальщик.
Интересно, почему на Яндексе годами висят объявления "нанимаем верстальщиков XSLT"? почему там не написано "Дизайнеров XSLT"?
В результате столько сил угрохивается ради... мифической фигуры! 

С точки зрения дизайнера, говоришь?
Проведи простой эксперимент.
Возьми реальный, я подчеркиваю - реальный шаблон на XSLT. Не учебный пример типа того, что я приводил выше, а боевой шаблон. В котором проверок и условий побольше будет, чем приведенном тобой куске из fusion. И покажи знакомому дизайнеру. Смутно представляющему себе что такое программирование вообще.
А потом поговорим.
PM   Вверх
N0dwis
Дата 12.12.2007, 21:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Перепишу завтра. Сегодня уже голова не варит. Но общую идею понял. Ты хочешь сказать, что на xml это все будет выглядеть еще запутанней. Что ж, может быть, не спорю. Но попробуй все-таки подсунуть этот кусок кода, который всем программистам кажется простым и понятным, дизайнеру... Пошлет я думаю далеко...
Кстати, вопрос по существу, а где в такой схеме место теме сайта (ну в смысле оформлению)? Что она должна делать, если вся верстка уже сделана, причем довольно жестко?

Добавлено через 1 минуту и 43 секунды
Все время опаздываю с ответом на один пост...  smile 
PM MAIL   Вверх
SamDark
Дата 12.12.2007, 21:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый кот
***


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

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



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

Цитата

Обычно в шаблонизаторах код шаблонов храниться в нескольких файлах (даже если в одном - проблема остается) и получается, грубо, что теги, скажем, <body> и </body>, будут находиться в разных файлах, либо в разных частях файла - опять нарушается логика и восприятие.


На эту тему есть у нас замечательный two-step-view.


--------------------
rmcreative.ru — Это жжж неспроста...
yiiframework.ru — О фреймворке Yii на русском.
reggi — здесь я регистрирую домены
PM MAIL WWW GTalk Jabber MSN   Вверх
Feldmarschall
Дата 12.12.2007, 21:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


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

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



Нет, не хочу. Я не хочу сказать, что XSLT хуже, чем PHP
Я хочу сказать, что PHP не хуже XSLT.

Я хочу сказать, что  шаблон в принципе представляет собой программу. На каком бы языке она ни писалась, она все равно останется программой. И рассуждать за бедного дизайнера не имеет смысла.  Если надо исправить только оформление - любой, знакомый с HTML и CSS исправит в нужных местах любой шаблон. Если надо будет исправлять логику вывода - без знаний программирования не обойдешься.

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

У связки XML+XSLT есть свои плюсы. но ты их практически ни одного не озвучил, приводя вместо них те доводы, которые прекрасно относятся и к нелюбимому тобой PHP. вот ради восстановления справедливости я и влез в этот топик =)

Цитата(N0dwis @  12.12.2007,  21:27 Найти цитируемый пост)
где в такой схеме место теме сайта (ну в смысле оформлению)? Что она должна делать, если вся верстка уже сделана, причем довольно жестко?

Не очень понял вопрос. по мне, "тема сайта" - это такой же шаблон, как и другие.
Что значит "верстка уже сделана"? Есть хтмл файл с мордой сайта? Делаем что и обычно - режем из этой морды шаблон. Вставляя в него программные конструкции.

Цитата(N0dwis @  12.12.2007,  21:27 Найти цитируемый пост)
попробуй все-таки подсунуть этот кусок кода, который всем программистам кажется простым и понятным, дизайнеру... Пошлет я думаю далеко...

Чума! Мы думаем совершенно одинаково, практически одними и теми же словами! =)))

PM   Вверх
N0dwis
Дата 12.12.2007, 22:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(SamDark @  12.12.2007,  21:34 Найти цитируемый пост)
На эту тему есть у нас замечательный two-step-view. 

????

Цитата(Feldmarschall @  12.12.2007,  21:40 Найти цитируемый пост)
У связки XML+XSLT есть свои плюсы. но ты их практически ни одного не озвучил, приводя вместо них те доводы, которые прекрасно относятся и к нелюбимому тобой PHP. вот ради восстановления справедливости я и влез в этот топик =)

Почему нелюбимой? Просто пытаюсь прогресс двигать!  smile 
Честно говоря со своей колокольни больше не вижу... Ajax?

Цитата(Feldmarschall @  12.12.2007,  21:40 Найти цитируемый пост)
Не очень понял вопрос. по мне, "тема сайта" - это такой же шаблон, как и другие.
Что значит "верстка уже сделана"? Есть хтмл файл с мордой сайта? Делаем что и обычно - режем из этой морды шаблон. Вставляя в него программные конструкции.

Нет, я не это имел в виду. "верстка уже сделана" относилось к текущей генерации страницы, что вывод html осуществляется самим классом View, а не темой. Сейчас объясню. Если использовать модульную архитектуру cms, а не монолит, то класс (модуль, блок) View - это часть логического модуля сайта (ну там, новости, форум и т.п.). А тема уже будет определять, как это все выглядит, задавать ОБЩИЙ стиль. Я вижу 2 варианта - либо писать тему для каждого модуля (т.е. шаблон), но при этом нужно переписывать абсолютно все шаблоны для всех модулей... А если в системе есть те модули, для которых эта тема не прописана? Либо выносить в тему некое общее оформление, типа обрамления какого-нибудь блока, но тогда не получиться полностью поменять дизайн, т.к. даже при смене темы многие куски будут жестко заданы в самих модулях.
Т.е. приходим к тому, с чего начали - те же самые проблемы, что и у меня со вставкой в xml кусков html. Собственно этого я и хотел добиться, когда разрабатывал на xml - чтобы сам движок генерировал только данные, а полностью весь html настраивался бы. Есть ли другое решение? Может я путанно объяснил конечно...

Цитата(Feldmarschall @  12.12.2007,  21:40 Найти цитируемый пост)
Чума! Мы думаем совершенно одинаково, практически одними и теми же словами! =)))

Родственники наверное... Индийское кино какое-то... smile 

Это сообщение отредактировал(а) N0dwis - 12.12.2007, 22:13
PM MAIL   Вверх
SamDark
Дата 12.12.2007, 22:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый кот
***


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

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



N0dwis
http://ooad.asf.ru/Pattern.aspx?IdKat=7&IdPat=18

Реализовано много раз. Мной в том числе.

Цитата
даже при смене темы многие куски будут жестко заданы в самих модулях

Хм... в модулях(контроллерах, если точнее) не должно быть ничего, что имеет отношение к представлению данных. Всё это для View. Тогда такой проблемы не будет.

В любом случае см. two-step-view.


--------------------
rmcreative.ru — Это жжж неспроста...
yiiframework.ru — О фреймворке Yii на русском.
reggi — здесь я регистрирую домены
PM MAIL WWW GTalk Jabber MSN   Вверх
N0dwis
Дата 12.12.2007, 22:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Ну и чем two-step-view отличается от того, что делаю я??
То же самое, просто я в качестве "логического экрана" использую xml!!!!

Цитата:
Код

Вообще говоря, использование единого логического представления существенно ограничивает возможности оформления Web-сайтов...

То же, что я указывал как недостаток, что приходится вставлять html напрямую!!!!

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

Это сообщение отредактировал(а) N0dwis - 12.12.2007, 22:37
PM MAIL   Вверх
SamDark
Дата 12.12.2007, 22:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый кот
***


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

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



Цитата
То же самое, просто я в качестве "логического экрана" использую xml!!!!

Именно.

Цитата
Вообще говоря, использование единого логического представления существенно ограничивает возможности оформления Web-сайтов...

Ну да. Тут либо единое оформление, либо не единое. View можно построить так, что использование общего View (его, кстати, часто зовут layout-ом) опционально.

p.s. сорри, что не дал статью раньше.


--------------------
rmcreative.ru — Это жжж неспроста...
yiiframework.ru — О фреймворке Yii на русском.
reggi — здесь я регистрирую домены
PM MAIL WWW GTalk Jabber MSN   Вверх
N0dwis
Дата 12.12.2007, 23:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Спасибо все равно. Есть еще что-то похожее? smile 
PM MAIL   Вверх
SamDark
Дата 12.12.2007, 23:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый кот
***


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

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



N0dwis
Похожее на что?


--------------------
rmcreative.ru — Это жжж неспроста...
yiiframework.ru — О фреймворке Yii на русском.
reggi — здесь я регистрирую домены
PM MAIL WWW GTalk Jabber MSN   Вверх
N0dwis
Дата 13.12.2007, 08:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Ну паттерны именно для Web-программирования...
PM MAIL   Вверх
SamDark
Дата 13.12.2007, 12:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый кот
***


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

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





--------------------
rmcreative.ru — Это жжж неспроста...
yiiframework.ru — О фреймворке Yii на русском.
reggi — здесь я регистрирую домены
PM MAIL WWW GTalk Jabber MSN   Вверх
N0dwis
Дата 13.12.2007, 16:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Класс! Спасибо, то, что нужно!
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса

Внимание: данный раздел предназначен для решения сложных, нестандартных задач.

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


 




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


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

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