$search_form->addElement(new XoopsFormButton("", "submit", _SR_SEARCH, "submit"));
return $search_form->render(); // 由Lankford于2007/7/26添加。
?>
$modversion['templates'][15]['description'] = '仅为自定义块或没有模板的块提供的占位符模板';
$modversion['templates'][16]['file'] = 'system_search.html';
$modversion['templates'][16]['description'] = 'Xoops搜索页的Smarty模板。';
// 块
<h3>"<{$search_type}>" <{$label_search_results}>: <{$showing}>h3>
<{$label_keywords}>
<strong>
<{* This section generates a space separated list of keywords that were searched. *}>
<{section name=cur_kw_searched loop=$searched_keywords}>
<{$searched_keywords[cur_kw_searched]}><{if $smarty.section.cur_kw_searched.index <> $smarty.section.cur_kw_searched.total}> <{/if}>
<{/section}>
strong>
<br />
<{$label_ignored_keywords}>
<strong>
<{* This section generates a space separated list of keywords that were NOT searched. *}>
<{section name=cur_kw_not_searched loop=$ignored_keywords}>
<{$ignored_keywords[cur_kw_not_searched]}><{if $smarty.section.cur_kw_not_searched.index <> $smarty.section.cur_kw_not_searched.total}> <{/if}>
<{/section}>
strong>
<br />
<{*
This section generates a search results that mimic Xoops' original search.php results.
Note: The results are sorted. Modules with higher hit counts are located on the page
above modules with lower hit counts.
*}>
<{* This section has been commented out in favor of the 'table' version located below...
<{foreach from=$module_sort_order key=sort_key item=sort_value}>
<{$sort_key}>: (<{$sort_value}> hits returned)
<{section name=cur_result loop=$search_results[$sort_key].results}>
<{if $smarty.section.cur_result.index > 0}>
<{/if}>
" src="<{$search_results[$sort_key].results[cur_result].processed_image_url}>" />
<{$search_results[$sort_key].results[cur_result].processed_image_tag}>
"><{$search_results[$sort_key].results[cur_result].processed_title}>
"><{$search_results[$sort_key].results[cur_result].processed_user_name}> <{$search_results[$sort_key].results[cur_result].processed_time}>
<{/section}>
"><{$search_results[$sort_key].search_more_title}>
<{/foreach}>
*}>
<{*
This section generates a search results and places them into tables using the standard
Xoops style tags for table formatting.
Note: The results are sorted. Modules with higher hit counts are located on the page
above modules with lower hit counts.
*}>
<{foreach from=$module_sort_order key=sort_key item=sort_value}>
// $Id: search.php 506 2006-05-26 23:10:37Z skalpa $
// ------------------------------------------------------------------------ //
// XOOPS - PHP Content Management System //
// Copyright (c) 2000 XOOPS.org //
// //
// ------------------------------------------------------------------------ //
// This program is free software; you can redistribute it and/or modify //
// it under the terms of the GNU General Public License as published by //
// the Free Software Foundation; either version 2 of the License, or //
// (at your option) any later version. //
// //
// You may not change or alter any portion of this comment or credits //
// of supporting developers from this source code or any supporting //
// source code which is considered copyrighted (c) material of the //
// original comment or credit authors. //
// //
// This program is distributed in the hope that it will be useful, //
// but WITHOUT ANY WARRANTY; without even the implied warranty of //
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
// GNU General Public License for more details. //
// //
// You should have received a copy of the GNU General Public License //
// along with this program; if not, write to the Free Software //
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA //
// ------------------------------------------------------------------------ //
$xoopsOption['pagetype'] = "search";
include 'mainfile.php';
$xoopsOption['template_main'] = 'system_search.html';
$config_handler =& xoops_gethandler('config');
$xoopsConfigSearch =& $config_handler->getConfigsByCat(XOOPS_CONF_SEARCH);
if ($xoopsConfigSearch['enable_search'] != 1) {
header('Location: '.XOOPS_URL.'/index.php');
exit();
}
include XOOPS_ROOT_PATH.'/header.php';
$action = "search";
if (!empty($_GET['action'])) {
$action = $_GET['action'];
} elseif (!empty($_POST['action'])) {
$action = $_POST['action'];
}
$query = "";
if (!empty($_GET['query'])) {
$query = $_GET['query'];
} elseif (!empty($_POST['query'])) {
$query = $_POST['query'];
}
$andor = "AND";
if (!empty($_GET['andor'])) {
$andor = $_GET['andor'];
} elseif (!empty($_POST['andor'])) {
$andor = $_POST['andor'];
}
$mid = $uid = $start = 0;
if ( !empty($_GET['mid']) ) {
$mid = intval($_GET['mid']);
} elseif ( !empty($_POST['mid']) ) {
$mid = intval($_POST['mid']);
}
if (!empty($_GET['uid'])) {
$uid = intval($_GET['uid']);
} elseif (!empty($_POST['uid'])) {
$uid = intval($_POST['uid']);
}
if (!empty($_GET['start'])) {
$start = intval($_GET['start']);
} elseif (!empty($_POST['start'])) {
$start = intval($_POST['start']);
}
$xoopsTpl->assign("start", $start + 1);
$queries = array();
if ($action == "recoosults") {
if ($query == "") {
redirect_header("search.php",1,_SR_PLZENTER);
exit();
}
} elseif ($action == "showall") {
if ($query == "" || empty($mid)) {
redirect_header("search.php",1,_SR_PLZENTER);
exit();
}
} elseif ($action == "showallbyuser") {
if (empty($mid) || empty($uid)) {
redirect_header("search.php",1,_SR_PLZENTER);
exit();
}
}
$groups = is_object($xoopsUser) ? $xoopsUser -> getGroups() : XOOPS_GROUP_ANONYMOUS;
$gperm_handler = & xoops_gethandler( 'groupperm' );
$available_modules = $gperm_handler->getItemIds('module_read', $groups);
if ($action == 'search') {
// This area seems to handle the 'just display the advanced search page' part.
$search_form = include 'include/searchform.php';
$xoopsTpl->assign('search_form', $search_form);
include XOOPS_ROOT_PATH.'/footer.php';
exit();
}
if ( $andor != "OR" && $andor != "exact" && $andor != "AND" ) {
$andor = "AND";
}
$xoopsTpl->assign("search_type", $andor);
$myts =& MyTextSanitizer::getInstance();
if ($action != 'showallbyuser') {
if ( $andor != "exact" ) {
$ignored_queries = array(); // holds kewords that are shorter than allowed minmum length
$temp_queries = preg_split('/[s,]+/', $query);
foreach ($temp_queries as $q) {
$q = trim($q);
if (strlen($q) >= $xoopsConfigSearch['keyword_min']) {
$queries[] = $myts->addSlashes($q);
} else {
$ignored_queries[] = $myts->addSlashes($q);
}
}
if (count($queries) == 0) {
redirect_header('search.php', 2, sprintf(_SR_KEYTOOSHORT, $xoopsConfigSearch['keyword_min']));
exit();
}
} else {
$query = trim($query);
if (strlen($query) < $xoopsConfigSearch['keyword_min']) {
redirect_header('search.php', 2, sprintf(_SR_KEYTOOSHORT, $xoopsConfigSearch['keyword_min']));
exit();
}
$queries = array($myts->addSlashes($query));
}
}
$xoopsTpl->assign("label_search_results", _SR_SEARCHRESULTS);
// Keywords section.
$xoopsTpl->assign("label_keywords", _SR_KEYWORDS . ':');
$keywords = array();
$ignored_keywords = array();
foreach ($queries as $q) {
$keywords[] = htmlspecialchars(stripslashes($q));
}
if (!empty($ignored_queries)) {
$xoopsTpl->assign("label_ignored_keywords", sprintf(_SR_IGNOREDWORDS, $xoopsConfigSearch['keyword_min']));
foreach ($ignored_queries as $q) {
$ignored_keywords[] = htmlspecialchars(stripslashes($q));
}
$xoopsTpl->assign("ignored_keywords", $ignored_keywords);
}
$xoopsTpl->assign("searched_keywords", $keywords);
$all_results = array();
$all_results_counts = array();
switch ($action) {
case "results":
$module_handler =& xoops_gethandler('module');
$criteria = new CriteriaCompo(new Criteria('hassearch', 1));
$criteria->add(new Criteria('isactive', 1));
$criteria->add(new Criteria('mid', "(".implode(',', $available_modules).")", 'IN'));
$modules =& $module_handler->getObjects($criteria, true);
$mids = isset($_REQUEST['mids']) ? $_REQUEST['mids'] : array();
if (empty($mids) || !is_array($mids)) {
unset($mids);
$mids = array_keys($modules);
}
foreach ($mids as $mid) {
$mid = intval($mid);
if ( in_array($mid, $available_modules) ) {
$module =& $modules[$mid];
$results =& $module->search($queries, $andor, 5, 0);
$xoopsTpl->assign("showing", sprintf(_SR_SHOWING, 1, 5));
$count = count($results);
$all_results_counts[$module->getVar('name')] = $count;
if (!is_array($results) || $count == 0) {
$all_results[$module->getVar('name')] = array();
} else {
for ($i = 0; $i < $count; $i++) {
$results[$i]['processed_image_alt_text'] = $myts->makeTboxData4Show($module->getVar('name')) . ": ";
if (isset($results[$i]['image']) && $results[$i]['image'] != "") {
$results[$i]['processed_image_url'] = "modules/" . $module->getVar('dirname') . "/" . $results[$i]['image'];
} else {
$results[$i]['processed_image_url'] = "images/icons/posticon2.gif";
}
if (!preg_match("/^http[s]*:///i", $results[$i]['link'])) {
$results[$i]['link'] = "modules/".$module->getVar('dirname')."/".$results[$i]['link'];
}
$results[$i]['processed_title'] = $myts->makeTboxData4Show($results[$i]['title']);
$results[$i]['uid'] = @intval($results[$i]['uid']);
if ( !empty($results[$i]['uid']) ) {
$uname = XoopsUser::getUnameFromId($results[$i]['uid']);
$results[$i]['processed_user_name'] = $uname;
$results[$i]['processed_user_url'] = XOOPS_URL."/userinfo.php?uid=".$results[$i]['uid'];
}
$results[$i]['processed_time'] = !empty($results[$i]['time']) ? " (". formatTimestamp(intval($results[$i]['time'])).")" : "";
}
if ( $count >= 5 ) {
$search_url = XOOPS_URL.'/search.php?query='.urlencode(stripslashes(implode(' ', $queries)));
$search_url .= "&mid=$mid&action=showall&andor=$andor";
} else {
$search_url = "";
}
$all_results[$module->getVar('name')] = array("search_more_title" => _SR_SHOWALLR,
"search_more_url" => htmlspecialchars($search_url),
"search_next_title" => "",
"search_next_url" => "",
"search_prev_title" => "",
"search_prev_url" => "",
"results" =>$results);
}
}
unset($results);
unset($module);
}
break;
case "showall":
case 'showallbyuser':
$module_handler =& xoops_gethandler('module');
$module =& $module_handler->get($mid);
$results =& $module->search($queries, $andor, 20, $start, $uid);
$xoopsTpl->assign("showing", sprintf(_SR_SHOWING, $start + 1, $start + 20));
$count = count($results);
$all_results_counts[$module->getVar('name')] = $count;
if (is_array($results) && $count > 0) {
$next_results =& $module->search($queries, $andor, 1, $start + 20, $uid);
$next_count = count($next_results);
$has_next = false;
if (is_array($next_results) && $next_count == 1) {
$has_next = true;
}
for ($i = 0; $i < $count; $i++) {
$results[$i]['processed_image_alt_text'] = $myts->makeTboxData4Show($module->getVar('name')) . ": ";
if (isset($results[$i]['image']) && $results[$i]['image'] != "") {
$results[$i]['processed_image_url'] = "modules/" . $module->getVar('dirname') . "/" . $results[$i]['image'];
} else {
$results[$i]['processed_image_url'] = "images/icons/posticon2.gif";
}
if (!preg_match("/^http[s]*:///i", $results[$i]['link'])) {
$results[$i]['link'] = "modules/".$module->getVar('dirname')."/".$results[$i]['link'];
}
$results[$i]['processed_title'] = $myts->makeTboxData4Show($results[$i]['title']);
$results[$i]['uid'] = @intval($results[$i]['uid']);
if ( !empty($results[$i]['uid']) ) {
$uname = XoopsUser::getUnameFromId($results[$i]['uid']);
$results[$i]['processed_user_name'] = $uname;
$results[$i]['processed_user_url'] = XOOPS_URL."/userinfo.php?uid=".$results[$i]['uid'];
}
$results[$i]['processed_time'] = !empty($results[$i]['time']) ? " (". formatTimestamp(intval($results[$i]['time'])).")" : "";
}
$search_url_prev = "";
$search_url_next = "";
$search_url = XOOPS_URL.'/search.php?query='.urlencode(stripslashes(implode(' ', $queries)));
$search_url .= "&mid=$mid&action=$action&andor=$andor";
if ($action=='showallbyuser') {
$search_url .= "&uid=$uid";
}
if ( $start > 0 ) {
$prev = $start - 20;
$search_url_prev = $search_url."&start=$prev";
}
if (false != $has_next) {
$next = $start + 20;
$search_url_next = $search_url."&start=$next";
}
$all_results[$module->getVar('name')] = array("search_more_title" => "",
"search_more_url" => "",
"search_next_title" => _SR_NEXT,
"search_next_url" => htmlspecialchars($search_url_next),
"search_prev_title" => _SR_PREVIOUS,
"search_prev_url" => htmlspecialchars($search_url_prev),
"results" =>$results);
} else {
echo ''._SR_NOMATCH.'
';
}
break;
}
arsort($all_results_counts);
$xoopsTpl->assign("module_sort_order", $all_results_counts);
$xoopsTpl->assign("search_results", $all_results);
$search_form = include 'include/searchform.php';
$xoopsTpl->assign('search_form', $search_form);
include XOOPS_ROOT_PATH."/footer.php";
?>
将模板system_search.html插入到数据库中。模板system_search.html已重新编译。
|
对搜索结果页的修改?
你好,
我阅读了本站关于“搜索”功能的几个常见问题/论坛主题,但没有找到任何相关的答案。我网站的的大部分内容都在WebLinks模块中。我需要修改搜索结果,使其包含标题以及简短摘要(就像谷歌、雅虎等)和显示当前用户的网页链接评分。
有人能告诉我这样做是否可行以及难度如何?此外,我们是否有其他更好的搜索引擎供我们的XOOPS网站使用的选择?
我也愿意付费让人帮我做这个修改。请联系我私聊。
谢谢。
Abu