絞り込みについて

「まったく何も分からない・・・」そんなユーザーさんの為のフォーラムです。どんなご質問でもお気軽にどうぞ。
返信
blue
パワーユーザー
記事: 70
登録日時: 2005年1月31日(月) 20:49

絞り込みについて

投稿記事 by blue » 2005年2月19日(土) 21:34

いつも親切なご説明、ありがとうございます。
またまた質問です。絞り込みに関して2点お訊きしたいです。

リファレンスのp.47の一番下にあるように、エントリ1件表示で絞り込みたいのですが、
これをp.48の如く、URLパラメータからの絞込みの指定にしたく思っています。
理由はその下にも書いてあるように、種別毎に埋め込みページを作らなくてはならなくなるから、です。
ですがこれは、リスト表示の際のやりかたですよね。
一件表示で実現する方法があればお教えいただけますでしょうか。

二点目は、複数条件で絞り込む際、

<?php cmsview::listpage( "mydiary", "default", 10,
array( "review"=>"5", "shopkind"=>"2" ) ) ?>

のように説明されていますが、これはいわゆるand検索ですね。
or検索する方法は無いのでしょうか?

Aを選択した場合、条件1+2
Bを選択した場合、条件1+3
などとしたいのです。
グループ項目をもう一つ作り、
mark1---1、2、mark2---1、2、 として、
Aを選択した場合、mark1---1、
Bを選択した場合、mark2---1、などとすれば可能かと思いますが、何だか間抜けな気もします(笑
それにスキーマ定義において、「 group="True"」指定するdata項目が2つあってはマズイのでは?
などと頭を捻っている次第です。

マニュアル記載事項を充分理解しているとは言い切れず、特に「デザイン定義側での絞り込み指定」については、正直ほとんど分かっていない気がします。
ひょっとして先のkknさんのトピックとダブってるかもと思いますが、それもよく分からない始末で…。
何卒お助けくださいませ。

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

Re: 絞り込みについて

投稿記事 by webmaster » 2005年2月19日(土) 23:51

 webmasterです。
 こちらこそ、いつもツボをついたご質問、ありがとうございます。m(_ _)m

■一件表示の場合の「URLパラメータからの絞込みの指定」について

 すいません、マニュアルから抜けております・・・。(-_-;;

 一件表示で絞込みをしたいということは、一件表示にも「次のエントリ」「前の
エントリ」の切替ナビゲーションを付けたい、とうことですよね。
 以下のようにすればOKです。

 <?php cmsview::navi_entry( "mydiary", "default", array( "review"=>"5", "shopkind"=>"2" ) ) ?>

 絞込み条件をURLパラメータから指定する場合も、一覧表示と同様に値を
nullに置き換えればOKです。

 ちなみに、絞込んだ結果を一覧表示して、そこからさらに単に一件表示に
飛ばしたいだけの場合は、一件表示画面側にはわざわざ絞込みを指定する
必要はありません(必要なのはエントリIDだけですので・・)。
 いつもどおり、

<?php cmsview::entry( "mydiary", "default" ) ?>

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

■OR検索について

 「or検索」については、すいません、現状サポートしておりません・・。
 別のスレッドでもご説明させて頂きましたが、CMSDは「検索」機能については
開発当初から外す方向で設計されております。

 絞込み表示は、エントリをグループ単位で分類して表示したい場合があるだろう
ということでつけた機能で、元々あまり複雑な要望に対応できるようにはなって
いないのです・・・。

 とはいえ、検索ができるようにしてほしいという要望がとても多く、今後の重要
検討課題として認識しております。

 パフォーマンス上の問題はあるかもしれませんが、できないよりはできた方が
いいですものね。

 一番の問題は、実はパフォーマンスよりも検索条件の指定方法かと思います。
 ある程度複雑な検索条件にも柔軟に対応させるためには、デザイナーの皆さん
にプログラマーの真似事をしていただく必要が出てくるかもしれません。

 少なくとも、

 (( キー1="条件1a" or キー1="条件1b" ) and ( キー2>="条件2a" ))

 ぐらいの条件式(プログラマー用語ですね、すいません)を書いて頂く事に
なるかと思います。

 この辺の指定方法を簡単にすればするほど柔軟性が低くなり、柔軟性を
上げようとすると、今度は指定方法がプログラマー寄りになってくるようです。

 デザイナーさんが扱うツールとして、どこまでが現実的なのか・・・。

 またご要望などお聞きしながら、仕様を決めていきたいと思いますので
今後ともよろしくお願いします。m(_ _)m

■おまけ

 尚、検索結果の一覧表示に対してページ切替を行わないのであれば、
デザイン定義側で結果を絞り込む事もできます(XSLTはかなり強力です)。

 かなりプログラマー寄りの話になるので詳しくは書きませんが、
簡単に説明すると、例えば

<xsl:for-each select="entry" >

 の箇所を、

<xsl:for-each select="entry[@year='2005']" >

 と書けば、更新日の年が"2005"のものしか表示されなくなります。
 これは「XPath」と言われるXML内部を検索する為の標準的な表記法です。
 CMSDも内部でこの機能を利用しています。

 技術的な事に興味がある方のみ、お試しください。一般的なデザイナーさん
にはまるでお勧めできません。(-_-;;

 この裏技みたいなテクニックは、ページ切替機能を使う場合には使えません。
 なぜなら、XSLTが適用されるのは1ページ単位にエントリ一覧が切り分けられた
後の、各ページ単位だからです。

 1ページ分に切り分けられた後に、XSLT側で何らかの条件でさらに絞り込んだ
としたら、何も表示されないページが出てきたり、ページ毎に表示件数が違う、
なんて事になってしまいます。

 これ以上詳しく書いてもおそらく訳が分からないと思うので、これについては
XSLTについてある程度知識のある方のみ、お試しくださいませ。m(_ _)m

 基本的には、デザイナーさんにはここまで踏み込んで頂く事を期待しては
おりません。

 複雑な機能よりも、デザイナーさんにもなるべく簡単に扱える事を優先して
いきたいと思います。

blue
パワーユーザー
記事: 70
登録日時: 2005年1月31日(月) 20:49

うまくいきました

投稿記事 by blue » 2005年2月20日(日) 20:36

サポートありがとうございます。
一つ目の件ですが、あっさりと成功いたしました。
前に試した時はエラーになってしまったのに、何か記述が違っていただけかもしれません。失礼いたしました。
ちなみに、
array( "review"=>"5" ) )
と、条件が1つの場合でも検索でき、 group="True"を使わずに、
URLパラメータからも、
array( "mark1"=>null) としておけば、
hoge.php?mark=1 で呼び出すことができました。

二つ目の件ですが、
array( "mark1"=>"1")
array( "mark2"=>"1")
と、最初に書いたように項目を増やすことでorまがいのこともできました。
当面これでやっていけそうです :P
今回はナビゲーションを生かしたい件なのでデザイン定義側の設定が出来ないようですが、また機会があれば試してみたく思います。
いろいろ遊べ…、いや、勉強になります :lol:

hiro

Re: うまくいきました

投稿記事 by hiro » 2005年2月20日(日) 20:55

blueさん、はじめまして。
絞込みの作業がどうしてもうまくいかず、考え込んでいたのですが、
array( "review"=>"5" ) )
と、条件が1つの場合でも検索でき、 group="True"を使わずに、
URLパラメータからも、
array( "mark1"=>null) としておけば、
hoge.php?mark=1 で呼び出すことができました。
を参考にしてみたら、あっさり思い通りに動きました^^
ありがとうございました。


ps webmaster様へ

絞込みを"XX"のように指定すれば、XXで絞りこまれるのですが、
"XX"をnullに置き換えてパラメータでphp?genre=XX指定しても
絞り込まれるものもあれば、全部表示されたりして、何か根本的に
間違えがあるのでしょうか。それともパラメータ指定の書き方が違いますか?
また、当初schemaにグループが二つあったのを、途中でひとつのグループを
削除したことが原因でしょうか??ちょっとまだ理解が足りないのですが、
blueさんの記事を参考に進めてみます。

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

Re: うまくいきました

投稿記事 by webmaster » 2005年2月20日(日) 22:05

 webmasterです。blueさん、ご報告ありがとうございます。
 いくつか気になる点があったので、いちおうご参考までにご連絡しておきます。
blue さんが書きました:サポートありがとうございます。
一つ目の件ですが、あっさりと成功いたしました。
前に試した時はエラーになってしまったのに、何か記述が違っていただけかもしれません。失礼いたしました。
ちなみに、
array( "review"=>"5" ) )
と、条件が1つの場合でも検索でき、 group="True"を使わずに、
URLパラメータからも、
array( "mark1"=>null) としておけば、
hoge.php?mark=1 で呼び出すことができました。
 上記の通り、絞込み条件は1つでもOKなのですが、group="True"を指定して
おかないと、エラーにはならないものの正しく絞り込みできないと思います。

 CMSDは、スキーマでgroup="True"と指定された項目を、エントリの保存時に
「indexファイル」という検索用のファイルにコピーします。

 絞込みの際はこのindexファイルを使って高速に検索処理を行っています。
 (絞込み時にはエントリデータは直接見に行っていません)

 よって、運用中にスキーマのgroup指定を外したり追加したりすると、過去に
保存したエントリについては検索用の項目がindexファイル上に残っていますが、
その後のエントリについては存在しない事になり、正しく絞り込みが行われません。

 運用中のグループ項目の変更が原則×なのはこの為です。
 (スキーマ変更を全エントリに反映する仕組みを検討中ですが、まだ先になる
と思います)

 というわけで、

> array( "mark1"=>null) としておけば、
> hoge.php?mark=1 で呼び出すことができました。

 のようにする場合は、最初からスキーマにgroup="True"を指定するようにして
くださいませ。m(_ _)m

 この回答は、hiroさんのご質問への回答にもなっていると思います。
今回はナビゲーションを生かしたい件なのでデザイン定義側の設定が出来ないようですが、また機会があれば試してみたく思います。
いろいろ遊べ…、いや、勉強になります :lol:
 がんがん遊んでやってくださいませ。 :)

blue
パワーユーザー
記事: 70
登録日時: 2005年1月31日(月) 20:49

助かりました

投稿記事 by blue » 2005年2月21日(月) 17:14

array( "review"=>"5" ) )
と、条件が1つの場合でも検索でき、 group="True"を使わずに、
URLパラメータからも、
array( "mark1"=>null) としておけば、
hoge.php?mark=1 で呼び出すことができました。
前に書き込んであったgroup="True"をそのまま放ってあったので、それで成功したというわけだったのですね(汗;
ご指摘いただいて助かりました。危うく消すところでした。
「indexファイル」という検索用のファイルにコピーされるというのは、マニュアルにありましたものね、確か。

>hiro さん はじめまして。
私もhiroさんの書き込みをいつも参考にさせていただいてます<(_ _)>
お互い理想のサイト構築を目指してかんばりまっしょv

soitilow

or検索について

投稿記事 by soitilow » 2005年4月15日(金) 13:13

or検索について質問です。

blueさんの書き込みの中で、
array( "mark1"=>"1")
array( "mark2"=>"1")
と、最初に書いたように項目を増やすことでorまがいのこともできました。
とありますがこれについて詳しく教えていただけないでしょうか。よろしくお願いします。

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

Re: or検索について

投稿記事 by webmaster » 2005年4月15日(金) 14:00

 webmasterです。

 blueさんの書き込みに対するご質問ですので、私が回答するのは筋違いかも
しれませんが、CMSDは現状、基本的にはor検索に非対応です。

 というか、「検索」自体に現状まだ対応しておりません。

 グループ絞込み機能を便宜上and検索代わりに用いる事はできるのですが、
もともと単にエントリを何らかの種類単位に分類する為の機能ですので、
or検索のような複雑な要求には対応していないのが現状です。

 blueさんの書き込みで実現した「or検索」というのは、おそらくblueさんの目的
に合った「or検索らしきもの」であって、一般的なor検索は実現できないはずです。

 絞込み表示の機能アップ(or検索)や、検索機能については要望が高いため、
将来段階的に機能追加する予定です。

返信