MkItYs

MkItYs > アプリの制作・サイトの統合 > 

images

ニュース一覧を自動生成する:x:news

images

ニュース一覧など、記事を新着順に並べたリストを生成するやり方です。

記事を新着順に並べる


たとえば、次のようなタグで、ニュース一覧を生成したいとします(ここで「@c」は表示する件数です):

<x:news c="25"/>

このとき、それぞれのページを次のように記述している場合は:

<page key="setcmm_202205101857397935640846">
<lead>ニュース一覧を自動生成する:x:news</lead>
<date mode="init">2022.05.10</date>
<date mode="last">2022.05.10</date>
...
</x:page>

次のようなXSLスタイルシートを書くことで、ニュース一覧を生成できます:

<xsl:template mode="x:mapper" match="x:news">
<dl>
<xsl:apply-templates mode="x:news_page" select="/*/x:book/x:page[x:date]">
<xsl:with-param name="c" select="@c"/>
<xsl:sort select="x:date" order="descending"/>
</xsl:apply-templates>
</dl>
</xsl:template>

<xsl:template mode="x:news_page" match="/*/x:book/x:page">
<xsl:param name="c"/>
<xsl:if test="position() &lt;= $c">
<dt>・</dt><dd><xsl:value-of select="x:date"/>: <a href="{@key}.htm"><xsl:value-of select="x:lead"/></a></dd>
</xsl:if>
</xsl:template>

日付順に並べるためのXSLのタグが、「xsl:sort」です。これを使い、タグ「x:page」下にあるタグ「x:date」で整列させます(新しい順に並べるため、属性「@descending 」を指定しています)。その際、表示件数を制限するため、関数「position()」からその要素の位置を調べています。[※1]


※1
ここで注意することは、関数「position()」は整列後のテンプレートでしか使えない、ということです。また、そのテンプレートでも合致条件「@match」には使えません。