...
- Give your blog a title.
- "Add all" of your completed "Blog Entry" forms
- Click the "Finish" button to complete the portfolio wizard
- Click on the name of your portfolio and view the passthrough XML. It should look something like this:
Code Block <?xml version="1.0" encoding="UTF-8"?> <ospiPresentation> <blogEntry> <artifact> <metaData> <id>2f1d7c8b-a1b9-4e4e-0039-43926cb30fb5</id> <displayName>Blog entry #2</displayName> <type> <id>file</id> <description>file</description> </type> <repositoryNode> <created>Mon Jan 01 09:13:09 EST 2007</created> <modified>Mon Jan 01 09:13:09 EST 2007</modified> <size>157</size> <mimeType> <primary>application</primary> <sub>x-osp</sub> </mimeType> </repositoryNode> </metaData> <structuredData> <entryBody>This is blog entry #2. I sure hope this works.</entryBody> </blogEntry> </structuredData> <schema> <instructions>This is a blank text area for you to write a blog entry.&nbsp;&nbsp;</instructions> <element name="blogEntry" minOccurs="1" maxOccurs="1"> <xs:annotation xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:documentation source="ospi.label">Blog Entry</xs:documentation> <xs:documentation source="ospi.description">Blog Entry</xs:documentation> </xs:annotation> <children> <element name="entryBody" type="xs:string" minOccurs="1" maxOccurs="1"> <xs:annotation xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:documentation source="ospi.label">Body</xs:documentation> <xs:documentation source="ospi.description">Blog Entry Body</xs:documentation> <xs:documentation source="ospi.isRichText">true</xs:documentation> </xs:annotation> </element> </children> </element> </schema> </artifact> <artifact> <metaData> <id>7b59c9c0-39fc-4b07-8065-902b53d47a63</id> <displayName>Blog entry 1</displayName> <type> <id>file</id> <description>file</description> </type> <repositoryNode> <created>Mon Jan 01 09:11:19 EST 2007</created> <modified>Mon Jan 01 09:11:19 EST 2007</modified> <size>152</size> <mimeType> <primary>application</primary> <sub>x-osp</sub> </mimeType> </repositoryNode> </metaData> <structuredData> <blogEntry> <entryBody>This is blog entry #1. I want to see if I can write a blog.</entryBody> </blogEntry> </structuredData> <schema> <instructions>This is a blank text area for you to write a blog entry.&nbsp;&nbsp;</instructions> <element name="blogEntry" minOccurs="1" maxOccurs="1"> <xs:annotation xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:documentation source="ospi.label">Blog Entry</xs:documentation> <xs:documentation source="ospi.description">Blog Entry</xs:documentation> </xs:annotation> <children> <element name="entryBody" type="xs:string" minOccurs="1" maxOccurs="1"> <xs:annotation xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:documentation source="ospi.label">Body</xs:documentation> <xs:documentation source="ospi.description">Blog Entry Body</xs:documentation> <xs:documentation source="ospi.isRichText">true</xs:documentation> </xs:annotation> </element> </children> </element> </schema> </artifact> </blogEntry> <presentationFiles> <myLogo> <artifact> <metaData> <id>361dcb3e-1a57-4d37-0005-8e21d15d8cc8</id> <displayName>SOElogo.gif</displayName> <type> <id>file</id> <description>file</description> </type> <repositoryNode> <created>Thu Dec 28 10:38:24 EST 2006</created> <modified>Thu Dec 28 10:38:25 EST 2006</modified> <size>6673</size> <mimeType> <primary>image</primary> <sub>gif</sub> </mimeType> </repositoryNode> </metaData> <fileArtifact> <uri>https://eportfolio.syr.edu:8443/access/ospPresentation/7b48753d-d64b-4548-00c1-7b801c0a31e4/ \ CCEF1DE2758DF4E1B3CD195370282C3C/content/user/smkeesle/A560B424751D6D819170D15FD15B7941/ \ SOElogo.gif</uri> </fileArtifact> </artifact> </myLogo> </presentationFiles> </ospiPresentation>
Create a new portfolio template
We have modified the Hello World xsl file below to query the passthrough XML and display the user content we need:
Element to Display | XPATH |
Blog Entry title | /ospiPresentation/blogEntry/artifact/metaData/displayName |
Blog Entry post date | /ospiPresentation/blogEntry/artifact/metaData/repositoryNode/created |
Blog Entry body | /ospiPresentation/blogEntry/artifact//structuredData/blogEntry/entryBody |
Code Block |
---|
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:urwg="http://www.gridforum.org/2003/ur-wg"
xmlns:SimpleDateFormat="http://xml.apache.org/xalan/java/java.text.SimpleDateFormat" xmlns:Date="http://xml.apache.org/xalan/java/java.util.Date">
<!-- Declaration of parameters -->
<!-- if you want to use a Sakai value or a passed in parameter from the -->
<!-- query string, you should state it here -->
<!-- The id parameter from the query string -->
<xsl:param name="id"/>
<!-- The sakai.tool.placement.ia parameter from the query string -->
<xsl:param name="sakai.tool.placement.id"/>
<!-- a number we can switch on to display different content for each page -->
<xsl:param name="pageNumber"/>
<!-- if passed, the created variable will be a key to a single blog Entry -->
<xsl:param name="created"/>
<!-- Declare output method -->
<xsl:output method="html"/>
<!-- Main Template outputs our HTML page -->
<xsl:template match="/">
<xsl:choose>
<xsl:when test="$pageNumber=4"> Rss! </xsl:when>
<xsl:otherwise>
<html>
<head>
<title>My Blog</title>
<link rel="stylesheet" type="text/css">
<!--<xsl:attribute name="href">blogStyle.css</xsl:attribute>-->
<xsl:attribute name="href">
<xsl:value-of select="/ospiPresentation/presentationFiles/style/artifact/fileArtifact/uri"/>
</xsl:attribute>
</link>
</head>
<body>
<div id="wrapper">
<div id="header">
<xsl:attribute name="style">
<xsl:text>background-image:url('</xsl:text>
<xsl:value-of select="/ospiPresentation/presentationFiles/backgroundImage/artifact/fileArtifact/uri"/>
<xsl:text>')</xsl:text>
</xsl:attribute>
<img>
<xsl:attribute name="src">
<xsl:value-of select="/ospiPresentation/presentationFiles/myLogo/artifact/fileArtifact/uri"/>
</xsl:attribute>
<xsl:attribute name="alt">My Institutions Logo</xsl:attribute>
<xsl:attribute name="style">float: right;</xsl:attribute>
</img>
<h1>My Blog</h1>
</div>
<!-- a little menu to navigate -->
<div id="menu">
<ul>
<li>
<xsl:call-template name="menuLink">
<xsl:with-param name="pageNumber"/>
<xsl:with-param name="text">Last 5</xsl:with-param>
</xsl:call-template>
</li>
<li>
<xsl:call-template name="menuLink">
<xsl:with-param name="pageNumber">1</xsl:with-param>
<xsl:with-param name="text">About Me</xsl:with-param>
</xsl:call-template>
</li>
<li>
<xsl:call-template name="menuLink">
<xsl:with-param name="pageNumber">2</xsl:with-param>
<xsl:with-param name="text">Entry Index</xsl:with-param>
</xsl:call-template>
</li>
<li>
<xsl:call-template name="menuLink">
<xsl:with-param name="pageNumber">4</xsl:with-param>
<xsl:with-param name="text">RSS Feed</xsl:with-param>
</xsl:call-template>
</li>
</ul>
</div>
<div id="contentWrapper">
<div id="entryNav">
<h3>Blog Posts</h3>
<ul>
<xsl:for-each select="/ospiPresentation/blogEntry/artifact">
<xsl:sort data-type="number"
select="Date:getTime(SimpleDateFormat:parse(SimpleDateFormat:new('EEE MMM dd kk:mm:ss zzz yyyy'), ./metaData/repositoryNode/created))"
order="descending"/>
<li>
<a>
<xsl:attribute name="href">
<xsl:text disable-output-escaping="yes">viewPresentation.osp?sakai.tool.placement.id=</xsl:text>
<xsl:value-of select="$sakai.tool.placement.id"/>
<xsl:text disable-output-escaping="yes">&id=</xsl:text>
<xsl:value-of select="$id"/>
<xsl:text disable-output-escaping="yes">&pageNumber=3&created=</xsl:text>
<xsl:value-of select="./metaData/repositoryNode/created"/>
</xsl:attribute>
<xsl:value-of select="./metaData/displayName"/>
</a>
</li>
</xsl:for-each>
</ul>
</div>
<!-- a switch to select content for this page based on the value of pageNumber -->
<div id="content">
<xsl:choose>
<xsl:when test="$pageNumber=1">
<!-- about me --> About me Page </xsl:when>
<xsl:when test="$pageNumber=2">
<!-- display an index of all blog entries -->
<h3>All Entries</h3>
<ul id="datedEntryList">
<xsl:for-each select="/ospiPresentation/blogEntry/artifact">
<xsl:sort data-type="number"
select="Date:getTime(SimpleDateFormat:parse(SimpleDateFormat:new('EEE MMM dd kk:mm:ss zzz yyyy'), ./metaData/repositoryNode/created))"
order="descending"/>
<li>
<a>
<xsl:attribute name="href">
<xsl:text disable-output-escaping="yes">viewPresentation.osp?sakai.tool.placement.id=</xsl:text>
<xsl:value-of select="$sakai.tool.placement.id"/>
<xsl:text disable-output-escaping="yes">&id=</xsl:text>
<xsl:value-of select="$id"/>
<xsl:text disable-output-escaping="yes">&pageNumber=3&created=</xsl:text>
<xsl:value-of select="./metaData/repositoryNode/created"/>
</xsl:attribute>
<xsl:value-of select="./metaData/displayName"/> - <xsl:value-of select="./metaData/repositoryNode/created"/>
</a>
</li>
</xsl:for-each>
</ul>
</xsl:when>
<xsl:when test="$pageNumber=3">
<!-- individual entry displayed -->
<xsl:for-each select="/ospiPresentation/blogEntry/artifact[metaData/repositoryNode/created=$created]">
<xsl:call-template name="entry">
<xsl:with-param name="title">
<xsl:value-of select="./metaData/displayName"/>
</xsl:with-param>
<xsl:with-param name="date">
<xsl:value-of select="./metaData/repositoryNode/created"/>
</xsl:with-param>
<xsl:with-param name="body">
<xsl:value-of select="./structuredData/blogEntry/entryBody"/>
</xsl:with-param>
</xsl:call-template>
</xsl:for-each>
</xsl:when>
<xsl:otherwise>
<!-- last 5 blog entries -->
<xsl:for-each select="/ospiPresentation/blogEntry/artifact[position() > 0]">
<!-- sort by year, moth, day created dates formatted like: Tue Jan 09 09:59:52 EST 2007 -->
<xsl:sort data-type="number"
select="Date:getTime(SimpleDateFormat:parse(SimpleDateFormat:new('EEE MMM dd kk:mm:ss zzz yyyy'), ./metaData/repositoryNode/created))"
order="descending"/>
<xsl:call-template name="entry">
<xsl:with-param name="title">
<xsl:value-of select="./metaData/displayName"/>
</xsl:with-param>
<xsl:with-param name="date">
<xsl:value-of select="./metaData/repositoryNode/created"/>
</xsl:with-param>
<xsl:with-param name="body">
<xsl:value-of select="./structuredData/blogEntry/entryBody"/>
</xsl:with-param>
</xsl:call-template>
</xsl:for-each>
</xsl:otherwise>
</xsl:choose>
</div>
<!-- content -->
<div style="clear: both"/>
</div>
<!-- contentWrapper -->
</div>
<!-- end wrapper div -->
</body>
</html>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template name="entry">
<xsl:param name="title"/>
<xsl:param name="date"/>
<xsl:param name="body"/>
<div class="entry">
<h3>
<xsl:value-of select="$title"/>
</h3>
<div class="date">
<xsl:value-of select="$date"/>
</div>
<div class="entryBody">
<xsl:value-of select="$body" disable-output-escaping="yes"/>
</div>
</div>
</xsl:template>
<!-- a named template to menu display links correctly -->
<xsl:template name="menuLink">
<xsl:param name="pageNumber"/>
<xsl:param name="text"/>
<a>
<xsl:attribute name="href">
<xsl:text disable-output-escaping="yes">viewPresentation.osp?sakai.tool.placement.id=</xsl:text>
<xsl:value-of select="$sakai.tool.placement.id"/>
<xsl:text disable-output-escaping="yes">&id=</xsl:text>
<xsl:value-of select="$id"/>
<xsl:text disable-output-escaping="yes">&pageNumber=</xsl:text>
<xsl:value-of select="$pageNumber"/>
</xsl:attribute>
<xsl:value-of select="$text"/>
</a>
</xsl:template>
</xsl:stylesheet>
|