nXnでエントリーを表示させる方法
nXnでエントリーを表示させる方法
はじめまして。hiroshotと申します。
現在、本番サイトでCMSDを使った運用ができないかとLAN環境で実験しています。
今回分からなくて困っているのは、表題どおりのことなのです。
最初はtableで表示させればいいやと実験を始めたのですが、
過去ログから難しいそうなことが分かりました。
CSSで同じことができればいいので、
DIVを使った方法をとろうと思ったのですが、
いまいち方法が分かりませんでした。
表示させたいエントリー毎の項目はとりあえず「タイトル」と「画像」で、
2列で表示できればと思っています。
過去ログで示唆されていた<div class="cellcontainer">と<div class="cell">で、
<div class="cellcontainer">
<div class="cell">
<h3><xsl:value-of select="title" /></h3>
<img src="{photo}&h=100" />
</div>
</div>
とするのは分かるのですが、
どこに<xsl:for-each select="entry">や
<xsl:if test="(position() mod 2)=0"><br clear="all" /></xsl:if>
を入れればいいのかが分かりませんでした。
あるいは他にいい方法(簡単な方法)があるのでしょうか?
よろしくお願いいたします。
現在、本番サイトでCMSDを使った運用ができないかとLAN環境で実験しています。
今回分からなくて困っているのは、表題どおりのことなのです。
最初はtableで表示させればいいやと実験を始めたのですが、
過去ログから難しいそうなことが分かりました。
CSSで同じことができればいいので、
DIVを使った方法をとろうと思ったのですが、
いまいち方法が分かりませんでした。
表示させたいエントリー毎の項目はとりあえず「タイトル」と「画像」で、
2列で表示できればと思っています。
過去ログで示唆されていた<div class="cellcontainer">と<div class="cell">で、
<div class="cellcontainer">
<div class="cell">
<h3><xsl:value-of select="title" /></h3>
<img src="{photo}&h=100" />
</div>
</div>
とするのは分かるのですが、
どこに<xsl:for-each select="entry">や
<xsl:if test="(position() mod 2)=0"><br clear="all" /></xsl:if>
を入れればいいのかが分かりませんでした。
あるいは他にいい方法(簡単な方法)があるのでしょうか?
よろしくお願いいたします。
Re: nXnでエントリーを表示させる方法
webmasterです。hiroshotさん、ご質問ありがとうございます。
テーブル形式での表示方法は、リファレンスマニュアルの「6.3.11 エントリ一覧
のテーブル表示機能」をご覧下さい。
また、CSSを使ったセル状のレイアウトに関しては、
といった感じになるかと思います。CSSでdiv.cellにwidthとheight、及び
display:inline を指定して下さい。
div.cellcontainer に width を指定する場合にはcellが自動的に折り返され
ますので、
<xsl:if test="(position() mod 2)=0"><br clear="all" /></xsl:if>
の行は不要です。
以上、またご質問がありましたらご連絡下さい。
テーブル形式での表示方法は、リファレンスマニュアルの「6.3.11 エントリ一覧
のテーブル表示機能」をご覧下さい。
また、CSSを使ったセル状のレイアウトに関しては、
コード: 全て選択
<xsl:for-each select="entry">
<div class="cellcontainer">
<div class="cell">
<h3><xsl:value-of select="title" /></h3>
<img src="{photo}&h=100" />
</div>
<xsl:if test="(position() mod 2)=0"><br clear="all" /></xsl:if>
</div>
</xsl:for-each>
display:inline を指定して下さい。
div.cellcontainer に width を指定する場合にはcellが自動的に折り返され
ますので、
<xsl:if test="(position() mod 2)=0"><br clear="all" /></xsl:if>
の行は不要です。
以上、またご質問がありましたらご連絡下さい。
hiroshotです。webmasterさん、早々のご回答ありがとうございます。
ご提示いただいたCSSを使ったセル状レイアウトは、
うまくいきました。ありがとうございます。
テーブル形式の方ももう少し詳しくお聞きしたいのですが、
リファレンスマニュアル「6.3.11 … 」では、
1エントリ=1写真で説明が進んでおり、
1エントリに複数項目がある場合の方法がいまいちつかめませんでした。
1組の<tr></tr>内に「タイトル」と「写真」を入れてしまうのはできたのですが、
■1行目に「タイトル」を2列配置し、
■2行目に「写真」を1行目に対応する形で配置し、
■3行目以降その繰り返しを行う
といったことは可能なのでしょうか?
お手数ですがよろしくお願いいたします。
ご提示いただいたCSSを使ったセル状レイアウトは、
うまくいきました。ありがとうございます。
テーブル形式の方ももう少し詳しくお聞きしたいのですが、
リファレンスマニュアル「6.3.11 … 」では、
1エントリ=1写真で説明が進んでおり、
1エントリに複数項目がある場合の方法がいまいちつかめませんでした。
1組の<tr></tr>内に「タイトル」と「写真」を入れてしまうのはできたのですが、
■1行目に「タイトル」を2列配置し、
■2行目に「写真」を1行目に対応する形で配置し、
■3行目以降その繰り返しを行う
といったことは可能なのでしょうか?
お手数ですがよろしくお願いいたします。
webmasterです。
ご要望の件ですが、この場合、1行に4件のエントリを表示したいとして、
その4件分を表示するのに2行(タイトルで1行、内容で1行)必要という事だと
理解致しました。
この為、<xsl:for-each select="entry">を2回使うことになります。
以上、シンプルな例ですので分からない点などあるかと思います。
ご不明な点はまたご連絡頂ければと思います。
ご要望の件ですが、この場合、1行に4件のエントリを表示したいとして、
その4件分を表示するのに2行(タイトルで1行、内容で1行)必要という事だと
理解致しました。
コード: 全て選択
件名1 件名2 件名3 件名4
本文1 本文2 本文3 本文4
件名5 件名6 件名7 件名8
本文5 本文6 本文7 本文8
:
コード: 全て選択
<xsl:template match="/entrylist">
<table border="1">
<xsl:for-each select="row">
<!-- タイトル行 -->
<tr>
<xsl:for-each select="entry">
<td>
<xsl:value-of select="title" />
</td>
</xsl:for-each>
</tr>
<!-- 内容行 -->
<tr>
<xsl:for-each select="entry">
<td>
<xsl:value-of select="content" />
</td>
</xsl:for-each>
</tr>
</xsl:for-each>
</table>
</xsl:template>
ご不明な点はまたご連絡頂ければと思います。
webmasterさん、ご返答ありがとうございます。
返事が遅くなり申し訳ございません。
示していただいたものでいいはずなのですが、
こちらの環境でうまく表示されません。
ブラウザ上に出力されたhtmlを見ると
<table></table>のタグ間がすっかり入っていません。
念のために作成した catalog.list.test.design.xslは
以下のようです。
何か間違ってるんでしょうか…? 
返事が遅くなり申し訳ございません。
示していただいたものでいいはずなのですが、
こちらの環境でうまく表示されません。
ブラウザ上に出力されたhtmlを見ると
<table></table>のタグ間がすっかり入っていません。
念のために作成した catalog.list.test.design.xslは
以下のようです。
コード: 全て選択
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="EUC-JP" omit-xml-declaration="yes" />
<xsl:template match="/entrylist">
<xsl:for-each select="row">
<table border="1">
<!-- タイトル行 -->
<tr>
<xsl:for-each select="entry">
<td>
<xsl:value-of select="title" />
</td>
</xsl:for-each>
</tr>
<!-- 内容行 -->
<tr>
<xsl:for-each select="entry">
<td>
<xsl:value-of select="description" />
</td>
</xsl:for-each>
</tr>
</table>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>

お世話になっております。hiroshotです。
前回の投稿から随分時間が経っておりますが、
質問がここに関係があるので追記させていただきます。
現在エントリー表示を2×2でtableタグを使って実現しています。
そこで問題となっているのが、表示されるべきエントリーが1件しかないとき、
tableのなかが崩れてしまいます。
具体的に言えば、tableタグでwidthを580pxに固定し、
tdタグでひとつのエントリーのイメージの幅と
テキストの幅を指定して区切っているのですが、
エントリーがひとつしかないとき、
そのエントリーが580pxの幅のなかで中央に配置されてしまいます。
方法としてはifを使用してエントリーがひとつのときは
ブランクのセルを置くということになるのかと
思うのですが、xsltとしてはどのように記述すればいいのか分かりません。
質問させていただくにあたり、どのあたりまでのコードを載せればいいのかも
分かりませんでした。
このあたり教えていただけませんでしょうか?
必要な情報をがあれば、追記させていただきます。
よろしくお願いいたします。
前回の投稿から随分時間が経っておりますが、
質問がここに関係があるので追記させていただきます。
現在エントリー表示を2×2でtableタグを使って実現しています。
そこで問題となっているのが、表示されるべきエントリーが1件しかないとき、
tableのなかが崩れてしまいます。
具体的に言えば、tableタグでwidthを580pxに固定し、
tdタグでひとつのエントリーのイメージの幅と
テキストの幅を指定して区切っているのですが、
エントリーがひとつしかないとき、
そのエントリーが580pxの幅のなかで中央に配置されてしまいます。
方法としてはifを使用してエントリーがひとつのときは
ブランクのセルを置くということになるのかと
思うのですが、xsltとしてはどのように記述すればいいのか分かりません。
質問させていただくにあたり、どのあたりまでのコードを載せればいいのかも
分かりませんでした。
このあたり教えていただけませんでしょうか?
必要な情報をがあれば、追記させていただきます。
よろしくお願いいたします。
tsuさん、こんにちは。
XSLTのコードはこんな感じです。
そのまま引っ張ってきました。
2×2という表記は分かりにくいですね。微妙にずれている気がしてきました。
スイマセン…
状況としてはこんな感じです。
画像+タイトルで1エントリーです。
こんな感じをtabelタグで組んでるのですが、
1エントリーしかないときはテーブルの中のセルが二つになってしまうので、
widthを指定していても中央によってしまいます。
通常ならブランクのセルを作ればいいのですが、
XSLTでどう条件付けして、空セルを入るようにすればいいのかと
分かりませんでした。
もしIFを使った条件付け以外にいい方法があればそれでも結構ですので、
教えていただければうれしいです。
XSLTのコードはこんな感じです。
コード: 全て選択
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="EUC-JP" omit-xml-declaration="yes" />
<xsl:template match="/entrylist">
<table width="580" border="0" cellspacing="0" cellpadding="0">
<xsl:for-each select="row">
<tr>
<xsl:for-each select="entry">
<td width="116" align="center"><img class="lineup" width="108" height="135" border="0" src="{photo}" />
</td>
<td width="174" align="left" valign="bottom" class="lineuptxt">
<!-- New命令 -->
<xsl:if test="@daysago<30"><div class="new">New!</div></xsl:if>
<!-- ここまで -->
<xsl:value-of select="name" disable-output-escaping="yes" /><br />
<xsl:value-of select="description" disable-output-escaping="yes" />
</td>
</xsl:for-each>
</tr>
</xsl:for-each>
</table>
</xsl:template>
</xsl:stylesheet>
2×2という表記は分かりにくいですね。微妙にずれている気がしてきました。
スイマセン…
状況としてはこんな感じです。
コード: 全て選択
ーーーーーーーーーーーーーーーーーー
| | | | |
| 画像 | タイトル | 画像 | タイトル |
| | | | |
−ーーーーーーーーーーーーーーーーー
(繰り返し)
こんな感じをtabelタグで組んでるのですが、
1エントリーしかないときはテーブルの中のセルが二つになってしまうので、
widthを指定していても中央によってしまいます。
通常ならブランクのセルを作ればいいのですが、
XSLTでどう条件付けして、空セルを入るようにすればいいのかと
分かりませんでした。
もしIFを使った条件付け以外にいい方法があればそれでも結構ですので、
教えていただければうれしいです。
hiroshotさん
うまく動作するか分かりませんがちょっと書いてみました。
使えなかったらごめんなさい。
うまく動作するか分かりませんがちょっと書いてみました。
使えなかったらごめんなさい。
コード: 全て選択
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="EUC-JP" omit-xml-declaration="yes" />
<xsl:template match="/entrylist">
<table width="580" border="1" cellspacing="0" cellpadding="0">
<!--CMSDタグでのテーブル状出力-->
<xsl:for-each select="row">
<tr>
<!--エントリ出力-->
<xsl:for-each select="entry">
<td width="116" align="center">
<img class="lineup" width="108" height="135" border="0" src="{photo}" />
</td>
<td width="174" align="left" valign="bottom" class="lineuptxt">
<!-- New命令 -->
<xsl:if test="@daysago<30"><div class="new">New!</div></xsl:if>
<!-- ここまで -->
<xsl:value-of select="name" disable-output-escaping="yes" /><br />
<xsl:value-of select="description" disable-output-escaping="yes" />
</td>
<!--書き加えた条件/エントリが奇数の場合にのみ最後の出力を変える-->
<xsl:if test="position() mod 2=1 and position()=last()">
<td width="116" align="center">
<img class="lineup" width="108" height="135" border="0" src="noimage.jpg" />
</td>
<td width="174" align="left" valign="bottom" class="lineuptxt">
<img class="lineup" width="174" height="135" border="0" src="noentry.jpg" />
</td>
</xsl:if>
<!--ここまで-->
</xsl:for-each>
</tr>
</xsl:for-each>
</table>
</xsl:template>
</xsl:stylesheet>
とりあえず、あけましておめでとうございます。
今年も宜しくお願いします!
hiroshotさん
うまくいって良かったですね!
XSLTについて参考になりそうなサイトをまとめてありますので、眺めてみると良いかもです。
http://cms.al-design.jp/phpbb/viewtopic.php?t=550
理解出来てくると他のプログラミング言語と同じように面白いです。
私もまだまだなのでお互い頑張りましょう。
今年も宜しくお願いします!
hiroshotさん
うまくいって良かったですね!
XSLTについて参考になりそうなサイトをまとめてありますので、眺めてみると良いかもです。
http://cms.al-design.jp/phpbb/viewtopic.php?t=550
理解出来てくると他のプログラミング言語と同じように面白いです。
私もまだまだなのでお互い頑張りましょう。