XOOPS Cube日本サイト (タグ: 複数キーワード検索) http://dev.xoopscube.jp/tag/%E8%A4%87%E6%95%B0%E3%82%AD%E3%83%BC%E3%83%AF%E3%83%BC%E3%83%89%E6%A4%9C%E7%B4%A2 最新公開記事 xoopsmembersモジュールで複数キーワード検索(AND検索)をしたい。 http://dev.xoopscube.jp/forum/6822 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('フリーワード', " ");   $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;     }   } 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;
     }
   }]]>
hiron2425 2011-02-27T19:34+09:00 モジュール開発