PDA

Показать полную графическую версию : Что еще можно сделать с XML + XSLT + XSL


Страниц : 1 2 3 4 [5] 6 7 8 9 10 11 12 13

Vlad Drakula
02-02-2006, 00:28
E-mail
а что за рабочий пример тебе нужен?

benya
06-02-2006, 14:51
Vlad Drakula,
Как можно сделать группировку по трем знаениям?

Vlad Drakula
19-02-2006, 00:26
я долго обещал показать сайт который использует XSL в качестве движка шаблонов...

вот он: http://soft.oszone.net/

mar
19-02-2006, 00:51
Vlad Drakula
это к тому, что ты переделал Software? Или Gi? Или вы оба :) ? Когда успели :) ?

Vlad Drakula
19-02-2006, 00:54
mar
ну... я достаточно быстро уперся в то что чтобы что то поменять во внешнем виде мне нужно менять PHP код... что мне не очень хочется... по этому я сел и переделал... что увеличило гибкость движка в разы + усложнило создание не валидного HTML...

mar
19-02-2006, 01:11
Vlad Drakula
чтобы что то поменять во внешнем виде мне нужно менять PHP код
можно на пальцах (на примерах) случай, когда надо было лезть в PHP и когда в php больше лезть не надо?

Vlad Drakula
19-02-2006, 01:24
mar
например расчитывает показывать сслылку "следующие 10 програм" сам шаблон без участия php.
php так же не участвует в разбиениям по датам на главной странице.

mar
19-02-2006, 01:46
например расчитывает показывать сслылку "следующие 10 програм
а в чем расчет? все равно где-то работает count(*) через все тот же PHP, высовывающий наружу отсчет общего количества и, надо полагать какие-нибудь переменные для limit-а? (у тебя это в GET-е: start=15 (Предыдущие 15 программ)
php так же не участвует в разбиениям по датам на главной странице.
а это случаем не пререгатива запроса? информация-то ведь все равно из базы? и опять-таки не минуя PHP?

Vlad Drakula
19-02-2006, 02:29
mar
а это случаем не пререгатива запроса? информация-то ведь все равно из базы? и опять-таки не минуя PHP?
из базы берутся 15 записей, и сразу посылаются на шаблонныйх движок, который сам разбивает их по дням, php никак не участвует в этом деле... и база тоже... ни кто кроме шаблона не знает что происходит группировка!

E-mail
19-02-2006, 06:07
Vlad Drakula
как беруться из базы?
можно поподробнее об xmlquery?

---

по поводу совт.осзон - а нельзя придать выводимому коду человекоподобный вид?:)

Vlad Drakula
19-02-2006, 09:56
E-mail
как беруться из базы?




// берем из базы
$List = mysql_query('SELECT *
FROM program
'.$where2.'
ORDER BY Date DESC
LIMIT '.$_REQUEST['start'].', 15;') or print mysql_error() ;

// пихаем в XML
$SoftNews='<news>';
while( $Item = mysql_fetch_assoc($List) )
{
$Item['DateString']=date('j', strtotime($Item['Date'])).' '.$M[date('n', strtotime($Item['Date']))];
$SoftNews .='<program>';

if($Item['Size'] < 1024)
$Item['Size'] = $Item['Size'].' ÊÁ';
else
$Item['Size'] = round($Item['Size']/1024, 1).' ÌÁ';

foreach($Item as $name => $value)
$SoftNews .='<'.$name.'><![CDATA['.$value.']]></'.$name.'>';
$SoftNews .='</program>';
}

$SoftNews .='</news>';



можно поподробнее об xmlquery?
xmlquery пока вроде поддерживают только ORACLE и MSSQL

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

benya
19-02-2006, 17:40
Все это смахивает на какое-то шаманство ;) Где собственно отделение логики от контента??? ;)))))
Чем дальше тем больше понимаешь что мы просто перетаскиваем часть кода из PHP или PERL в шаблонные правила XSLT. Дизайнеру там делать нечего ;))
А еще к слову что XSLT не сложнее HTML отвечу на собственный вопрос по поводу группировки по трем значениям (подсказали умные люди на форуме). Тоесть создание древовидного меню с уникальными значениями:
Входной XML

<menu>
<item category="Рафтинг" country="Украина" namen="Днестр"/>
<item category="Рафтинг" country="Россия" namen="Карелия"/>
<item category="Рафтинг" country="Россия" namen="Байкал"/>
<item category="Треккинг" country="Украина" namen="Днестр"/>
<item category="Рафтинг" country="Россия" namen="Карелия"/>
<item category="Рафтинг" country="Россия" namen="Карелия"/>
<item category="Спелео" country="Россия" namen="Алтай"/>
<item category="Рафтинг" country="Украина" namen="Черемош"/>
</menu>

XSLT:

<xsl:key name="category" match="item" use="@category"/>
<xsl:key name="country" match="item" use="concat(@category,'-',@country)"/>
<xsl:key name="name" match="item" use="concat(@category,'-',@country,'-',@namen)"/>
<xsl:template match="menu">
<list><xsl:text>&#xA;</xsl:text>
<xsl:apply-templates select="item[generate-id(.) = generate-id(key('category',@category))]"/>
</list>
</xsl:template>

<xsl:template match="item">
<category name="{@category}"><xsl:text>&#xA;</xsl:text>

<xsl:for-each select="key('category',@category)">
<xsl:variable name='country' select="key('country', concat(@category,'-',@country))"/>

<xsl:if test="generate-id(.) = generate-id($country)">
<country name="{@country}"><xsl:text>&#xA;</xsl:text>
<xsl:apply-templates select='$country' mode='country'/>
</country><xsl:text>&#xA;</xsl:text>
</xsl:if>
</xsl:for-each>

</category><xsl:text>&#xA;</xsl:text>
</xsl:template>

<xsl:template match='item' mode='country'>
<xsl:variable name='name' select="key('name', concat(@category,'-',@country,'-',@namen))"/>
<xsl:if test="generate-id(.) = generate-id($name)">
<item name='{@namen}'/><xsl:text>&#xA;</xsl:text>
</xsl:if>
</xsl:template>

Выход:

<category name="Рафтинг и сплавы">
<country name="Украина">
<item name="Днестр"></item>
<item name="Черемош"></item>
<item name="Тиса"></item>
<item name="Черный Черемош"></item>
<item name="Южный Буг"></item>
<item name="Десна"></item>
<item name="Рось"></item>
<item name="Северский Донец"></item>
</country>
<country name="Россия">
<item name="Карелия"></item>
<item name="Байкал"></item>
<item name="Алтай"></item>
<item name="Кавказ"></item>
<item name="Урал"></item>
</country>
</category>
...


Глаза сломать тут можно точно. ;) Но хочу вам сказать что лучше рыться в этом, чем в бесчисленных шаблонах разнообразных шаблонизаторов.

Vlad Drakula
19-02-2006, 18:55
benya
суть в разделении ин6формации и то как она отображается!

vadimiron
19-02-2006, 19:21
и сразу посылаются на шаблонныйх движок, который сам разбивает их по дням, php никак не участвует в этом деле
я бы наверно по дням всё таки на пхп разделял, а вот именно ХТМЛ код, то есть именно отображение, уже делал через XSLT преоброзавания

Vlad Drakula
19-02-2006, 19:36
vadimiron
еще раз...
я не однократно тыпаюсь показать что при использовании XSL граница между кодом и шаблоном смещается!
и раскладка становится такой:
PHP + SQL: собирают данные которые нужно отобразить
XSL: уже отображает данные так как нужно!


я бы наверно по дням всё таки на пхп разделял, а вот именно ХТМЛ код, то есть именно отображение, уже делал через XSLT преоброзавания как не странно но на PHP это делать на много сложнее чем на XSL!!!

vadimiron
19-02-2006, 20:49
Не, я не говорю, что это как то сложно или непонятно, просто каждый сам для себя эту самую границу устанавливает

mar
20-02-2006, 00:31
а я бы вообще все разбиение постаралась сместить в SQL :)
просто каждый сам для себя эту самую границу устанавливает
это точно.

Vlad Drakula
опиши, пожалуйста, этапы обработки ну вот хоть этого запроса. Что мы имеем между SELECT и инткрфейсом, который видим? (это я между прочим к лишним (или необходимым?) этапам, числу вовлеченных в процесс трансляторов и скорости :).

E-mail
21-02-2006, 04:03
Vlad Drakula я уважаю кроссинги во всех проявлениях, но на первом месте всегда всеже предлагаю держать человеческий фактор

benya еще не придумали ничего сложнее html

benya
21-02-2006, 12:52
E-mail,
На счет последнего сообщения - как раз наоборот.

еще не придумали ничего сложнее html

Чушь! Потому что никто не придерживается стандартов. Нет чего-то, что бы все контролировать. Есть только рекомендации... Все делают как хочется и как нравится ;)

Vlad Drakula
21-02-2006, 21:48
mar



// запрашиваем список программ
$List = mysql_query('SELECT *
FROM program
'.$where2.'
ORDER BY Date DESC
LIMIT '.$_REQUEST['start'].', 15;') or print mysql_error() ;

// выводим список программ
$SoftNews='<news>';
while( $Item = mysql_fetch_assoc($List) )
{
$Item['DateString']=date('j', strtotime($Item['Date'])).' '.$M[date('n', strtotime($Item['Date']))];
$SoftNews .='<program>';

if($Item['Size'] < 1024)
$Item['Size'] = $Item['Size'].' КБ';
else
$Item['Size'] = round($Item['Size']/1024, 1).' МБ';

foreach($Item as $name => $value)
$SoftNews .='<'.$name.'><![CDATA['.$value.']]></'.$name.'>';
$SoftNews .='</program>';
}

$SoftNews .='</news>';

...

xml2html($XML, 0);


вот и весь кусок кода который за это отвечет.




© OSzone.net 2001-2012