IMHO.WS

IMHO.WS (http://www.imho.ws/index.php)
-   Для профессионалов (http://www.imho.ws/forumdisplay.php?f=91)
-   -   Использование Шаблонов технологии, принцип и все ЗА и ПРОТИВ (http://www.imho.ws/showthread.php?t=66567)

dacuan 29.10.2004 16:53

Sheryld
Было бы интересно увидеть результаты эксперимента :)

Sych 29.10.2004 18:41

результат на лицо http://sybe.dotgeek.org/ время генерации говорит за себя :-)

dacuan 29.10.2004 19:52

Sych
Время генерации, минимум 0.014, максимум 0.9
Не лучшие показатели :\ На каком сервере стоит система?....

Sych 30.10.2004 10:49

Сейчас все работает на забугорном халявном хостинге так что как говорится системка показывает себя в боевых условиях тк на этом же сервере хостится еще около 5000 проектов.

Время генерации варируется в широких пределах в зависимости от загружености машинки и частоты обращения к этому проекту.

На локальной машине время генерации 1 мега XML + XSLT преобразование не превышает 0.1-0.3 се,обычные странички генерятся за 0.01-0.05 сек.

Хотя я сомневаюсь что в реальных условиях будут файлы такого размера.

Система пока сырая - но дает представление о своей работе и потенциале.

Кому интересно могут написать в приват - Я дам потестить, для работы надо php5.

Hubbitus 30.10.2004 12:15

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

Плюс неоспоримым преимуществом является конечно то что я могу реализовать впринципе любую необходимую конструкцию в нем, а не только тем пользоваться что мне предлагают. Предвосхищая крик многих типа "а в подходе ХХХ уже все это есть и предусмотрено" хочу спросить сколькими вообще возможностями из имеющихся там Вы пользуетесь обычно, и сколько процентов из общего числа Вы использовали хоть раз?! :) А время-то на обработку и условия тратится...

Да и потом как же быть с тем так и не закрытым вопросом должен ли Дизайнер (верстальщик) учить новый язык, например XML? Какая разница, почему бы ему в таком случае не выучить 20 конструкций PHP? :)

Вобщем мне в любом случае оказалось приятнее своя реализация. Как говорится "своя рубашка ближе к телу". Это конечно не аргумент, но это крайне важно, когда нужно решить нестандартные задачи....

Sheryld 15.11.2004 14:34

KTemplate. использую на 100%.

хотя есть и свои наработки.

MOP 13.12.2004 22:31

Шаблоны - только для больших проектов
 
Мой личный опыт показывает:
для разных по размерам проектов надо применять разные подходы.
я бы разделил примерно так...
проект страниц на 10 не больше (есть и такие, например порно сайт) - не стоит мудачиться со всякими шаблонами, пиши, лишь бы работало.

проект где-то до 50 страниц (например сайт знакомств или форум): можно использовать подход header-body-booter. тобишь общие части просто загнать в отдельный файл и вставлять его на каждой странице.
Коенчно, в этих двух случаях вы не увидете никакого разделения дизайна и кода, и это перекроет возможность кодеру прикрутить дизайн к программе самостоятельно, но даже если программист сам это сделает, выигрышь времени будет на лицо.
Использовать шаблоны я бы рекомендовал только в больших проектах (более 50 страниц). Еще один огромный плюс шаблонов: при условии удачного соглашении об именовании переменных, методов и классов и использовании ООП вместе с шаблонами, проект выполненный с использованием шаблонов дает преимущество в поддержке.

Hubbitus 14.12.2004 00:31

Цитата:

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

RaZEr 14.12.2004 06:32

Цитата:

проект страниц на 10 не больше (есть и такие, например порно сайт)
Порно сайт в 10 страниц ... 5 превью и 5 - биллинг :ржать:

Ruferut 15.01.2005 13:12

Я использую php_templates и chtemplate.
Оба движка работают как extension к php, поэтому скорость работы по сравнению с самим пхп (<?=$content?>) практически минимальна (т.е. почти нет вообще). По сравнению с аналогами (smarty, fasttemplate, xtemplate даже при использовании ими кэширования) генерация с помощью этих движком происходит в разы быстрее. В php-templates правда тоже встроен механизм кеширования в вирт. памяти.
За то плюсы на лицо: быстрая генерация страницы, полное разделение дизайна от кода.
Минусы: то что используется как библиотека, поэтому надо просить хостера чтоб установил.

Hubbitus 15.01.2005 15:27

Цитата:

Ruferut:
поэтому скорость работы по сравнению с самим пхп (<?=$content?>) практически минимальна (т.е. почти нет вообще).
Это круто сказано, конечно можно догадаться что имелось ввиду, но написано что "скорость работы минимальна, тоесть вообще не работает" :ржать:

Ну со скоростью вроде понятно, есть более быстрые и более медленные решения. Я вообще не люблю стороннних продуктов, поэтому написал вобщем-то свой класс шаблонов, открытым остается самый главный и принципиальный вопрос - разделение и наглядность!

Итак, мне все-таки пришломь разбираться со Smarty в одном из проектов (многим известный X-Cart Gold), приведу пример шаблона на смарти:
Код:

{section name=cat_num loop=$categories}
    {capture name=block}
        {section name=cat_n loop=$categories[cat_num].sub}
            • <a class="leftLinks" href="home.php?cat={ $categories[cat_num].sub[cat_n].categoryid }"> { categories[cat_num].sub[cat_n].category|escape }</a><br>
        {/section}
    {/capture}
    {include file="block.tpl" title="<a class=insideTitle3 href=home.php?cat=`$categories[cat_num].categoryid`>`$categories[cat_num].category`</a>" content=$smarty.capture.block extra="class=bgInside5"}
{/section}

Это простенький (!), полностью реальный, работающий шаблон с сайта, для формироания списка категорий в магазине, включающийся в остальные страницы.
Итак главный вопрос: Это наглядно для дизайнера, не разбирающегося в программировании вовсе???? Это реализует концепцию разделения кода и содержания?
Только не нужно говорить, типа "и не нужно использовать Смарти, вон в ХХХ все наглядно и просто", когда шаблонизатор обрастает возможностями и функциональностью, его синтаксис неизменно усложняется, с этим, надеюсь, никто спорить не будет. Тоесть, при том что я сам написал шаблонизатор для собственного использования, и мне с ним удобнее теперь работать, я никак не могу нормально разобраться во всем этом принципе: как же это все должно быть в идеале....

Sheryld 16.01.2005 16:15

у каждого свой идеал. вместо "навороченных" шаблонов нужно использовать xslt. там это все уже есть и даже больше.

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

мне нравиться делать следующим образом:

есть шаблон. вся его обработка идет в коде. пример:

Код:

<!-- BEGIN list -->
<table>
  <!-- BEGIN list_item -->
    <tr>
      <td>
        {item_title}
      </td>
    </tr>
  <!-- END list_item -->
</table>
<!-- END list -->

Вся обработка идет в php.

1. разделение кода.
2. простота.

p.s. мне идеально подошел KTemplate.

RaZEr 16.01.2005 16:33

Цитата:

вообще верстку должен делать не дизайнер, а верстальщик, а у него должна быть некоторая подготовка.
Не согласен. Дизайнер задумывал дизайн и соответственно он сверстает лучше кого бы то нибыло. А как внедрить это вопрос к разработчикам тех. части (хотя часто всё обходится header-footer заменой).

Sheryld 16.01.2005 17:53

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

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

Hubbitus 16.01.2005 18:09

Ребята, ребята, не стоит об этом спорить :beer: , неважно кто будет делать верстку дизайнер или верстальщик, вы мне лучше ответьте на другой вопрос, что значит

Цитата:

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

Sheryld:
нравиться делать следующим образом
, в очередном проекте, и не важно совсем что это будет: Smarty, xslt, KTemplate или многие, многие другие?

И вот теперь, тут, мы возвращаемся к самому моему первому и принципиальному вопросу, заданному в самом начале этой темы, и как-то оставленном посути в стороне, отвлекаясь на всякие частности, на альтернативы и т.д.: А не проще ли Дизайнеру (пусть верстальщику) выучить десяток-два конструкций на PHP, тех что ему необходимы для верстки??? Это не универсальнее вообще? Тоесть разделение возможно и нужно, но нужно ли его делать "полным" и для этого изобретать велосипеды и новые технологии, кому какие вздумается?

Sheryld 16.01.2005 20:01

еще раз и все по-порядку.

1. я уже давно не делаю вставок php кода в html. просто считаю это не правильным подходом. отсюда и идут шаблоны(при всех остальных плюсах). более того, там где это возможно(по срокам) стараюсь всегда делать четкое разделение приложения на уровни(data layer, biz, logic, output, etc).

обычно у меня так:

1.база данных.
2.класс, инкапсулирующий всю логику.
3.сборка страницы.
4.шаблон.

уровни могут "общаться" только с соседними.

если нету времени, 2-ой уровень убирается.

2. xslt это язык программирования. дизайнер его знать не обязан, а хорошему верстальщику - самое оно.

3. ответ на твой вопрос для меня очевиден: не проще и не правильно.

Hubbitus 17.01.2005 15:44

Цитата:

Sheryld:
1. я уже давно не делаю вставок php кода в html. просто считаю это не правильным подходом.
"просто неправильный подход" давай остаим в детском саду ответ, ок?
Цитата:

Sheryld:
если нету времени, 2-ой уровень убирается.
Гы, самое главное, логика приложения убирается??? Оригинальный подход. И потом разве БД не входит в 2, ведь для обеспечения логики работы с данными она какраз и используется...

Цитата:

Sheryld:
2. xslt это язык программирования. дизайнер его знать не обязан, а хорошему верстальщику - самое оно.
Тоесть ты настаиваешь, что если верстальщику (ну пусть, раз именно тебе так хочется, верстальщику, хотя я согласен с RaZErом и никак не могу понять почему принципиально дизайнер не может сверстать), чтобы нормально работать с тобой нужно знать XSLT? А потом он со мной будет работать, я а скажем (пример), Смарти люблю, то и его ему узнать "самое оно"? А с Петей программистом, которому, скажем, KTemplate нравится, тут уже он "самое оно"??? Тоесть получатся программистам в простейшем случае (не нужно утрировать и придираться, я вобщем говорю) нужно знать только PHP, а бедному верстальщику изучать каждый раз то что программисту придет в голову???

Цитата:

Sheryld:
3. ответ на твой вопрос для меня очевиден: не проще и не правильно.
Смотри самое начало этого поста.

Sheryld 17.01.2005 19:05

2Hub

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

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

Код:

class Item extends AbstractItem //base item
{
  var $itemInfo = array(
        'id'=>0,
        'catid'=>0,
        'title'=>''
        );
       
  var $itemCollection = array();
  .
  .
  .
function GetItemById($itemID)
        {
                $db = new MySql(null,null,null,null);
                $db->MySql_Connect();
                $db->MySql_SelectDb();

                $selectQuery = "select itm_ID, cat_ID, itm_TITLE from cat_item where itm_ID = " . $itemID . " limit 1";

                $db->MySql_QueryDb($selectQuery);

                if ($db->dbResult != null)
                {
                        while($row = mysql_fetch_assoc($db->dbResult))
                        {
                                $this->itemInfo['id'] = $row['itm_ID'];
                                $this->itemInfo['catid'] = $row['cat_ID'];
                                $this->itemInfo['title'] = $row['itm_TITLE'];
                        }
                        return 0;
                }
               
                return -1;
       
        }

  .
  .
  .
}

страница "x" будет в таком случае следующей:

Код:

$item = new Item(); //default constructor
if ($item->GetItemById(1) == 0)
{
  print_r($item->itemInfo);
}

в чем суть?

в том, что страница "x" ничего не знает ни о бд, ни о запросах, вообще ни о чем, вся ее задача это вывести данные на экран.

при подобной архитектуре, приложение становится очень гибким, а код можно реалньо использовать во множестве проектов, т.к. нужно будет менять только вывод(HTML, XML, ETC).

если же нету времени, то я переношу логику на 3-ий этап.

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

про дизайнера - я все написал. добавить мне нечего.

p.s. в данном случа программист должен будет распарсить шаблон, а верстальщик собвственно их сделать.

пример опять же:

дизайнер сделал макет, эских или предвариетльную верстку:

элемент "список"

верстальщик сделал:

Код:

<!-- BEGIN list -->
<table>
  <!-- BEGIN list_item -->
    <tr>
      <td>
        {item_title}
      </td>
    </tr>
  <!-- END list_item -->
</table>
<!-- END list -->

программист(псевдо шаблонизатор):

Код:

$listTpl = $tpl->fetchblock("list");
 
foreach($item->itemCollection as $itemObject)
{
  $listItemTpl = $listTpl->fetchBlock(list_item);
  $listItemTpl->assign("item_title",$itemObject["title"]);
  $listTpl->assign("list_item",$listItemTpl );
  $listItemTpl->reset();
 
}

$tpl->assign("list",$listTpl);


Hubbitus 17.01.2005 21:52

Sheryld, ты меня конечно извини, и без обид, но все что ты написал к этому топику, и вопросу шаблонов относится очень мало :mad:

Цитата:

Sheryld:
я совершенно не настаиваю на своем подходе.
Я и не убеждаю никого что твой подход плох или хорош, у всех свои подходы к написанию приложений, в чем-то я согласен с твоим подходом (во многом), в чем-то нет, но не в этом же дело!!! Здесь я спрашивал всех именно насчет той части "верстальщик сделал:..." и принципиально кто и как это должен обрабатывать, на каком принципе (меня мало интересна реализация именно тобой бизнес-логики и общения с БД...).

Итак, приведенный тобой код того что "верстальщик сделал" так красив просто и понятен только пока .... он так прост! Я же привел пример к чему приводит наращивание возможностей, на примере Смарти. А подобного не избежать никак помоему - полюбому и верстальщику нужно будет все больше возможностей и универсальности... Дак вот где здесь компромисс??

Aeon 27.01.2005 02:03

Здесь есть ещё неплохая статья на эту тему (но на английском).
http://www.massassi.com/php/articles/template_engines/

shuron 30.01.2005 18:56

Цитата:

Сообщение от Hubbitus
Sheryld, ты меня конечно извини, и без обид, но все что ты написал к этому топику, и вопросу шаблонов относится очень мало :mad:

какраз таки из его постов подчерпнул много интересного!
лови харизму ;)

Цитата:

Сообщение от dacuan
Подведем итог.
Предложенные технологии:
1) Синтаксис ПХП.
- плюсы - быстрый не требуется переучиваться, большая функциональность и поддержка всех возможностей ПХП;
- минусы - нечеткое разделение кода и дизайна, слабая переносимость шаблонов (при реализации проекта на другом языке, шаблоны придется переделать).
2) Стандартные шаблонизаторы (Smarty, FastTemplate)
- плюсы - более сильное разделение дизайна и кода;
- минусы - не так быстры, как синтаксис ПХП, при переносе проекта необходимо будет кроме основного кода переносить и шаблонный движок.
3) XML/XSLT
- плюсы - полное разделение дизайна и кода, хорошая переносимость (работа с XML/XSLT реализована в большинстве современных языков);
- минусы - неясен вопрос производительности (по крайней мере для меня), вводится промежуточный способ хранения данных (XML).

Если у кого что есть добавить, прошу высказываться, только без постов вида "... рулит, все остальное %#@$" :)

Может вернёмся сюда и обсудим ещё павру пимеров за и против..
я пока тендирую к пункту 2) но писать свой...

denver 04.03.2005 13:08

Только что заметил этот топик. Актуальная и наболевшая темка :yees:
Все вы говорите правильно, но кое-где ошибаетесь.

PHP вставки:
Недостаткии у вставок PHP кода типа <?=$var?> я вижу такие:
1. Это дыра, т.к. дизайнер или еще кто-то кто не отвечает за PHP код имеет полный доступ ко всем переменным сайта, может неакуратно проверить работает ли exec("rm -rf *.*") и т.д.
2. Ээээ... да и нет больше недостатков в принципе. Вот только что по-идиотски выглядят шаблоны сайта. Верстальщика и правда может шугать, потому-что человека шугает все что он не понимает, такова природа.
А верстальщики понимающие PHP долго не живут (ну переквалифицируются в программеров).

Темплейты:
Темплейты типа FastTemplate, Smarty и пр. решают в принципе первую проблему. Но вторую просто вуалируют, при этом создавая каждый свой новый миниязык, который хоть и несложно понять, но непонятно зачем.
Но...
Не все темплейты одинаково полезны, некоторые добавляют еще и проблем верстальщикам, т.к. иногда миниязык темплейтов отнюдь не является валидный кодом или частично использует преимущества html, как например использует <!-- комментарии HTML --> для своих целей:
Код:

<!-- BEGIN list -->
<table>
  <!-- BEGIN list_item -->
    <tr>
      <td>
        {item_title}
      </td>
    </tr>
  <!-- END list_item -->
</table>
<!-- END list -->

Комментарии не предназначены для этого! оставьте право (или возможность) использовать комментарии верстальщику! Довольно сложно например после таких вставок закоментировать весь этот приведенный блок, т.к. комментарии HTML не могут быть вложенными друг в друга. Кроме того комменты эти (по сути не комменты, а инструкции, отсутствие которых может привести к фатальной ошибке) могут быть запросто проигнорированы в визуальных редакторах HTML.

XML/XSL:
Вот тут не прозвучало ничего верного. Некоторые считают что XML должен заменить базу данных под MySQL, а кое-кто предлагает записывать данные в БД и в XML параллельно (кой нафиг толк в БД тогда? :)). Но абстрагируйтесь от XML как от формата хранения. Система темплейтов основанная на XML использует (должна использовать) этот самый XML только для отображения, причем промежуточного, данных (не совсем корректно сказать следующее -- но все же для передачи нужных данных в XSL). Как это работает (вернее как должно работать):
Вся задача PHP сводится к тому чтобы создать переменную содержащую например следующий текст:
Код:

<page>
        <title>Imho.ws / Варезник / Агнитум аутпост 2.0</title>
        <user>denver</user>
        <thread>
                <page>1</page>
                <lastpage>25</lastpage>
                <post>
                        <user>User1</user>
                        <message>Hello everybody, need crack</message>
                </post>
                <post>
                        <user>denver</user>
                        <message>RTFM</message>
                </post>
                <post>
                        <user>User1</user>
                        <message>Hello everybody, need crack</message>
                </post>
        </thread>
</page>

Причем данная переменная содержит только тот текст (не считая тэгов, хотя они тоже важны) который будет в конце концов в конечном HTML. Не обязательно выводить все посты если будет показана лишь страница номер 1. Необязательно выводить все треды если будет показан только тред "Агнитум Аутпост 2.0" и т.п. Не нужно мегабайтных XML файлов. XML создается налету, а данные берутся из БД.
Итак, у нас есть уже XML (в памяти), применяем к нему файл showthread.xsl и отдаем получившийся HTML пользователю.

Возникает вопрос зачем генерировать XML (чтобы потом его еще и XSLем обрабатывать) если можно сразу в HTML пропарсить? А затем что у вас в ПХП станет на десяток меньше str_replace'ов (не надо парсить никаких переменных), на пару-тройку меньше preg_match'ей (нет смысла извлекать из темплейтов блоки <!-- BEGIN block1 --> ... <!-- END block1 --> чтобы их продублировать нужное количество раз). Это задача процессора XSLT. И (гипотетически) модуль XSLT будет конвертировать XML в HTML быстрее чем ваш PHP код со всеми str_replace'ами и preg_match'ами вместе взятыми. А кроме того:

Плюсы такого подхода:
1. Никакой зависимости от оформления. Т.к.:

а) неважно в каком месте XML (в начале или в конце) находится какая-то переменная или блок, XSLT выведет (или не выведет) его в том месте HTML в котором надо.
б) Больше никаких "двойных" блоков (или лишней переменной $bgcolor например) если надо сделать таблицу с зеброй. Зебру будет делать XSLT.
в) XSLT даже может создать навигацию страниц типа: Страница 2 из 25 (на первую) [1], [2]...[25] (на последнюю). Единственно что нужно это задать в XML что-то типа <thread page="2" lastpage="25"> ну или как угодно, главное чтобы валидно.
д) Верстальщик может менять XSL а программер XML одновременно, не боясь получить логических ошибок типа "нужный блок не найден" и т.п.
е) а также е) ж) з)... -- PHP код сводится к минимуму, т.к. все (буквально все) задачи связанные с отображением и дизайном переключаются на XSLT ("вставьте мне сюда серое, а тут белое, через одно" - вали к верстальшику, в коде PHP этого быть не должно. "Хочу чтобы каждая первая буква параграфов была картиночкой с прикольной буквочкой" - к верстальщику, "Здесь тоже мининавигацию вставить" - туда же). Задача PHP -- вывести только необходимые _реальные_ данные.


2. Скорость вывода XML + обработка его XSL (не забываем что это практически встроенная функция) теоретически больше чем парсинга переменных и блоков в HTML (не забываем о куче str_replace, preg_match).

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

4. Никаких дырок и пр.

Минусы:
1. (первый и последний). Верстальщику придется знать XSLT (хоть и не шибко сложный, но энивэй) (хотя с другой стороны - если не XSL, так Smarty, который не понятно что за язык и непонятно с каким будущим).
2. (ан нет, не последний). HTML должен соответствовать XHTML, т.е.больше никаких незакрытых тэгов, никаких инвалидных закрытй типа <b><i></b></i> и т.п. Но это даже полезно будет.

ЗЫ. Кроме того. Не сегодня так завтра, когда все больше браузеров смогут обрабатывать XML + XSL сами (сегодня это только мозилла последних версий и IE начиная с 6.0) весь парсинг можно вообще перекинуть на сторону клиента -- отадавать сгенерированный XML (включаем в него также ссылку на XSL). Но это все будет только лет через 5, когда старые браузеры наконец исчезнут (блин, когда ж они все исчезнут).

Hubbitus 04.03.2005 19:15

denver, КРУТО, описано все четко и подробно.

Поэтому так и хочется задать множество вопросов, как профессионалу:
1) В PHP-вставках вида <?=$var?> единственное что ты нашел из недостатков это возможная кривость рук дизайнера и "по-идиотски выглядят шаблоны сайта". Первое может присутствовать в любом подходе и даже допуская именно в этом большую опасность, не хочу брать это в расчет. Второе - конечно ты прав, да и с шаблонными движками наблюдается похожее, НО, согласись, XSL, каким бы не был "встроенным", должен обрабатывать XML парсить его и превращать во что-то другое, соответственно полюбому будет медленнее чем ничего не делать а просто выводить, как в этом случае :)
Да и заявления из разных частей поста:
Цитата:

denver:
Верстальщика и правда может шугать, потому-что человека шугает все что мы он понимает, такова природа.
Цитата:

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

Цитата:

denver:
Возникает вопрос зачем генерировать XML (чтобы потом его еще и XSLем обрабатывать) если можно сразу в HTML пропарсить? А затем что у вас в ПХП станет на десяток меньше str_replace'ов (не надо парсить никаких переменных), на пару-тройку меньше preg_match'ей (нет смысла извлекать из темплейтов блоки <!-- BEGIN block1 --> ... <!-- END block1 --> чтобы их продублировать нужное количество раз).
Гениально просто конечно, а валидный XML на PHP не теми же str_replace'ами и preg_replace'ами создать придется? Да, наверное его проще сгенерировать на PHP и быстрее, но нужно не забывать что после этого еще и обработка должны быть, так что быстрее это спорно...

И еще, возможно главный вопрос, вот ты говоришь про всякие рюшечки
Цитата:

denver:
PHP код сводится к минимуму, т.к. все (буквально все) задачи связанные с отображением и дизайном переключаются на XSLT ("вставьте мне сюда серое, а тут белое, через одно" - вали к верстальшику, в коде PHP этого быть не должно. "Хочу чтобы каждая первая буква параграфов была картиночкой с прикольной буквочкой" - к верстальщику, "Здесь тоже мининавигацию вставить" - туда же).
- это ли уже будет в итоге не программированеи вывода, только верстальщиком???? Ты уверен что это правильная расстановка приоритетов? Помоему в идеале (повторю в идеале, поскольку куча сложностей с этим возникает на практике), дизайнер-верстальщик какраз должен только оформлением заниматься, тоесть не считать количество страниц (из твоего примера) в заданном в XML диаппозоне, не считать сколько страниц пропустить, заменив на "...", а (в идеале) просто задать скажем, что страницы должны отображаться красным шрифтом, 14 кегля, а текущая - зеленым, 16 и все, остальное поумолчанию, если он не задал... Опять же очень актуальные проблемы с парсингом xhtml в Експлорере. Да и большой, очень огромный размер документов/шаблонов на XML тоже весьма не последний фактор помоему...

y13 04.03.2005 21:40

С Hubbitus, по поводу приоритетов абсолютно согласен. А вот с предыдущими 2 страницами, совершенно не согласен.
Если брать под ваши требования, тогда скажу так: Вот под perl, есть ведь такой модуль HTML::Template, который хоть и имеет свой псевдоязык, но лихо решает многие проблемы связанные с шаблонизацией. В нём решена проблема с комментариями, путём внедрения в код "песвдо-тегов" (тем кому эта проблема не мешает, можно продолжать пользоваться комментариями).

А если с точки зрения управления процессом производства: Я вообще что-то не совсем понимаю, с чего этот топик начался. Есть чёткое разделение труда, отделяющее дизайн от программирования. Не с того конца смотрите, думаю что шаблонизация, это проблема программиста в первую очередь: дизайнер ему выдаёт готовый к работе шаблон, а программист уже в свою очередь уже разбирается, как и зачем его продукт этот шаблон использует. Программисту намного проще разобраться в html коде, чем дизайнеру учить псевдоязык.
Насколько я знаю, GUI пишется в последнюю очередь (в нормальных проектах), а вы тут пытаетесь телегу впереди лошади поставить. Написали систему? Давайте дизайнеру спецификацию требуемого шаблона. Получили шаблон - прикрутили к системе. Все довольны.

Или я не прав?

RaZEr 04.03.2005 22:02

Вы не забывайте, что XML будет посложнее в реализации. То хостер консерватор-придурок не ставит нужные расширения, то любимая программка не понимает UTF-8, то клиент хочет сам редактировать HTML, при этом икая услышав "W3C Recommendation" или "Valid XHTML".

denver 04.03.2005 22:48

Hubbitus
Насчет противоречий двух фраз - не вижу никаких противоречий. Если верстальщик понимает XSLT то XSLT его не шугает :) А то что учить XSL придется я посчитал как раз за минус.

Цитата:

а валидный XML на PHP не теми же str_replace'ами и preg_replace'ами создать придется?
Валидный XML не так уж и сложно производить: берем $var и записываем как "<".$foo.">".htmlspecialchars($var)."</".$foo.">". Единственное несложное правило :)
str_replace не нужен. т.к. никакого шаблона самого XML не существует. В каждом php файле (ну т.е. для каждого типа страниц) будет свой, таким каким захочет его сделать программер (будем считать что программер тут имеет выбор), в идеале -- таким который отвечал бы логике страницы -- (представь например идеальную страницу топика без любого форматирования и выведи ее). В конце концов выводишь ты не для человека, еще раз напомню -- это промежуточный вывод.

Насчет скорости XSLT -- надо тестировать, я не зря говорил о гипотетичной быстроте процессора XSLT, т.к. процессор процессору рознь. Есть слухи что в PHP5 он намного быстрее чем sablotron из PHP4. И дальше скорее всего он тоже будет оптимизироваться. Но не исключено что и в PHP4 скорость парсинга PHP->XML->XSLT->HTML быстрее чем парсинга Smarty->PHP->HTML, только по тому что шаг XML->XSLT->HTML делается одной функцией: echo xslt_process($xml, $xsl). Мне вот подсознательно кажется что одна функция лучше чем много других :) Уравняем шансы договорившись что результирующий HTML будет одинаковый, соответсвенно сложность Smarty кода будет примерно равна сложности XSLT. Однако это очевидо что код Smarty-"процессора" написан на PHP, а код XSLT-процессора на языке более (если не самого) низкого уровня. Надеюсь я понятно аргументировал.

Цитата:

это ли уже будет в итоге не программированеи вывода, только верстальщиком????
Тут ты верно подметил. Просто вы не говорили еще о следующем и я не стал указывать. Но таки в проблеме "шаблониовании" подразумевается какой-либо один из двух подходов (или двух проблем):
1. Отделение PHP кода от HTML кода.
либо
2. Отделение бизнес логики от логики отображения.
При чем, подчеркну, это не одно и то же. Первый подход это и есть путь FastTemplate, в шаблонах нет PHP кода, однако изменить логику отображения не удастся верстальщику не пнув программера чтобы тот внес изменения туда где в идеале должна быть только бизнес логика -- в коде PHP.
Второй подход -- это как раз Smarty и XSLT. В их шаблонах тоже нет PHP кода, однако логика отображения может менятся вне зависимости от программера с его кодом.
Конечно координация между верстальщиком и программером нужна всегда, вопрос лишь в том что во втором подходе они не координируют уже те вещи которые относятся (по крайней мере должны относится) только к одному из них. Например не будут таких запросов как "Верстальщик: мне нужно чтобы в переменную $color парсилось #FFF если ячейка четная и #000 если наоборот".

Другой вопрос -- что тебе важнее разделять. Быть может с этого и надо было начинать? Иногда (а в идеальном, портируемом коде -- всегда) лучше не засорять PHP переменными содержащими цвета элементов и все такое остальное (субъективное). Вот в таком случае без знаний некого третьего языка -- языка управления отображением не обойтись, будь то Smarty или XSLT.

RaZEr
Цитата:

XML будет посложнее в реализации.
1. Мой XML'ный движок под саблотрон содержит 70 строчек кода (xml.lib.php). При этом для страницы выдающей HTML c основой иксэмэля такого вида:
Код:

<page>
        <class>topic</class>
        <posts>
                <post>
                        <user>denver</user>
                        <message>bla-bla-bla</message>
                </post>
                <post>
                        <user>RaZEr</user>
                        <message>RTFM</message>
                </post>
        </posts>
</page>

PHP буквально следующий:
PHP код:

<?
require('xml.lib.php');

$xml = new block('page', array(
    
element('class''topic'),
    new 
block('posts', array(
        new 
block('post', array(
            
element('user''denver'),
            
element('message''bla-bla-bla')
        )),
        new 
block('post', array(
            
element('user''RaZEr'),
            
element('message''RTFM')
        ))
    ))
));

echo 
$xml->output("/xsl/topic.xsl");
die(
"<!-- page generated ok -->");

Ну естественно в реальности масив заполняется в цикле, на основании данных из БД. Затем уже делается:
$page->include('posts', $posts);
$xml->include('page', $page);
или что-то типа того. Т.е. не так уж много кода, а XML тем не менее выдается валидный.
Понятно что результирующий HTML очень может даже походить на HTML страницы данного топика (чуть больше элементов добавить), но очевидно что код PHP все равно будет меньше чем если бы он был под FastTemplate (учитывая всю специфику imho.ws топика - вывод зебры, навигации, текущего раздела и т.п.).

Цитата:

То хостер консерватор-придурок не ставит нужные расширения
Это дело времени (или другого хостера).

Цитата:

то любимая программка не понимает UTF-8
О кодировке вообще речь не идет. XML и иже абстрактен от кодировок.

Цитата:

то клиент хочет сам редактировать HTML, при этом икая услышав "W3C Recommendation" или "Valid XHTML".
Если речь идет о некоей CMS то клиентский код вставляем обработав его htmlspecialchars(), сойдет т.к. придерживаться XHTML обязательно только в XSL файлах, а результирующий HТML может быть хоть трижды невалиден (при желании :)).
Если же речь идет о том что клиент (зная HTML или наняв дешевого верстальшика) хочет править шаблоны, то тогда согласен, XSLT не подходит.

В любом случае (кроме последнего) все проблемы не являются боьльшими проблемами и решаются сегодня.

denver 05.03.2005 00:41

Hubbitus
Да, чуть не забыл
Цитата:

Опять же очень актуальные проблемы с парсингом xhtml в Експлорере. Да и большой, очень огромный размер документов/шаблонов на XML тоже весьма не последний фактор помоему...
Касательно последнего. XML опять-же будет не шибко большим, т.к. не имеет избыточных данных и данных не имеющих отношение к результирующей HTML странице. А размер XSL шаблона не намного больше размера Smarty шаблона, конструкции действительно там чуть шире :) но ничего такого уж серьезного.

Из "актуальных проблем эксплорера" достаточно смирится только с тем что <script> должен иметь закрывающий элемент именно в виде </script> (да, это весьма в духе MS, но ведь не забил никто на CSS хоть и, помимо всех других, существует нехилая такая бага с боксовой моделью в IE5/IE5.5, ведь смирились как-то).

Hubbitus 05.03.2005 01:48

А вы знаете, y13 высказал очень простую, но вместе с тем (как всегда) грамотную вешь: Дизайнер должен заниматься дизайном, зачем ему вообще учить что-либо, может действительно ему достаточно разработать концепцию, пример, скажем на чистом HTML и с тестовыми данными (кстати я так и получаю почти всевремя), а "прикрутить" дизайн это уже работа программера, и как он это сделает и что удобно использовать должно быть для него (и для других программеров, если есть в проекте)!!!???

Да и RaZEr прав, что касается все-таки сложности реализации...
Цитата:

denver:
Насчет противоречий двух фраз - не вижу никаких противоречий. Если верстальщик понимает XSLT то XSLT его не шугает А то что учить XSL придется я посчитал как раз за минус.
Мы какраз исходим из того что Дизайнер ничего кроме HTML какбы и не знает, и пытаемся решить стоит ли ему учить XSLT (или что-то другое из обсуждаемого здесь), или может вполне достаточно десятка абсолютно простых и стандарных PHP-конструкций!
Цитата:

denver:
Насчет скорости XSLT -- надо тестировать, я не зря говорил о гипотетичной быстроте процессора XSLT, т.к. процессор процессору рознь. Есть слухи что в PHP5 он намного быстрее чем sablotron из PHP4. И дальше скорее всего он тоже будет оптимизироваться. Но не исключено что и в PHP4 скорость парсинга PHP->XML->XSLT->HTML быстрее чем парсинга Smarty->PHP->HTML, только по тому что шаг XML->XSLT->HTML делается одной функцией: echo xslt_process($xml, $xsl). Мне вот подсознательно кажется что одна функция лучше чем много других Уравняем шансы договорившись что результирующий HTML будет одинаковый, соответсвенно сложность Smarty кода будет примерно равна сложности XSLT. Однако это очевидо что код Smarty-"процессора" написан на PHP, а код XSLT-процессора на языке более (если не самого) низкого уровня. Надеюсь я понятно аргументировал.
Да, нужно тестировать, согласен, однако позволю себе не согласится почти со всем сказанным в цитате выше:
Про парсинг XML в разных версиях PHP и про разные парсеры я не могу особенно говорить - нету опыта. А вот "Но не исключено что и в PHP4 скорость парсинга PHP->XML->XSLT->HTML быстрее чем парсинга Smarty->PHP->HTML, только по тому что шаг XML->XSLT->HTML делается одной функцией: echo xslt_process($xml, $xsl)." более чем странное заявление - Во-первых, не мне Вам как программисту говорить что одна функция это совсем не показатель скорости, и сама она может работать крайне медоенно, и от реализации зависит, и вызывать она может (да и вызывает, я почти уверен) сотни других, и Во-вторых, например Smarty парсит свой шаблон один раз, переводит его в PHP и все, выполняется дальше этот кешь, при последующих запросах, тоесть ВООБЩЕ исключается задержка на нем, шаблон перекомпилируется снова только после изменения исходного...
Цитата:

denver:
Просто вы не говорили еще о следующем и я не стал указывать. Но таки в проблеме "шаблониовании" подразумевается какой-либо один из двух подходов (или двух проблем):
Помоему мы именно об этом и говорим: в первом подходе, указанном тобой, не вижу смысла отделать чисто PHP от HTML, кроме как разделения логики от отображения, не ставим ли смыслом шаблонов мы избавить дизайнера от написания какой-либо логики и заниматься отображением?? Точно также и в обозначенном тобой втором подходе, если программер не предусмотрел каких-то данных, то и вывести их (я не о банальных типа текущей даты) дизайнеру не удасться... Поэтому наверное ты и прав насчет этого разделения и подходов, но как-то уж очень они запутанны получаются и разделить таким именно образом врядли удастся...
Цитата:

denver:
Другой вопрос -- что тебе важнее разделять. Быть может с этого и надо было начинать? Иногда (а в идеальном, портируемом коде -- всегда) лучше не засорять PHP переменными содержащими цвета элементов и все такое остальное (субъективное). Вот в таком случае без знаний некого третьего языка -- языка управления отображением не обойтись, будь то Smarty или XSLT.
С этого и надо возможно начинать, только опять же, решить бы это в общем случае. Да, я согласен что лучше не засорять подобными вещами ПХП, но значит (если требуется), нужно просто предусмотреть так чтобы дизайнер мог эти параметры задать в шаблоне, не прибегая опять же к программированию, тоесть например не задвать специально переменные $color для четных и нечетных рядов, а сделать разделение этих рядов, чтобы дизайнер мог прописать цвета. Согласен, не всегда это делается легко и очевидно в любом выбранном подходе...

Все остальное сказанное не буду комментировать подробно, не в реализации и конкретных PHP-инструкциях дело, надеюсь сделать все приведенные тобой PHP-примеры сможет любой кто говорит по этой теме, иначе что обсуждать ;) Да и RaZEr, как мне кажется, говорил не о том немножко...
Лишь вернусь опять к тому с чего начинали, нужно сформировать на PHP скажем
Код:

        <posts>
                <post>
                        <user>denver</user>
                        <message>bla-bla-bla</message>
                </post>
                <post>
                        <user>RaZEr</user>
                        <message>RTFM</message>
                </post>
        </posts>

А дизайнер опять же должен определить в шаблоне цикл по постам.... И это вместо того чтобы просто передать массив $posts в шаблонизатор, который также обработает шаблон с циклом по постам!!!

Цитата:

denver:
Из "актуальных проблем эксплорера" достаточно смирится только с тем что <script> должен иметь закрывающий элемент именно в виде </script>
Нееет, далеко не в этом только, в приведенном топике по моей ссылке вы могли прочитать достаточно обоснованной ругани по этому поводу, плюс http://www.hixie.ch/advocacy/xhtml да и еще много другого, стоит только поискать чуть-чуть...

denver 05.03.2005 10:27

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

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

Hubbitus 05.03.2005 12:11

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

Цитата:

denver:
Попробуй сам себе объяснить зачем кто-то там разрабтал Smarty, какую именно проблему он решал, почему много кто юзает Smarty, если уже давно была FastTemplate -- которая меньше и намного быстрее...
Ну зачем это тоже очень непростой вопрос, который не до конца ясен, из него понятно одно - для упрощения разработки. Smarty, FastTemplate, чего зацикливаться-то на них, подобных шаблонизаторов море разливанное, спрашивается, чего их люди пишут, если по твоей логике есть Smarty и его много кто юзает???

denver 05.03.2005 12:36

Hubbitus
Цитата:

Ну зачем это тоже очень непростой вопрос, который не до конца ясен, из него понятно одно - для упрощения разработки. Smarty, FastTemplate, чего зацикливаться-то на них
Тем кто пишет теплейт системы вопрос ясен. В компаниях с верстальщиками и программерами использующих их -- тоже. Другое дело что кому-то, например, со своей домашней страничкой довольно туманно зачем это все надо и какие там различия. FastTemplate и Smarty клонов очень много, но о них я говорю так как это были первые, каждый в своем роде (Smarty != клон FastTemplate).

Еще раз напомню что их пока всего то и есть 2 рода темплейт систем.

RaZEr 05.03.2005 12:38

Цитата:

Мой XML'ный движок под саблотрон содержит 70 строчек кода (xml.lib.php)
А движок по выводу php-Вставок занимает 0 строк. Это не показатель...
Цитата:

XML и иже абстрактен от кодировок
Особенно в PHP... как сейчас помню DOMXML и постоянные перекодировки тюда-сюда, потому что тут он берет только юникод, там отдает только его...

PS: Это конечно было пару лет назад, сейчас может дописали наконец.
Цитата:

а результирующий HТML может быть хоть трижды невалиден
Дело не в результирующем. То что клиент сам наредактировал должно быть перед XSLT, иначе весь этот код не будет трансформирован. А если с исходном XML для XSLT-процессора будет хоть одна ошибка, то он не сделает ничего. Хорошо хоть в пятерке валидатор встроили...

denver 05.03.2005 13:03

RaZEr
Ты немного не понял принципа.

Валидный XML
Код:

<xml>&lt;table&gt;&lt;/tr&gt;</xml>
Валидный XSL
Код:

<xsl><h1><value-of select="/xml" /></h1></xsl>
Результат трансформации:
Код:

<h1><table></tr></h1>
ЗЫ. Ни о каких перекодировках не слышал, возможно потому что не использовал DOMXML ;)

RaZEr 05.03.2005 13:15

Да нет, немного не понял ты :beer: Мы пишем в XML ...

...<hr />...

далее XSLT делает нам красивую полоску например (!) так:

<hr class="primary" /><hr class="secondary" />

А если клент напишет не <hr /> а <hr> ... будет грустно.

Я понимаю что можно всё то, что написал клиент тихо запихать в CDATA, но тогда не сработает не одна из трансформаций, что в случае с CSM неприемлемо.

denver 05.03.2005 14:28

RaZEr
Не мы друг друга не понимаем нифига :biggrin:
Мы не пишем в xml'е никакого HTML. А если и пишем то не обрабатываем его, а просто выводим (ну типа как через CDATA). А то это уже будет не темплейт систем, а... аналог CSS3 скажем, которое сделать тоже можно, но это оффтоп.

HTML выводящийся в XML в данном случае не часть оформления, а контент. Т.е. нет смысла в шаблоне шаблона сайта, этим не занимается и Smarty и т.п.

Hubbitus 05.03.2005 20:09

Цитата:

denver:
Тем кто пишет теплейт системы вопрос ясен. В компаниях с верстальщиками и программерами использующих их -- тоже. Другое дело что кому-то, например, со своей домашней страничкой довольно туманно зачем это все надо и какие там различия.
Наверное кому-то предельно и ясно, значит им и адресованы в большей степени вопросы этого топика!!! Мне (кстати как ни странно нету у меня домашней странички :) , а писать приходится много), тоже пока мало очень ясно и зачем, точнее в последнем свете поставновки вопроса: для каких конкретных целей, и как должно быть!

RaZEr 05.03.2005 21:11

Цитата:

Сообщение от denver
А то это уже будет не темплейт систем, а... аналог CSS3 скажем

Именно! Тем XSLT и хорош, что решает проблемы CSS 1&2. Нам ведь это и нужно (... решить все проблемы оформления). А приложение в свою очередь будет генерировать абстрактный XHTML, содержащий лишь информацию.
Цитата:

Сообщение от Hubbitus
кстати как ни странно нету у меня домашней странички

Нормальный порядок вещей. Мы же не сапожники :beer:

denver 05.03.2005 23:51

Hubbitus
Цитата:

пока мало очень ясно и зачем, точнее в последнем свете поставновки вопроса: для каких конкретных целей, и как должно быть!
Так ты все же сначала разберись что ты хочешь-то :) дайте мне идеальную систему темплейтов и конечно быструю, и простенькую чтобы... FastTemplate! :yees:

RaZEr
Цитата:

Именно! Тем XSLT и хорош, что решает проблемы CSS 1&2
XSLT всем хорош. Но зачем упоминать все его достоинства если в рамках данного топика это оффтопик. Я думаю что и Smarty при желании можно делать то-же самое, только это никому особо не нужная функциональность.

RaZEr 05.03.2005 23:58

Цитата:

Но зачем упоминать все его достоинства если в рамках данного топика это оффтопик
Почему же. Как раз наоборот. Это наш основной предмет разговора - полное и грамотное разделение оформления и содержания.

denver 06.03.2005 00:28

Ко всем
Да, вот еще по теме. Никогда не следуйте примеру Sych
Цитата:

На локальной машине время генерации 1 мега XML + XSLT преобразование не превышает 0.1-0.3 се,обычные странички генерятся за 0.01-0.05 сек.
Для обработки мегабайтного XML (не важно каким XSL кодом) потребуется плюс минус столько же оперативной памяти сервера. Т.к. до любой обработки XML необходимо построить дерево его элементов, а формат XML файла далек от формата БД MySQL. Дерево будет строится в памяти, причем целиком, вне зависимости от того сколько элементов будет потом выбрано.

RaZEr
Так что ты хочешь сказать, что скажем Smarty наплевать на валидность/инвалидность значит он может заменить ...</p><hr><p>... на ...</p><hr class="primary" /><hr class="secondary" /><p>..., а XSLT не может? Ну если это принципиально то XSLT таки может заменить
...&lt;/p&gt;&lt;hr&gt;&lt;p&gt;... на ...</p><hr class="primary" /><hr class="secondary" /><p>... о чем речь? :confused:

О чем речь и нужно ли пытаться делать такие вещи даже в Smarty?

Цитата:

Это наш основной предмет разговора - полное и грамотное разделение оформления и содержания.
Если у нас сайт выводит помимо основного шаблона еще и текст пользователя оформленный как HTML, то этот текст по определению является контентом и значит по определению не должен включать элементы оформления. Ферштейн? Текст клиета обычно обрабатывается в момент получения от него данных, все тэги оформления и другие от которых может "поехать" дизайн всего сайта вырезаются. При желании сразу же делаем его валидным (не обязательно). Потом уже сохраняем в БД. Либо не заморачиваемся а делаем htmlspecialchars()


Часовой пояс GMT +4, время: 20:31.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.