絞込み条件が複数の場合の「データなし」の表示

「まったく何も分からない・・・」そんなユーザーさんの為のフォーラムです。どんなご質問でもお気軽にどうぞ。
返信
mason
パワーユーザー
記事: 48
登録日時: 2007年7月02日(月) 18:36

絞込み条件が複数の場合の「データなし」の表示

投稿記事 by mason » 2008年1月16日(水) 15:17

こんにちは。
いつもお世話になっております。

絞込み機能について質問させてください。

2つの条件で絞込みをしていますが、「両方ともデータがない場合」にのみ
「データがありません」と出したいのですが、可能でしょうか?
施設のスキーマーにて「最寄り駅1」「最寄り駅2」を選択させ、
最寄り駅のページに選択されたデータを絞りこんで表示しています。
マニュアル6.3.5「絞込みの固定」の方法でデータを抽出していますが
条件が2つあるので以下のように2つ条件を記入しています。

コード: 全て選択

<cmsd:entrylist name="fac01" design="default01" rows="9999">
<group key="station1" value="2" />
</cmsd:entrylist>
<cmsd:entrylist name="fac01" design="default01" rows="9999">
<group key="station2" value="2" />
</cmsd:entrylist>
この場合、「最寄り駅1」「最寄り駅2」のどちらでも選択されなかった駅ページには
「データがありません」と出したいのですが、デザイン定義にてそのように記述すると
上記のように2つ絞込み表示をしているため、「データがありません」と2つ表示されてしまいます。

マニュアルでは、<cmsd:group〜>タグを増やして「○○かつ××のデータ」となっていますが
「○○もしくは××のデータ」という抽出が出来れば実現出来るのでは?と
思っているのですが、このようなことは可能でしょうか?

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

Re: 絞込み条件が複数の場合の「データなし」の表示

投稿記事 by webmaster » 2008年1月21日(月) 17:32

 masonさんこんにちは、ご質問ありがとうございます。
 お返事遅れまして申し訳ありません。

 結論から申し上げますと、お気づきの通り、OR条件による絞込みはCMSDでは
サポートしておりません。m(__)m

 今回の件はそもそも、メニュー項目に対して複数の値を選択することができない
という制限からくる問題かと認識しております。重ね重ね、機能不足でご迷惑を
おかけしております。

 解決方法としては、JavaScriptを用いる方法ぐらいしか思いつきません。
 それぞれのcmsd:entrylistをdivタグで囲ってやり、出力後にJavaScriptを使って

 「station1とstation2の両方が空だったら、エラーメッセージを出力」

 のように書きます。
 次のようにするといけると思います。

コード: 全て選択

<div id="station1">
  <cmsd:entrylist name="fac01" design="default01" rows="9999">
    <group key="station1" value="2" />
  </cmsd:entrylist>
</div>
<div id="station2">
  <cmsd:entrylist name="fac01" design="default01" rows="9999">
    <group key="station2" value="2" />
  </cmsd:entrylist>
</div>

<div id="errormessage"></div>
<script type="text/javascript">
  var station1 = document.getElementById( 'station1' );
  var station2 = document.getElementById( 'station2' );
  var errormessage = document.getElementById( 'errormessage' );
  
  // station1とstation2がどちらも空だったらエラー表示
  if ( trim( station1.innerHTML ) + trim( station2.innerHTML ) == '' )
  {
  	errormessage.innerHTML = 'データがありません';
  }
  
  // 前後のスペースや改行を取り除く関数
  function trim( str ) {
    return str.replace(/^\s+|\s+$/g, '');
  }
</script>
 但し、もちろんJavaScriptが切ってある環境ではエラーメッセージは表示され
ませんし、携帯などで見た場合にも同様です。
 ご参考までにご利用下さい。

mason
パワーユーザー
記事: 48
登録日時: 2007年7月02日(月) 18:36

投稿記事 by mason » 2008年1月23日(水) 15:43

こんにちは。
いつもお世話になっております。

なるほど、JavaScriptで実現させる方法があったのですね。
全く気づかずお手数をお掛けしましたm(_ _)m

いただたコードで試したところ、実現させたいとおりの結果になりました。
ご丁寧にありがとうございました :lol:

返信