entry数でデザイン定義の切り替えをするには?

「まったく何も分からない・・・」そんなユーザーさんの為のフォーラムです。どんなご質問でもお気軽にどうぞ。
返信
love4
アクティブユーザー
記事: 16
登録日時: 2006年3月29日(水) 17:26

entry数でデザイン定義の切り替えをするには?

投稿記事 by love4 » 2008年2月26日(火) 11:42

どうすると実現できるかご指導頂ければと思います。
やりたいことは
アルバム系のスキーマを作ってデザイン定義でカテゴリー内の
1)entry(写真登録数)が20を超えたら横にx列で縮小写真を並べる
2)entry(写真登録数)が20以下なら縦に写真を並べる
という処理をしたいのです。
少ししか登録のないカテゴリーまで小さなサムネイル写真を並べるよりも
詳細データつきで縦並べにしたいと思うので。

で、単純に myalbum.list.default.design.xsl というデザイン定義内で
こんなことが出来ればいいのですが

コード: 全て選択

<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="html" encoding="EUC-JP" omit-xml-declaration="yes" />
<xsl:template match="/entrylist">

<xsl:value-of select="count(entry)" />件

<xsl:if test="count(entry)>=20">
<table border="1">
<xsl:for-each select="row">
<tr>
<xsl:for-each select="entry">
<td>
写真のみ表示(横任意列並び)
</td>
</xsl:for-each>
</tr>
</xsl:for-each>
</table>
</xsl:if>

<xsl:if test="count(entry)<20">
<table border="1">
<xsl:for-each select="entry">
<tr>
<td>
写真と内容表示(縦並び)
</td>
</tr>
</xsl:for-each>
</table>
</xsl:if>

</xsl:template>
埋め込み内容

コード: 全て選択

<cmsd:entrylist name="myalbum" design="default" cols="4" />
とは出来ないですよね。
というわけでデザイン定義を2つ作って埋め込むPHP側で処理出来るならそれでもいいのですが、count(entry)を{count(entry)}などで呼び出せますか?
まだ試してないのですけれど・・・。
何かもっといい方法があればと思い投稿させて頂きました。

webmaster
Site Admin
記事: 1451
登録日時: 2004年12月10日(金) 10:09

Re: entry数でデザイン定義の切り替えをするには?

投稿記事 by webmaster » 2008年2月26日(火) 14:56

 love4さん、ご質問ありがとうございます。
 entry数によってデザイン定義を切り替えるというのは、とても面白い試み
だと思います。

 ご提示頂いたデザイン定義でほとんどOKなのですが、既にお分かりの通り、
このままですと20件未満の場合のデザイン定義の方が処理されません。

 埋め込みタグ側で colsを2以上に設定した場合、XMLデータ上でのentry要素の
位地が、
entrylist/entry
 ではなく、
entrylist/row/entry
 になります。よって、20件未満のデザイン定義のfor-eachを次のように変えて
みて下さい。

コード: 全て選択

<xsl:if test="count(entry)<20">
<table border="1">
<xsl:for-each select="[color=red]row/entry[/color]">
<tr>
<td>
写真と内容表示(縦並び)
</td>
</tr>
</xsl:for-each>
</table>
</xsl:if>
 もしうまくいかなかった場合、「row/entry」の部分を「//entry」に変えてみて
下さい。
というわけでデザイン定義を2つ作って埋め込むPHP側で処理出来るならそれでもいいのですが、count(entry)を{count(entry)}などで呼び出せますか?
 これについては、埋め込みタグ側ではそういう書き方ができない為、できません…。

 いろいろと試して頂いてとても嬉しいです。
 うまくいかなかった場合など、またご連絡頂ければ幸いです。

返信