いつもお世話になっています。
URLパラメータから絞込みをしていますが,例えば
"address" という小項目と
"area" の大項目の二つのmenuタグを設定していて,
group key="address"で「1」を指定して絞込みをし一覧表示させ,
同じphpに別途"address"で「1」を含んでいる"area"大項目の一覧を
別途表示させることは可能でしょうか?
具体的には
A町やB町,C町,D町というaddressがあり,A町とB町はア地区というareaにあり,
A町で検索し,まずA町にある店舗を一覧表示させ,その下に,同じareaには「A町以外にこのような店舗があります」という一覧を表示させたい場合です。
このような絞込み検索はできますでしょうか?
すみませんがご教授下さい。
絞込みについて
Re: 絞込みについて
nitchanさん、いつもお世話になっております。
ご質問の件ですが、単純には難しそうです。
イメージとしては、
のように2つのエントリ一覧を並べる形になると思います。
しかし、address=1で絞り込んだ場合にはareaは指定されていませんから
二つ目のエントリ一覧には全件が出力されてしまいます。
JavaScriptを使って、絞込みフォーム側で「addressとしてA町が
選ばれた場合はarea=1も一緒に指定する」というような事をやれば
うまく行くかもしれませんが、script側にaddressとareaの対応表を
持つ必要があり、情報の二重管理になってしまいます。
JavaScriptに物凄く慣れた人なら、CMSDから全店舗の情報をJavaScript
で取得し、addressとareaの対応表を作成するということもできるかも
しれませんが、そもそも複雑ですし、表示の度にそれが行われるのも
パフォーマンス的に良くないと思います。
代わりに、IFRAMEを使ったこういう方法はいかがでしょうか。
まず、○町にある店舗一覧を表示させる為のデザインを書きます。
つまり、addressを指定して店舗一覧を表示する際にはそのareaが確定
する(同一addressならばareaも全て同一になる為)ので、先頭エントリ
からareaを取ってきて、それをまた別のリクエストとして別ページに投げて、
その結果をIFRAMEとして同じページに表示する、というものです。
listofarea.phpと、それに対応するエントリ一覧用デザイン定義は別途
作成する必要があります。
かなり省略して書かせて頂きましたが、お分かり頂けるでしょうか。
ご不明な点は再度ご質問頂ければと思います。
ただ、そもそも現在のCMS Designerでは、親子関係を持つようなデータ
構造を扱いづらくなっています。
今回のようなスキーマでも、addressとareaの対応付けは入力する側が
保証してやる必要があります。
全く別の方法として、スキーマの単位を「店舗」ではなく「町」単位に
するという方法があるかもしれません。
そして、店舗情報はリスト項目として保持します。
こうすれば、もっと単純な解決が可能ですが、今度は店舗を単独で表示
させたりすることができなくなる為、おそらく今回の目的には合わないと
思います。
以上、長くなってしまいましたがよろしくお願い致します。
ご質問の件ですが、単純には難しそうです。
イメージとしては、
コード: 全て選択
<cmsd:entry name="shops1" design="design1">
<cmsd:group key="address" />
</cmsd:entry>
<cmsd:entry name="shops1" design="design2">
<cmsd:group key="area" />
</cmsd:entry>
しかし、address=1で絞り込んだ場合にはareaは指定されていませんから
二つ目のエントリ一覧には全件が出力されてしまいます。
JavaScriptを使って、絞込みフォーム側で「addressとしてA町が
選ばれた場合はarea=1も一緒に指定する」というような事をやれば
うまく行くかもしれませんが、script側にaddressとareaの対応表を
持つ必要があり、情報の二重管理になってしまいます。
JavaScriptに物凄く慣れた人なら、CMSDから全店舗の情報をJavaScript
で取得し、addressとareaの対応表を作成するということもできるかも
しれませんが、そもそも複雑ですし、表示の度にそれが行われるのも
パフォーマンス的に良くないと思います。
代わりに、IFRAMEを使ったこういう方法はいかがでしょうか。
まず、○町にある店舗一覧を表示させる為のデザインを書きます。
コード: 全て選択
<xsl:template match="entrylist">
<xsl:for-each select="entry">
※店舗情報を出力
</xsl:for-each>
<xsl:if test="count(entry)>0">
<!-- 先頭エントリからareaを取得する -->
<xsl:variable name="area" select="//entry[1]/area/text()" />
<!-- IFRAMEを使ってarea内一覧を出力する -->
<iframe src="listofarea.php?area={$area}" name="listofarea"><a href="listofarea.php?area={$area}">同一地域の店舗一覧を表示する</a></iframe>
</xsl:if>
</xsl:template>
する(同一addressならばareaも全て同一になる為)ので、先頭エントリ
からareaを取ってきて、それをまた別のリクエストとして別ページに投げて、
その結果をIFRAMEとして同じページに表示する、というものです。
listofarea.phpと、それに対応するエントリ一覧用デザイン定義は別途
作成する必要があります。
かなり省略して書かせて頂きましたが、お分かり頂けるでしょうか。
ご不明な点は再度ご質問頂ければと思います。
ただ、そもそも現在のCMS Designerでは、親子関係を持つようなデータ
構造を扱いづらくなっています。
今回のようなスキーマでも、addressとareaの対応付けは入力する側が
保証してやる必要があります。
全く別の方法として、スキーマの単位を「店舗」ではなく「町」単位に
するという方法があるかもしれません。
そして、店舗情報はリスト項目として保持します。
こうすれば、もっと単純な解決が可能ですが、今度は店舗を単独で表示
させたりすることができなくなる為、おそらく今回の目的には合わないと
思います。
以上、長くなってしまいましたがよろしくお願い致します。
Re:Re: 絞込みについて
webmaster様
いつも迅速なアドバイスありがとうございます。
いいアイデアが思いつかず詰ってしまっていたので助かりました。
iframeを使用することは思いつきませんでした。
ただ,
・当サイトで設定しているWEBアクセシビリティでframe使用が制限されている
・area内の情報をiframe内で表示させても同じaddressの情報が重複して表示されてしまう
これらがちょっと気になります。
もうちょっと勉強してみますが,あまり当初の希望に固執しないで,「同じ地区にはこんな店舗があります」とリンクを貼ることを検討してみます。
今後ともよろしくお願いいたします。
いつも迅速なアドバイスありがとうございます。
いいアイデアが思いつかず詰ってしまっていたので助かりました。
iframeを使用することは思いつきませんでした。
ただ,
・当サイトで設定しているWEBアクセシビリティでframe使用が制限されている
・area内の情報をiframe内で表示させても同じaddressの情報が重複して表示されてしまう
これらがちょっと気になります。
もうちょっと勉強してみますが,あまり当初の希望に固執しないで,「同じ地区にはこんな店舗があります」とリンクを貼ることを検討してみます。
今後ともよろしくお願いいたします。