この記事は既に古いです。最新版のXOOPSではこの通りにならないかもしれません。参考にとどめてください。

各モジュールのディレクトリの中にある、xoops_version.php

// Search
$modversion['hasSearch'] = 1;
$modversion['search']['file'] = "include/search.inc.php";
$modversion['search']['func'] = "news_search";

(NEWSモジュールから抜粋)
といった表記があると、そのモジュールは検索機能をもっていることになる。
$modversion['search']['file']に検索機能の定義(関数)が書いてあるファイルを指定し、$modversion['search']['func']に実際の検索をする関数名を書き込む。

この関数は、XOOPS_ROOT_PATH/search.phpからXoopsModule->search経由で呼び出される。
XoopsModuleはXOOPS_ROOT_PATH/class/xoopsmodule.phpで定義されている。

ということで、

XOOPS_ROOT_PATH/modules/sections/xoops_version.php に
---
// Search
$modversion['hasSearch'] = 1;
$modversion['search']['file'] = "include/search.inc.php";
$modversion['search']['func'] = "section_search";

という3行を追加

XOOPS_ROOT_PATH/modules/sections/include というディレクトリを掘って

<?
function section_search($queryarray, $andor, $limit, $offset, $userid) {
global $xoopsDB;

$sql = "SELECT artid,secid,title,content FROM ".$xoopsDB->prefix("seccont");

// because count() returns 1 even if a supplied variable
// is not an array, we must check if $querryarray is really an array
if ( is_array($queryarray) && $count = count($queryarray) ) {
$sql .= " WHERE ((title LIKE '%$queryarray[0]%' OR content LIKE '%$queryarray[0]%')";
for($i=1;$iquery($sql,$limit,$offset);
$ret = array();
$i = 0;
while($myrow = $xoopsDB->fetchArray($result)){
// $ret[$i]['image'] = "images/forum.gif";
$ret[$i]['link'] = "index.php?op=viewarticle&artid=".$myrow['artid']."";
$ret[$i]['title'] = $myrow['title'];
// $ret[$i]['time'] = $myrow['created'];
// $ret[$i]['uid'] = $myrow['uid'];
$i++;
}
return $ret;
}
?>

これで、セクション(特集記事)も検索対象となるはず。ただ、こういったモジュールに対する変更を行った場合は、システム管理メニューのモジュールで「アップデート」を行わないと反映されないので注意。実際にこの記事を書いていて気がついたことだけどセクションでは、・書いた人がわからない・書いた日付が残らない・コメントがつけられないという点がちょっと使いにくい感じ。また、・新着セクションをトップページに表示したいという要望も出てきた。「ニュースではない記事」ということで、ニュースと扱いを変えたい記事をセクションに納めるという方針で使うには結構改造が必要かもしれない。別モジュールとして作った方がいいかも。ソース見て気がついた点としては、セクションモジュール自体は結構簡単な構成なので、モジュールのお手本にいい感じですね。

-----------------------------------------

commented by mack

ちぇす mackっす

if ( is_array($queryarray) && $count = count($queryarray) ) {
$sql .= " WHERE title LIKE '%$queryarray[0]%' OR content LIKE '%$queryarray[0]%'";
}
$result = $xoopsDB->query($sql,$limit,$offset);
$ret = array();


じゃないと動かないですぜ>旦那集

全角の$xoopsDBんところは半角にしてくんなまし。
# サニタイズにかかるみたいなんで

 

-----------------------------------------

commented by meow

ありゃ、しかも記事中のif文の{が閉じてないっすね。
どっかでxoopsのバージョンアップしたときの移行ミスみたいっす。
フォローThx>mack


Contents