リスト項目のIDを取得、自動リンクを貼るには?

「まったく何も分からない・・・」そんなユーザーさんの為のフォーラムです。どんなご質問でもお気軽にどうぞ。
返信
ryo-tsuboya
アクティブユーザー
記事: 10
登録日時: 2006年12月01日(金) 19:21

リスト項目のIDを取得、自動リンクを貼るには?

投稿記事 by ryo-tsuboya » 2007年4月14日(土) 11:42

こんにちは。いつも便利だな、と思いつつ使わせてもらっています。
今、テンプレート作成に挑んでいて、表題の件で躓きました。

「メニュー」というスキーマおよびエントリを作ります。
その「メニュー」の中に、「sub-link」というリスト項目を作ります。
この「sub-link」ひとつひとつのIDを取得して、別テンプレート(sub-link.php)に表示させたいときのリンクの記述はどのようにすればいいのでしょうか?

これは、たとえば「事業概要」というメニューの下に、「沿革」「理念」「採用情報」のような下位リンクをlistのdataタグを使って作りたい、というモデルケースです。

質問フォーラムの中を探したら、こうすればIDが取得できると書いてありましたが、これを使用すると、sub-link.phpにて登録したリスト項目すべてが表示されてしまいます。これを任意のIDだけ表示させたいのです。

コード: 全て選択

<xsl:for-each select="sub-link/listitem">	
<br /><a href="sub-link.php?eid={../../@id}"><xsl:value-of select="sub-title" disable-output-escaping="yes" /></a>
</xsl:for-each>
</li>
これが可能ならば、グローバルメニューの下に下位メニューを好きな数だけ置ける、という使い勝手のよいテンプレートが作成できます。

ご教授どうぞよろしくお願いします!

tsu
パワーユーザー
記事: 208
登録日時: 2006年1月16日(月) 12:00
お住まい: さいたま

投稿記事 by tsu » 2007年4月14日(土) 13:34

コード: 全て選択

<xsl:for-each select="sub-link/listitem">
で回すとそのエントリのリストアイテムすべてが表示されます。
絞り込むのならxsl:ifなどで条件分けするしか無いですね。

ようは、

コード: 全て選択

<div>事業概要</div>
<ul>
<li>沿革1</li>
<li>理念1</li>
<li>採用情報1</li>
</ul>

<div>TSU</div>
<ul>
<li>お宝映像</li>
<li>サンプル</li>
<li>プレゼント</li>
</ul>
こんな感じにしたいってことですか?

ryo-tsuboya
アクティブユーザー
記事: 10
登録日時: 2006年12月01日(金) 19:21

投稿記事 by ryo-tsuboya » 2007年4月14日(土) 14:39

説明が足りませんでした・・・

「O-midashi(大見出し)」というスキーマを作成します。

コード: 全て選択

<?xml version="1.0" encoding="UTF-8"?>
<schema name="O-midashi" caption="大見出し" >
    <data name="O-midashi" type="text" output="html1" caption="大見出しタイトル" />
   <data name="contents" type="textarea" caption="地の文" />
	
	<data name="sub-link" type="list" caption="下位ページ" >
   <listitem caption="下位ページ" >
       <data name="sub-title" type="text" output="html1" caption="下位ページタイトル" />
       <data name="sub-contents" type="textarea" caption="地の文" />
   </listitem>
  </data>

</schema>
ここで大見出しに「事業概要」や「キャンペーン」などのエントリを作成します。これが大カテゴリです。その下の小カテゴリとして、リスト項目を使って「下位ページ」を作成します。

そして、エントリの一覧とリスト項目のデザインを分けたいのです。

そして、デザイン定義(O-midashi.list.default.design.xsl)にて、(これはサイトのメニュー一覧のサイドバーなんかを思い浮かべてください。)

例:
事業概要
・沿革
・理念
・採用情報


コード: 全て選択

<xsl:for-each select="entry">
	
	<li>
	<a href="big.php{@href}"><xsl:value-of select="O-midashi" disable-output-escaping="yes" /></a>
	
	<xsl:for-each select="sub-link/listitem">	
    <br /><a href="small.php?eid={../../@id}"><xsl:value-of select="sub-title" disable-output-escaping="yes" /></a>
    </xsl:for-each>
	</li>
とし、これを
HTML上で、

コード: 全て選択

<ul>
<cmsd:entrylist name="O-midashi" design="default" />
</ul>	
で一覧として出力したいのです。
<a href="small.php?eid={../../@id}"><xsl:value-of select="sub-title" disable-output-escaping="yes" /></a>のところが問題です。このとき、リスト項目に各々のリストのIDを取得して自動リンクを貼り、個々のリスト項目ひとつだけを呼び出して、ほかのテンプレートに表示させたいのですが、現在これでいくと、リスト全てが表示されてしまいます。

たとえば、このリスト項目の中に

沿革
理念
採用情報

の三つを作ります。

すると、この三つにリンクが貼られていますが、リンク先には、繰り返し項目として沿革、理念
、採用情報、 三つすべての内容が表示されてしまっています。
これを、「沿革」を押したときには「沿革」のデータのみがリンク先に表示されるようにしたいのです。理念、採用情報も然りです。こうしてサイトのメニュー構造を二階層分管理したいのです。

おそらく、この
<a href="small.php?eid={../../@id}">
のリンクの書き方でどうにかできると思うのですが・・・


長くなってしまいましたが、おわかりいただけたでしょうか?
ご教授お願いします![/quote]

tsu
パワーユーザー
記事: 208
登録日時: 2006年1月16日(月) 12:00
お住まい: さいたま

投稿記事 by tsu » 2007年4月14日(土) 15:00

すいません、やっと理解しました。
つまり、リストアイテム一つだけをページに表示するって事ですね。
例えば、メインコンテンツ内とか。

URLにIDが付いた状態になってますので、cmsd:entryで別にリストアイテム用のデザイン定義を作ればいけそうな気がします。

コード: 全て選択

<xsl:template mach="entry/sub-link/listitem">   
<xsl:value-of select="sub-title" disable-output-escaping="yes" />
</xsl:template>
なんか動かなそうですけど。

ryo-tsuboya
アクティブユーザー
記事: 10
登録日時: 2006年12月01日(金) 19:21

投稿記事 by ryo-tsuboya » 2007年4月14日(土) 18:04

これはリスト項目の内容を、cmsd:entryの形で出す、ということでしょうか?でもそれだと、自動リンクは生成されませんよね?

事業概要
・沿革
・理念
・採用情報


こういう形に、リンクもつけたいのです。

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

投稿記事 by webmaster » 2007年4月14日(土) 20:41

 ryo-tsuboyaさん、ご質問ありがとうございます。tsuさん、いつもご回答ありがとうございます。

 このご質問は、あるページに、エントリ中のリスト項目の「n番目の項目だけ」を
出したい、というような話だと受け取りましたが、よろしかったでしょうか。

 nはURLパラメータなどで受け渡したい、ということだと思います。
 大変申し訳ないのですが、現状のCMS Designerではこの機能は実現することが
できません。

 デザイン定義側に渡せるパラメータは、

・エントリID
・ページ番号
・グループ絞込み条件

 だけで、それ以外の任意のパラメータを渡すことができません。
 この機能についてはずいぶん前から検討対象になっているのですが、未だ
実現されておりません(申し訳ありません)。

 ここで、パラメータとして「itemno」のようなオリジナルパラメータを
追加できるようになっていれば、そのパラメータをURLから

 <a href="detail.php?eid={/entry/@id}&itemno={@id}">詳細</a>

 のように渡し(上の例の@idはリスト項目の番号で、/entry/@id は、エントリID
です)詳細ページのデザイン定義側では、

 <xsl:if test="@id=/entry/params/itemno/text()">データ出力</xsl:if>

 のように表示対象を選択できるようになると考えております。

 以上、現状ではこのような機能がない為、デザイン定義側に「表示したいリスト
項目の番号」のようなパラメータを渡すことができません。
 目的のことが実現できず、申し訳ありませんが、ご了承下さい。m(__)m

ryo-tsuboya
アクティブユーザー
記事: 10
登録日時: 2006年12月01日(金) 19:21

投稿記事 by ryo-tsuboya » 2007年4月16日(月) 11:52

そうですか・・・ 了解いたしました。

それができれば鬼に金棒だと思うのですが、実現の予定はございますか?是非とも実現させてください!

よろしくお願いいたします。

disk
記事: 1
登録日時: 2007年6月03日(日) 17:07

もう少し詳しく教えてもらえませんか?

投稿記事 by disk » 2007年6月03日(日) 17:25

xsl を勉強し始めたばかりのもので、初歩的な質問なら申し訳無いのですが・・・

<a href="detail.php?eid={/entry/@id}&itemno={@id}">詳細</a>

ここまでは問題無くできました。
そして xsl:if を使ってより分けて表示する考え方も理解できるのですが、
itemno= で指定したIDをどうやって xsl:if の中に受け渡すのかが具体的にわかりませんでした。
ここさえできれば3層目的な表示ができると思うので、どうかよろしくお願いします。

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

Re: もう少し詳しく教えてもらえませんか?

投稿記事 by webmaster » 2007年6月03日(日) 22:16

 diskさん、ご質問ありがとうございます。

 前回の私の回答が紛らわしいのですが、itemnoをURLパラメータから与える、
という手法は、現在はCMSDには該当機能がない為実現することができません。

 仮にその機能があったら、という話でございました。
 紛らわしくて申し訳ありません。m(__;)m

返信