RSS Feed Upgrade XSLT Based extension

Главные вкладки

Аватар пользователя Shift-Web Shift-Web 23 ноября 2010 в 10:50

Увлёкся XSL и решил немного поэкспериментировать. В общем идея заключается в допиливании внешнего вида RSS канала формируемого Ядром.

После апгрейда фид приобретает читабельный вид и из набора xml тегов превращается в полноценню страничку со своим оформлением и разными плюшками.

Проблема в том, что для темизации использован мехинизм XSL трасформации, что позволяет засунуть в RSS канал что угодно, хоть рекламу, хоть любую другую приблуду, оставив его при этом всё тем-же RSS каналом(т.е. все приколы происходят на стороне клиента и никак не мешают сервисам и поисковики xslt тупо не понимают). Я ради эксперимента и экспириенса приделал социальные пимпы от Dimox.

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

<?xml version="1.0" encoding="utf-8"?>
<!-- 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/">

Ну и собсно код, думаю лишние комментарии ни к чему:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<!-- 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.: знаю, изврат ... но прикольный

Комментарии

Аватар пользователя Shift-Web Shift-Web 23 ноября 2010 в 12:24

Кстати, можно приколотить на любой RSS 2.0, если у него есть dc:creator, если нету то можно аккуратно выломать кусачками из кода и будет работать по идее...

Аватар пользователя Shift-Web Shift-Web 23 ноября 2010 в 17:56

Видимо проще где-то вне ядра собрать RSS... У же голову на.б.ул.

Кто нибудь подскажет, где он берет эту строку?

<rss version="2.0" xml:base="http://some.com"  xmlns:dc="http://purl.org/dc/elements/1.1/">

В базе зашита?