Regarding Umbraco XSLT version 1.
I have aprox. 150 news items in XML. Lets say like this (all is pseudocode until I get more familiar with this xml/xslt):
<news> <data alias=date>2008-10-20</data> </news> <news> <data alias=date>2009-11-25</data> </news><news> <data alias=date>2009-11-20</data> </news> etc. etc....
I would like to run through the XML and create html-output as a news archive. Something like (tags not important):
2008 Jan Feb ... 2009 Jan Feb Mar etc. etc.
I can only come up with a nested for-each (pseudocode):
var year_counter = 2002 var month_counter = 1 <xsl:for-each select="./data [@alias = 'date']=year_counter"> <xsl:for-each select="./data [@alias = 'date']=month_counter"> <xsl:value-of select="data [@alias = 'date']> "...if month_counter==12 end, else month_counter++ ..." </xsl:for-each> "... year_counter ++ ..." </xsl:for-each>
But a programmer pointet out that looping through 10 years will give 120 loops and that is bad coding. Since I think Umbraco caches the result I am not so concerned, plus in this case there will be a max. of 150 records.
Any clues on how to sort and output many news items and group them in year and group each year in months?
For the following solution I used this XML file:
and this XSLT 1.0 transformation:
When the transformation is applied, the following output is produced:
It has the right structure already, you can adapt actual appearance to your own needs.
The solution is a two-phase Muenchian grouping approach. In the first phase, news items are grouped by year, in the second phase by year-month.
Please refer to my explanation of
key()over here. You don't need to read the other question, though it is a similar problem. Just read the lower part of my answer.