Il problema con il template di Umbraco
Di default, Umbraco è installato con una serie di Templates XSLT
più o meno pronti per l'uso, che offrono solitamente un buon punto
di partenza per realizzare macro xslt di una certa complessità.
Uno di questi genera un prototipo per la creazione di un Feed
RSS. Sfortunatamente, ogni volta che ho provato ad inserire
immagini nel mio feed, sono incappato in un errore di Firefox che
mi avvisava che il documento xml non era valido. D'altra parte, la
rimozione dell'immagine risolve il problema quindi si tratta di un
problema benigno che non impedisce di generare un piccolo feed di
solo testo.
Solo che… sarebbe bello poter aggiungere anche l'immagine.
Quindi modifichiamo il template.
La prima modifica riguarda la dichiarazione del documento
(aggiungere il testo evidenziato in rosso)
<xsl:output method="xml" omit-xml-declaration="yes"
cdata-section-elements="content:encoded"
/>
Questa modifica permette d'inserire una sezione CDATA senza
andare a pasticciare con la funzione concat per scriverla.
Questo è il codice della macro predefinita:
<xsl:value-of select="concat('<![CDATA[ ',
./data [@alias='bodyText'],']]>')"
disable-output-escaping="yes"/>
Amettendo che sia possible aggiungere un'image non inclusa in
bodyText nella sezione CDATA, questo richiederebbe un'ulteriore
sforzo di concatenazionem escaping, ecc...
L'attributo inserito in <xsl:output> semplifica la vita
perché adesso si può sostituire
<content:encoded>
<xsl:value-of select="concat('<![CDATA[ ', ./data
[@alias='bodyText'],']]>')"
disable-output-escaping="yes"/>
</content:encoded>
con un più elegante
<xsl:element
name="content:encoded">
<xsl:value-of select="./data [@alias='bodyText']"
disable-output-escaping="yes"/>
</xsl:element>
oppure con qualsiasi contenuto di cui si sia fatto manualmente
l'escaping, come in questo esempio dove posso finalmente inserire
la mia foto
<xsl:element name="content:encoded">
<p>
<img alt="<xsl:value-of select="YOUR-DATA-HERE"/>"
src="<xsl:value-of
select="concat(substring-before(umbraco.library:GetMedia(YOUR-MEDIA,
false),'.'), '_thumb.jpg')" />"/>
<br/>
<xsl:value-of select="./data [@alias='bodyText']"
disable-output-escaping="yes"/>
</p>
</xsl:element>