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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Шаблонизатор на XML+XSL, Рекомендации и обмен опытом 
:(
    Опции темы
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   Вверх
Страницы: (4) Все 1 [2] 3 4 
Ответ в темуСоздание новой темы Создание опроса

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

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


 




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


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

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