php - Adding linking functionality to my XSLT in Drupal -
i have xml feed have transformed html dynamic drupal page, courtesy of nice users @ drupal.stackexchange.com. issue, however, xml feed lists possibly ever need known, , requirements each page renders subset of information.
essentially, presentation schedule needs broken down.
my example feed follows:
<track name="track 1"> <session name="session 1" starttime="2012-06-06 10:45" endtime="2012-06-06 12:45"> <presentation name="presentation 1"> <author>name 1</author> <author>name 2</author> <abstract>summary of presentation</abstract> </presentation> <presentation name="presentation 2"> ...presentation info </presentation> </session> <session name="session 2" starttime="2012-06-06 10:45" endtime="2012-06-06 12:45"> <presentation name="presentation 3"> ...presentation info </presentation> <presentation name="presentation 4"> ...presentation info </presentation> </session> <session name="session 3" starttime="2012-06-07 08:45" endtime="2012-06-07 10:45"> <presentation name="presentation 5"> ...presentation info </presentation> <presentation name="presentation 6"> ...presentation info </presentation> </session> </track> so, can see, information entire proceeding. every single track, session, , presentation in 1 feed. of right now, can parse dynamic page without issue.
essentially, here (ignoring parsing of datetime...i have in place already):
<h2>track 1</h2> <h3>session 1</h3> <ul> <li><a href="presentation-1.html">presentation 1</a></li> <li><a href="presentation-2.html">presentation 2</a></li> </ul> <h3>sessoin 2</h3> <ul> <li><a href="presentation-3.html">presentation 3</a></li> <li><a href="presentation-4.html">presentation 4</a></li> </ul> and then, clicking 1 of presentation links take new page:
<h2>presentation 1</h2> <p>presented name 1, name 2</p> <p>summary of presentation</p> so, have 2 issues here ... don't know how break feed in manner, , must done within drupal 6 module. showing snippet of sample feed...because feed quite large, , must broken in manner.
the drupal code have follows:
function _xml_import_generate() { $path = drupal_get_path('module', 'xml_import'); $xsl = new domdocument(); $xsl->load("{$path}/xml_import.xsl"); $xslt = new xsltprocessor(); $xslt->importstylesheet($xsl); $xml = new domdocument(); $xml->load("myfeed.xml"); return (string) $xslt->transformtoxml($xml); }
i. first page want:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/xsl/transform"> <xsl:output omit-xml-declaration="yes" indent="yes"/> <xsl:strip-space elements="*"/> <xsl:template match="/"> <html> <xsl:apply-templates/> </html> </xsl:template> <xsl:template match="track"> <h2><xsl:value-of select="@name"/></h2> <xsl:apply-templates> <xsl:with-param name="ptrack" select= "count(preceding-sibling::track) +1"/> </xsl:apply-templates> </xsl:template> <xsl:template match="session"> <xsl:param name="ptrack"/> <h3><xsl:value-of select="@name"/></h3> <ul> <xsl:apply-templates> <xsl:with-param name="ptrack" select="$ptrack"/> <xsl:with-param name="psess" select= "count(preceding-sibling::session) +1"/> </xsl:apply-templates> </ul> </xsl:template> <xsl:template match="presentation"> <xsl:param name="ptrack"/> <xsl:param name="psess" /> <li> <a href= "presentation.html?track={$ptrack}&sess={$psess}&pr={position()}"> <xsl:value-of select="@name"/> </a> </li> </xsl:template> </xsl:stylesheet> when transformation applied on provided xml document:
<conference> <track name="track 1"> <session name="session 1" starttime="2012-06-06 10:45" endtime="2012-06-06 12:45"> <presentation name="presentation 1"> <author>name 1</author> <author>name 2</author> <abstract>summary of presentation</abstract> </presentation> <presentation name="presentation 2"> ...presentation info </presentation> </session> <session name="session 2" starttime="2012-06-06 10:45" endtime="2012-06-06 12:45"> <presentation name="presentation 3"> ...presentation info </presentation> <presentation name="presentation 4"> ...presentation info </presentation> </session> <session name="session 3" starttime="2012-06-07 08:45" endtime="2012-06-07 10:45"> <presentation name="presentation 5"> ...presentation info </presentation> <presentation name="presentation 6"> ...presentation info </presentation> </session> </track> </conference> this useful result produced:
<html> <h2>track 1</h2> <h3>session 1</h3> <ul> <li><a href="presentation.html?track=1&sess=1&pr=1">presentation 1</a></li> <li><a href="presentation.html?track=1&sess=1&pr=2">presentation 2</a></li> </ul> <h3>session 2</h3> <ul> <li><a href="presentation.html?track=1&sess=2&pr=1">presentation 3</a></li> <li><a href="presentation.html?track=1&sess=2&pr=2">presentation 4</a></li> </ul> <h3>session 3</h3> <ul> <li><a href="presentation.html?track=1&sess=3&pr=1">presentation 5</a></li> <li><a href="presentation.html?track=1&sess=3&pr=2">presentation 6</a></li> </ul> </html> ii. second page:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/xsl/transform"> <xsl:output omit-xml-declaration="yes" indent="yes"/> <xsl:strip-space elements="*"/> <xsl:param name="track" select="1"/> <xsl:param name="sess" select="1"/> <xsl:param name="pr" select="1"/> <xsl:template match="/*"> <html> <xsl:apply-templates select= "track[position()=$track] /session[position()=$sess] /presentation[position()=$pr]"/> </html> </xsl:template> <xsl:template match="presentation"> <h2><xsl:value-of select="@name"/></h2> <p>presented <xsl:text/> <xsl:apply-templates select="author"/> </p> <p><xsl:copy-of select="abstract/node()"/></p> </xsl:template> <xsl:template match="author"> <xsl:if test="position() > 1">, </xsl:if> <xsl:value-of select="."/> </xsl:template> </xsl:stylesheet> when transformation applied on provided xml document (above), wanted, correct result produced:
<html> <h2>presentation 1</h2> <p>presented name 1, name 2</p> <p>summary of presentation</p> </html> do note:
whenever end-user clicks on link on first page, web server must process web-request , must invoke second transformation, passing external/global parameters, values must set corresponding query-string parameters.
Comments
Post a Comment