Textpattern CMS support forum
You are not logged in. Register | Login | Help
- Topics: Active | Unanswered
Re: Combine comments and articles in a single stream
jdueck wrote #283383:
Interesting sidenote, I am really enjoying the flexibility of
etc_query. As part of this, I found I could not use thetxp:author_emailtag within my comments form in this context (it returned empty output).
Glad you enjoy it. I think you can gain one db query, since article ids are populated by <txp:recent_comments />:
<txp:etc_query data='SELECT email FROM `txp_users` WHERE name=
(SELECT AuthorID FROM `textpattern` WHERE ID=<txp:article_id />)' name="etc_author_email" />
Offline
Re: Combine comments and articles in a single stream
I’m implementing this in my RSS feed, and have overcome several small obstacles but am up against one last one related to etc_query that I can’t seem to figure out.
You can see my efforts so far at http://thelocalyarn.com/feed (temporary). You can see that the entry elements are being sorted by the values contained in their child published elements.
My problem is that etc_query appears to be stripping <![CDATA[ from my items when processing the XSLT. My article form for the RSS feed is as follows:
<entry>
<author>
<name><txp:author link="0" /></name>
</author>
<published><txp:posted format="iso8601" /></published>
<updated><txp:posted format="iso8601" /></updated>
<title type="html"><txp:title no_widow="0" /></title>
<link rel="alternate" type="text/html" href="<txp:permlink />" />
<id>tag:thelocalyarn.com,<txp:posted format="%Y-%m-%d" />:<txp:etc_query data='SELECT uid FROM `textpattern` WHERE ID=<txp:article_id />'>{uid?}</txp:etc_query></id>
<content type="html"><![CDATA[
<txp:body />
]]></content>
<summary type="html"><![CDATA[
<txp:excerpt />
]]></summary>
</entry>
But as you can see the feed that gets served has the opening CDATA tag stripped out, and the now-useless closing CDATA tag is escaped. After doing some extra-credit homework I thought perhaps I could get it to work by adding cdata-section-elements (or output-cdata-elements) to the XSLT:
<txp:etc_query
data='<body>
<txp:if_variable name="artids" value=""><txp:else />
<txp:article_custom id=''<txp:variable name="artids" />'' form="rss_article" />
</txp:if_variable>
<txp:if_variable name="dscids" value=""><txp:else />
<txp:recent_comments break="" sort=''FIELD(discussid, <txp:variable name="dscids" />) DESC'' limit=''<txp:variable name="dscount" />'' form="rss_comment" />
</txp:if_variable>
</body>'>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="utf-8" omit-xml-declaration="yes" cdata-section-elements="content summary" />
<xsl:template match="body">
<xsl:for-each select="entry">
<xsl:sort select="published" order="descending" />
<xsl:copy-of select="." />
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
</txp:etc_query>
…but this has no effect. Is there a way to get etc_query to leave my cdata alone? (I have verified that it’s etc_query by manually generating the same output using txp:article_custom.)
PS. it is also apparently changing <link href="..." /> to <link href="..."> (note lack of trailing slash) but it doesn’t appear that this will affect the feed’s validation.
Offline
Offline
Re: Combine comments and articles in a single stream
Ah, that must be it, thanks. Although now instead of passing the <![CDATA[ through unmodified, it actually strips out the cdata tags and escapes all the HTML inside the element, which is another way of getting there (‘there’ meaning valid XML).
Inspired by your suggestion I also changed xsl:output to method="xml" which fixed the link tag markup that actually was causing me all kinds of other problems I didn’t realize.
Last edited by jdueck (2014-09-21 23:51:25)
Offline
Offline
Re: Combine comments and articles in a single stream
etc wrote #284018:
I haven’t played much with xsl, but everything seems to work fine with
cdata-section-elements="content summary"(thanks for info): test. Might it be something else that intervenes before the feed is served?
Nope that actually does work. I had removed cdata-section-elements while debugging; putting it back in did the trick, in combination with the other changes.
Offline