Увлёкся XSL и решил немного поэкспериментировать. В общем идея заключается в допиливании внешнего вида RSS канала формируемого Ядром.
После апгрейда фид приобретает читабельный вид и из набора xml тегов превращается в полноценню страничку со своим оформлением и разными плюшками.
Проблема в том, что для темизации использован мехинизм XSL трасформации, что позволяет засунуть в RSS канал что угодно, хоть рекламу, хоть любую другую приблуду, оставив его при этом всё тем-же RSS каналом(т.е. все приколы происходят на стороне клиента и никак не мешают сервисам и поисковики xslt тупо не понимают). Я ради эксперимента и экспириенса приделал социальные пимпы от Dimox.
Проблема заключается в том, что для трансформации нужно второй строкой подключить файл стилей XSL, в котором заложена вся логика мутации, а как это сделать я тупо не знаю.
<!-- Inject the transform logic -->
<?xml-stylesheet href="feed-transform.xsl" type="text/xsl" media="all"?>
<rss version="2.0" xml:base="http://some.com" xmlns:dc="http://purl.org/dc/elements/1.1/">
Ну и собсно код, думаю лишние комментарии ни к чему:
<!-- Doctype Declaration Configurate -->
<xsl:output method="html" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" indent="yes" />
<!-- Bind the Root variables -->
<xsl:variable name="title" select="/rss/channel/title" />
<xsl:variable name="description" select="/rss/channel/description" />
<xsl:variable name="language" select="/rss/channel/language" />
<!-- Main Transform Logic Begin -->
<xsl:template match="/">
<xsl:element name="html">
<head>
<title><xsl:value-of select="$title" /></title>
<link href="feed-transform.css" rel="stylesheet" type="text/css" media="all" />
<script type="text/javascript" src="share42/share42.js"></script>
</head>
<xsl:apply-templates select="rss/channel" />
</xsl:element>
</xsl:template>
<!-- [Channel] Transform Logic -->
<xsl:template match="channel">
<body>
<div id="core">
<div id="header">
<h1><a href="{normalize-space(link)}"><xsl:value-of select="$title" /></a></h1>
<p><xsl:value-of select="$description" disable-output-escaping="yes" /><br />
<span>Язык Фида: <xsl:value-of select="$language" /></span></p>
</div>
<div id="items">
<xsl:apply-templates select="item" />
</div>
<div id="footer">
<!-- Some To be Output -->
<p>Будь в курсе, читай <a href="{normalize-space(link)}"><xsl:value-of select="$title" /></a>!</p>
</div>
</div>
</body>
</xsl:template>
<!-- [Channel] => [Item] Transform Logic -->
<xsl:template match="item" xmlns:dc="http://purl.org/dc/elements/1.1/">
<div class="item">
<h3><a href="{normalize-space(link)}"><xsl:value-of select="title" /></a>
<span class="meta">
Дата: <span><xsl:value-of select="pubDate" /></span><br />
Автор: <span><xsl:value-of select="dc:creator" /></span>
</span><br class="both" />
</h3>
<p><xsl:value-of select="description" disable-output-escaping="yes" /><span class="comments">[<a href="{normalize-space(comments)}">комментарии</a>] [<a href="#header">Вверх</a>]</span></p>
<!-- [Buttons URI & Titles dynamic Generator]-->
<script type="text/javascript">
share42('<xsl:value-of select="link" />','<xsl:value-of select="title" />')
</script>
</div>
</xsl:template>
<!-- Main Transform Logic End -->
</xsl:stylesheet>
<!-- Feed visual Upgrade v1.0 with social media Buttons from Dimox -->
Исходники выкладывать смысла нет т.к. на локали нихрена не произойдёт. Результат можно посмотреть на статичном RSSнике сохранённом с ориганальной отдачи ядра.
Если кто подскажет как подкормить xsl, могу взяться за разработку модуля с полноценной конфигурабельностью, раширябельностью и т.д. Кстати, модуль сайтмап иксэмэл при включение стилей работает по той же логике.
p.s.: знаю, изврат ... но прикольный
Комментарии
Кстати, можно приколотить на любой RSS 2.0, если у него есть dc:creator, если нету то можно аккуратно выломать кусачками из кода и будет работать по идее...
Видимо проще где-то вне ядра собрать RSS... У же голову на.б.ул.
Кто нибудь подскажет, где он берет эту строку?
<rss version="2.0" xml:base="http://some.com" xmlns:dc="http://purl.org/dc/elements/1.1/">
В базе зашита?