ホーム > フォーラム > 開発 > モジュール開発 > xoopsmembersモジュールで複数キーワード検索(AND検索)をしたい。

xoopsmembersモジュールで複数キーワード検索(AND検索)をしたい。
投稿者: hiron2425 | 投稿日時: 2011/2/27 19:34 | 閲覧: 10002回
hiron2425

xoopsmembersモジュールをカスタマイズいたしました。

ところで、
下記のフリーワード検索の、
フリーワードのテキストボックスを一つのみ表示させて、
複数キーワード単語(ユーザー名、その他の情報、居住地、本名)
をスペースで区切ったキーワード検索(AND検索)に変更したいのですが、
この場合どのように書き換えることができますでしょうか?

いろいろ調べても私の知識では難しいです。

どなたかわかる人がいましたら、どうぞ宜しくお願いいたします。



***** xoopsmembersモジュールのカスタマイズ *****


検索フォームは、
  <input type="text" name="user_freeword"....
として表示。

  index.phpの
  if ( $op == "form" ) {
  以下に、

   $freeword_text = new XoopsFormText("", "user_freeword", 30, 60);
   $freeword_match = new XoopsFormSelectMatchOption("", "user_freeword_match");
   $freeword_tray = new XoopsFormElementTray('フリーワード', "&nbsp;");
   $freeword_tray->addElement($freeword_match);
   $freeword_tray->addElement($freeword_text);

と定義した$freeword_trayを加えました。
   $form->addElement($freeword_tray);


キーワード一つで、
   uname(ユーザーiD)
   bio(その他情報)
   user_from(居住地)
   name(本名)
を一括検索できるように変更しました。

  index.phpの
  if ( $op == "submit" ) {
   $xoopsOption['template_main'] = 'xoopsmembers_searchresults.html';
   include XOOPS_ROOT_PATH."/header.php";
   $iamadmin = $xoopsUserIsAdmin;
   $myts =& MyTextSanitizer::getInstance();
   $criteria = new CriteriaCompo();
  以下に、
   if ( !empty($_POST['user_freeword']) ) {
     $match = (!empty($_POST['user_freeword_match'])) ? intval($_POST['user_freeword_match']) : XOOPS_MATCH_START;
     switch ( $match ) {
     case XOOPS_MATCH_START:
      $criteria->add(new Criteria('uname', $myts->addSlashes(trim($_POST['user_freeword'])).'%', 'LIKE'),"OR");
      $criteria->add(new Criteria('bio', $myts->addSlashes(trim($_POST['user_freeword'])).'%', 'LIKE'),"OR");
      $criteria->add(new Criteria('user_from', $myts->addSlashes(trim($_POST['user_freeword'])).'%', 'LIKE'),"OR");
      $criteria->add(new Criteria('name', $myts->addSlashes(trim($_POST['user_freeword'])).'%', 'LIKE'),"OR");
      break;
     case XOOPS_MATCH_END:
      $criteria->add(new Criteria('uname', '%'.$myts->addSlashes(trim($_POST['user_freeword'])), 'LIKE'),"OR");
      $criteria->add(new Criteria('bio', '%'.$myts->addSlashes(trim($_POST['user_freeword'])), 'LIKE'),"OR");
      $criteria->add(new Criteria('user_from', '%'.$myts->addSlashes(trim($_POST['user_freeword'])), 'LIKE'),"OR");
      $criteria->add(new Criteria('name', '%'.$myts->addSlashes(trim($_POST['user_freeword'])), 'LIKE'),"OR");
      break;
     case XOOPS_MATCH_EQUAL:
      $criteria->add(new Criteria('uname', $myts->addSlashes(trim($_POST['user_freeword']))),"OR");
      $criteria->add(new Criteria('bio', $myts->addSlashes(trim($_POST['user_freeword']))),"OR");
      $criteria->add(new Criteria('user_from', $myts->addSlashes(trim($_POST['user_freeword']))),"OR");
      $criteria->add(new Criteria('name', $myts->addSlashes(trim($_POST['user_freeword']))),"OR");
      break;
     case XOOPS_MATCH_CONTAIN:
      $criteria->add(new Criteria('uname', '%'.$myts->addSlashes(trim($_POST['user_freeword'])).'%', 'LIKE'),"OR");
      $criteria->add(new Criteria('bio', '%'.$myts->addSlashes(trim($_POST['user_freeword'])).'%', 'LIKE'),"OR");
      $criteria->add(new Criteria('user_from', '%'.$myts->addSlashes(trim($_POST['user_freeword'])).'%', 'LIKE'),"OR");
      $criteria->add(new Criteria('name', '%'.$myts->addSlashes(trim($_POST['user_freeword'])).'%', 'LIKE'),"OR");
      break;
     }
   }

コメント(9)

Re: xoopsmembersモジュールで複数キーワード検索(AND検索)をしたい。 
投稿者: rabbit_bit | 投稿日時: 2011/2/27 21:12
rabbit_bit

基本的に引用しているとおりで動作するのではないでしょうか?
index.phpに追記+テンプレートを編集。

    投票(0)

    新しいものから | 古いものから | RSS feed
     
    To Top