初めまして。
とにもかくにも更新作業が楽になると、CMS Designer を導入することにしました!
CGIを組まなくても各パーツを有効活用できるので本当に助かっています!
とりあえず、少しずつ使い方がわかってきたところなのですが、
PGでよく使うfor文に相当する処理がなくて困っています。
小説Aは全15話、小説Bは全27話、小説Cは1話だけ・・・と話の数がわかっているので、
<?xml version="1.0" encoding="UTF-8"?>
<schema name="nov" caption="小説タイトルの登録" sortkey="number" sortorder="desc" >
<data name="nov_title" type="text" caption="小説タイトル" />
<data name="nov_title_sub" type="text" caption="小説タイトル(ソート用/半角英数字)" group="True" />
<data name="end_flg" type="menu" caption="完結した?" >
<menuitem id="0">完結</menuitem>
<menuitem id="1">連載中</menuitem>
<menuitem id="2">改訂中</menuitem>
<menuitem id="8">苦悩中</menuitem>
<menuitem id="9">執筆放棄</menuitem>
</data>
<data name="genkouyoushi" type="int" caption="400字詰原稿用紙換算" />
<data name="number" type="int" caption="掲載順" />
<data name="comment" type="textarea" output="html2" caption="コメント" rows="5" cols="70" />
<data name="directory" type="text" caption="ディレクトリ名" />
<data name="sub_directory" type="text" caption="サブディレクトリ名" />
<data name="stories" type="int" caption="話数(全×話)" />
</schema>
話数(stories)を設定しました。
小説のファイルは「directory/sub_directory/」に
A-1.txt
A-2.txt
A-3.txt
:
:
A-15.txt
とテキストで保存してあり、Aがタイトル、数字が話数です。
これらをPerlで呼び出し、縦書き(T)・横書き(Y)に振り分けています。
そのPerlを呼ぶと以下のようになります。
縦:<A HREF="nvl.cgi?{directory}+{sub_directory}+$話数+T">[<xsl:value-of select="$話数" />]</A>
横:<A HREF="nvl.cgi?{directory}+{sub_directory}+$話数+Y">[<xsl:value-of select="$話数" />]</A>
これを、小説Aの場合は1〜15まで表示したいので、$話数に1〜15を入れたいのです。
<A HREF="nvl.cgi?dirA+sub_dirA+1+Y">[1]</A>
<A HREF="nvl.cgi?dirA+sub_dirA+2+Y">[2]</A>
<A HREF="nvl.cgi?dirA+sub_dirA+3+Y">[3]</A>
:
:
<A HREF="nvl.cgi?dirA+sub_dirA+15+Y">[15]</A>
何か良い方法はありませんでしょうか???
よろしくお願いします。
指定回数を繰り返したいのですが・・・
1件ずつ表示する前提で
指定回の繰り返し(http://qa.xml.gr.jp/data/xsl/files/0042.xml)を参考にやってみたところ、とりあえず1件ずつ表示することはできるようになりました。
<cmsd:entry name="nov1" design="default" eid="00001" />
<cmsd:entry name="nov1" design="default" eid="00002" />
<cmsd:entry name="nov2" design="default" eid="00001" />
:
:
<cmsd:entry name="nov9" design="default" eid="00099" />
とはいえ、このように小説タイトル1件毎では、HTMLを呼び出すときに現実的とは言えません
リストにうまく組み込めればいいのですが・・・。
諦めずに勉強していきますが、解決のヒントなどいただけたらとても嬉しいです。よろしくお願いします。
----- ここから -----
<?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="entry">
<H5><xsl:value-of select="nov_title" /></H5>
<DIV><xsl:value-of select="comment" /></DIV>
<DIV>横書き:
<xsl:call-template name="loop1">
<xsl:with-param name="cnt1">1</xsl:with-param>
</xsl:call-template>
</DIV>
<DIV>縦書き:
<xsl:call-template name="loop2">
<xsl:with-param name="cnt2">1</xsl:with-param>
</xsl:call-template>
</DIV>
</xsl:template>
<xsl:template name="loop1">
<xsl:param name="cnt1" select="0" />
<xsl:if test="$cnt1 > 0">
<A HREF="nvl.cgi?{directory}+{sub_directory}+{$cnt1}+Y">[<xsl:value-of select="$cnt1" />]</A>
<xsl:call-template name="loop1">
<xsl:with-param name="cnt1">
<xsl:if test="$cnt1 < stories/text()">
<xsl:value-of select="$cnt1 +1" />
</xsl:if>
</xsl:with-param>
</xsl:call-template>
</xsl:if>
</xsl:template>
<xsl:template name="loop2">
<xsl:param name="cnt2" select="0" />
<xsl:if test="$cnt2 > 0">
<A HREF="nvl.cgi?{directory}+{sub_directory}+{$cnt2}+T">[<xsl:value-of select="$cnt2" />]</A>
<xsl:call-template name="loop2">
<xsl:with-param name="cnt2">
<xsl:if test="$cnt2 < stories/text()">
<xsl:value-of select="$cnt2 +1" />
</xsl:if>
</xsl:with-param>
</xsl:call-template>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
----- ここまで -----
<cmsd:entry name="nov1" design="default" eid="00001" />
<cmsd:entry name="nov1" design="default" eid="00002" />
<cmsd:entry name="nov2" design="default" eid="00001" />
:
:
<cmsd:entry name="nov9" design="default" eid="00099" />
とはいえ、このように小説タイトル1件毎では、HTMLを呼び出すときに現実的とは言えません

諦めずに勉強していきますが、解決のヒントなどいただけたらとても嬉しいです。よろしくお願いします。
----- ここから -----
<?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="entry">
<H5><xsl:value-of select="nov_title" /></H5>
<DIV><xsl:value-of select="comment" /></DIV>
<DIV>横書き:
<xsl:call-template name="loop1">
<xsl:with-param name="cnt1">1</xsl:with-param>
</xsl:call-template>
</DIV>
<DIV>縦書き:
<xsl:call-template name="loop2">
<xsl:with-param name="cnt2">1</xsl:with-param>
</xsl:call-template>
</DIV>
</xsl:template>
<xsl:template name="loop1">
<xsl:param name="cnt1" select="0" />
<xsl:if test="$cnt1 > 0">
<A HREF="nvl.cgi?{directory}+{sub_directory}+{$cnt1}+Y">[<xsl:value-of select="$cnt1" />]</A>
<xsl:call-template name="loop1">
<xsl:with-param name="cnt1">
<xsl:if test="$cnt1 < stories/text()">
<xsl:value-of select="$cnt1 +1" />
</xsl:if>
</xsl:with-param>
</xsl:call-template>
</xsl:if>
</xsl:template>
<xsl:template name="loop2">
<xsl:param name="cnt2" select="0" />
<xsl:if test="$cnt2 > 0">
<A HREF="nvl.cgi?{directory}+{sub_directory}+{$cnt2}+T">[<xsl:value-of select="$cnt2" />]</A>
<xsl:call-template name="loop2">
<xsl:with-param name="cnt2">
<xsl:if test="$cnt2 < stories/text()">
<xsl:value-of select="$cnt2 +1" />
</xsl:if>
</xsl:with-param>
</xsl:call-template>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
----- ここまで -----
Re: 1件ずつ表示する前提で
webmasterです。もりやさん、お返事遅れましてすいません。
ご指摘のとおり、xsltにて「特定回数の繰り返し処理」は苦手とする分野です。
教えていただいた繰り返し処理のソースを参考に、サンプルを作ってみました。
呼び出し部分
ループ処理部分
細かい説明は省略しますが、ご不明な点がありましたらまたご質問頂ければ
幸いです。
ご指摘のとおり、xsltにて「特定回数の繰り返し処理」は苦手とする分野です。
教えていただいた繰り返し処理のソースを参考に、サンプルを作ってみました。
呼び出し部分
コード: 全て選択
<xsl:call-template name="loop1">
<xsl:with-param name="cnt"><xsl:value-of select="stories" /></xsl:with-param>
</xsl:call-template>
コード: 全て選択
<xsl:template name="loop1">
<xsl:param name="cnt" select="0" />
<xsl:param name="index" select="1" />
<xsl:if test="$index <= $cnt">
<!-- loop出力ここから -->
<a HREF="nvl.cgi?{$index}+Y">[<xsl:value-of select="$index" />話]</a>
<!-- loop出力ここまで -->
<xsl:call-template name="loop1">
<xsl:with-param name="cnt">
<xsl:value-of select="$cnt" />
</xsl:with-param>
<xsl:with-param name="index">
<xsl:value-of select="$index +1" />
</xsl:with-param>
</xsl:call-template>
</xsl:if>
</xsl:template>
幸いです。
変更箇所が減りました!
きれいに直してくださってありがとうございました。XMLはまだまだ勉強し始めたばかりで、自分の頭ばかりがループしてしまって困っているところでした(自爆)。この方法なら、template name の値さえ正しく変更できれば、他の変数をいじらなくてもいいので安全ですね♪早速使わせていただきました!!
まだいくつか試してみたいことがありますので、今後ともよろしくお願いします!
まだいくつか試してみたいことがありますので、今後ともよろしくお願いします!