Показать полную графическую версию : Что еще можно сделать с 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
а что за рабочий пример тебе нужен?
Vlad Drakula,
Как можно сделать группировку по трем знаениям?
Vlad Drakula
19-02-2006, 00:26
я долго обещал показать сайт который использует XSL в качестве движка шаблонов...
вот он: http://soft.oszone.net/
Vlad Drakula
это к тому, что ты переделал Software? Или Gi? Или вы оба :) ? Когда успели :) ?
Vlad Drakula
19-02-2006, 00:54
mar
ну... я достаточно быстро уперся в то что чтобы что то поменять во внешнем виде мне нужно менять PHP код... что мне не очень хочется... по этому я сел и переделал... что увеличило гибкость движка в разы + усложнило создание не валидного HTML...
Vlad Drakula
чтобы что то поменять во внешнем виде мне нужно менять PHP код
можно на пальцах (на примерах) случай, когда надо было лезть в PHP и когда в php больше лезть не надо?
Vlad Drakula
19-02-2006, 01:24
mar
например расчитывает показывать сслылку "следующие 10 програм" сам шаблон без участия php.
php так же не участвует в разбиениям по датам на главной странице.
например расчитывает показывать сслылку "следующие 10 програм
а в чем расчет? все равно где-то работает count(*) через все тот же PHP, высовывающий наружу отсчет общего количества и, надо полагать какие-нибудь переменные для limit-а? (у тебя это в GET-е: start=15 (Предыдущие 15 программ)
php так же не участвует в разбиениям по датам на главной странице.
а это случаем не пререгатива запроса? информация-то ведь все равно из базы? и опять-таки не минуя PHP?
Vlad Drakula
19-02-2006, 02:29
mar
а это случаем не пререгатива запроса? информация-то ведь все равно из базы? и опять-таки не минуя PHP?
из базы берутся 15 записей, и сразу посылаются на шаблонныйх движок, который сам разбивает их по дням, php никак не участвует в этом деле... и база тоже... ни кто кроме шаблона не знает что происходит группировка!
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
по поводу совт.осзон - а нельзя придать выводимому коду человекоподобный вид?
можно, в шаблоне для этого есть специальный параметр, какоторый ватоматически все сделает, но если вы почитаете о крос борзерности вы поймете почему выводится именно в такой форме.
Все это смахивает на какое-то шаманство ;) Где собственно отделение логики от контента??? ;)))))
Чем дальше тем больше понимаешь что мы просто перетаскиваем часть кода из 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>
</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>
</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>
</xsl:text>
<xsl:apply-templates select='$country' mode='country'/>
</country><xsl:text>
</xsl:text>
</xsl:if>
</xsl:for-each>
</category><xsl:text>
</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>
</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
Не, я не говорю, что это как то сложно или непонятно, просто каждый сам для себя эту самую границу устанавливает
а я бы вообще все разбиение постаралась сместить в SQL :)
просто каждый сам для себя эту самую границу устанавливает
это точно.
Vlad Drakula
опиши, пожалуйста, этапы обработки ну вот хоть этого запроса. Что мы имеем между SELECT и инткрфейсом, который видим? (это я между прочим к лишним (или необходимым?) этапам, числу вовлеченных в процесс трансляторов и скорости :).
Vlad Drakula я уважаю кроссинги во всех проявлениях, но на первом месте всегда всеже предлагаю держать человеческий фактор
benya еще не придумали ничего сложнее html
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
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.