他のエントリーからのIDパラメーターの引用方法について

「まったく何も分からない・・・」そんなユーザーさんの為のフォーラムです。どんなご質問でもお気軽にどうぞ。
返信
moory
記事: 2
登録日時: 2007年8月19日(日) 10:50

他のエントリーからのIDパラメーターの引用方法について

投稿記事 by moory » 2007年8月19日(日) 11:54

図鑑のようなサイトを作成したく、その際にCMSDを利用したいと思っております。
今回の質問内容は、少々複雑な仕様になってしまい、本来のCMSDの利用方法とは趣旨が違っているかもしれません。

カテゴリー登録用のスキーマーAから生成されたページ「A.php?eid=00001」に、そのカテゴリー専用に作成したスキーマーBの登録情報を関連付けしたいと考えております。

【概念】
「スキーマーA」→カテゴリーと概要の登録
「スキーマーB」→スキーマーAで生成されるカテゴリー内容に準じた個別の情報表示 ※カテゴリー別に「B00001」「B00002」の様にエントリーフォルダーを分けて管理しています。

【現在の記述方法】
現状では、XSLTでの他のエントリーからのIDパラメーターの引用方法がわからなかったので、無理やり(苦笑)PHPでIDパラメーターを取得し、「A.php?eid=00001」のページ内に、下記のような記述をしています。
スキーマーAを埋め込んだPHPのソースの一部
<?php
$vid = "A" . $_GET[eid];
?>
<cmsd:entrylist name="<?=$vid?>" design="default" pageno="top"/>
「A.php?eid=00001」内で「B00001フォルダー内のエントリー項目」のリスト表示は出来ているのですが、実際にこのリスト表示から詳細ページである「B00001.php?eid=0000x」にリンクを貼る際に躓いてしまいました。

具体的には、リンク先として、「B00001.php?eid=00005」の様に記述したいのですが、リスト表示するためにはxsl内でIDを取得せねばならないためリンク先である「B[代入するID].php」の記述方法がわからず、とりあえずxslファイルの中に上記のphpを埋め込んでも動作しませんでした。

過去ログを拝見したところ、「エントリ内に他のエントリの画像を載せるには」にあるような「document関数とvariableを使った方法」のような気がするのですが、具体的な記述方法がわかりません。
ご教授願えませんでしょうか?

なお、実際には、スキーマーA内でカテゴリー分けをし、絞込みの設定をすれば実現可能なのですが、今後カテゴリーが増えていくことを考慮すると、膨大なエントリー数になったB0000?の対応に苦慮することが想像されるためこのような設計方法を思いつきました。

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

Re: 他のエントリーからのIDパラメーターの引用方法について

投稿記事 by webmaster » 2007年8月21日(火) 14:18

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

mooryさんのように、あるエントリ群と別のエントリ群に「親子関係」を持たせたい
という要望は、弊社案件でもかなり多くあり、やはり同様に実現に頭をひねっており
ます。

mooryさんの方法はかなり現実的な方法だと思いますが、スキーマBのデザイン定義に
AのエントリIDを渡す方法が存在しない為、難しいかと思います。

コード: 全て選択

スキーマーAを埋め込んだPHPのソースの一部
<?php
$vid = "A" . $_GET[eid];
?>
<cmsd:entrylist name="<?=$vid?>" design="default" pageno="top"/>
を、

コード: 全て選択

スキーマーAを埋め込んだPHPのソースの一部
<cmsd:entrylist name="a" design="default" />
<?php
$vid = "b" . $_GET['eid'];
?>
<cmsd:entrylist name="<?php echo $vid; ?>" design="<?php echo $vid; ?>" pageno="top"/>
に変更し、b00001用のデザイン定義、b00002用のデザイン定義、のように
それぞれにデザイン定義を作成するというのが、かなり非効率ですが現状の
落としどころかもしれません。m(__)m

尚、上記のコードにはセキュリティホールがありますので充分に注意して下さい。
$_GETで読み込んだパラメータを、チェック無しにそのまま出力すると、所謂XSSの温床になりますし、不正なCMSDタグを埋め込まれたりもします。

もし、eidパラメータに

「" design="default" /><script type="text/javascript" src="destroy.js" /><cmsd:entrylist name="」

のような文字列データが含まれていた場合、

コード: 全て選択

<cmsd:entrylist name="<?=$vid?>" design="default" pageno="top"/>
の結果は

コード: 全て選択

<cmsd:entrylist name="A" design="default" /><script type="text/javascript" src="destroy.js" /><cmsd:entrylist name="" design="default" pageno="top"/>
となります。間に自由にscriptタグなどを仕込む事ができる為、そのサイトのドメインを
使って悪意のあるスクリプトを実行させてしまう事ができるようになります。

こちらの事例を参考にして、入力パラメータの数値チェックを行う必要があります。
http://cms.al-design.jp/phpbb/viewtopic.php?p=2750

くれぐれもご注意下さい。

ご不明な点は再度ご質問頂ければ幸いです。

尚、今回のような「親子関係」の構築についてですが、今後の最重要課題として
現在実現方法を検討中です。

moory
記事: 2
登録日時: 2007年8月19日(日) 10:50

投稿記事 by moory » 2007年8月21日(火) 21:08

ご返答ありがとうございます。
やはり希望は多いのですね。

コンテンツが増えれば増えるほど、またCMSDを使いこなせばこなすほど、より多くの可能性が見えてきてとても楽しいです。

「親子関係」一日も早い実装を希望します。

今回のPHPでの「仮親子関係」の実現は、数日中にテストしてみます。
また、ご報告しますね。

返信