• 0
  • 0

支持搜索文本按时间筛选

2021-03-10 1081 0 admin 所属分类:Discuz

原DZ 搜索支持 按照指定日期筛选帖子 如 一周内的帖子

但是 指定了时间就没有办法输入关键字匹配 输入关键字匹配按日期筛选又会搜索失效


现在改动如下文件


htm 模板文件

template\default\search\forum.htm

<input type="hidden" name="formhash" value="{FORMHASH}" />

在 改行后面添加如下代码 

<input type="hidden" name="check_searchid" value="{$_GET['searchid']}" />

让程序临时记录上次搜索的行为 如果涉及到时间筛选且搜索文本与当前文本不一致的就执行重定向操作


在 template\default\search\pubsearch.htm 文件中

<!--{if CURMODULE == 'forum'}-->
 <ul id="quick_sch_menu" class="p_pop" style="display: none;">
  <li><a href="search.php?mod=forum&srchfrom=3600&searchsubmit=yes">{lang search_quick_hour_1}</a></li>
  <li><a href="search.php?mod=forum&srchfrom=14400&searchsubmit=yes">{lang search_quick_hour_4}</a></li>
  <li><a href="search.php?mod=forum&srchfrom=28800&searchsubmit=yes">{lang search_quick_hour_8}</a></li>
  <li><a href="search.php?mod=forum&srchfrom=86400&searchsubmit=yes">{lang search_quick_hour_24}</a></li>
  <li><a href="search.php?mod=forum&srchfrom=604800&searchsubmit=yes">{lang search_quick_day_7}</a></li>
  <li><a href="search.php?mod=forum&srchfrom=2592000&searchsubmit=yes">{lang search_quick_day_30}</a></li>
  <li><a href="search.php?mod=forum&srchfrom=15552000&searchsubmit=yes">{lang search_quick_day_180}</a></li>
  <li><a href="search.php?mod=forum&srchfrom=31536000&searchsubmit=yes">{lang search_quick_day_365}</a></li>
 </ul>
<!--{/if}-->

修改为 

<!--{if CURMODULE == 'forum'}-->
 <ul id="quick_sch_menu" class="p_pop" style="display: none;">
  <li><a href="search.php?mod=forum&srchfrom=3600&searchsubmit=yes&srchtxt={$_GET['kw']}">{lang search_quick_hour_1}</a></li>
  <li><a href="search.php?mod=forum&srchfrom=14400&searchsubmit=yes&srchtxt={$_GET['kw']}">{lang search_quick_hour_4}</a></li>
  <li><a href="search.php?mod=forum&srchfrom=28800&searchsubmit=yes&srchtxt={$_GET['kw']}">{lang search_quick_hour_8}</a></li>
  <li><a href="search.php?mod=forum&srchfrom=86400&searchsubmit=yes&srchtxt={$_GET['kw']}">{lang search_quick_hour_24}</a></li>
  <li><a href="search.php?mod=forum&srchfrom=604800&searchsubmit=yes&srchtxt={$_GET['kw']}">{lang search_quick_day_7}</a></li>
  <li><a href="search.php?mod=forum&srchfrom=2592000&searchsubmit=yes&srchtxt={$_GET['kw']}">{lang search_quick_day_30}</a></li>
  <li><a href="search.php?mod=forum&srchfrom=15552000&searchsubmit=yes&srchtxt={$_GET['kw']}">{lang search_quick_day_180}</a></li>
  <li><a href="search.php?mod=forum&srchfrom=31536000&searchsubmit=yes&srchtxt={$_GET['kw']}">{lang search_quick_day_365}</a></li>
 </ul>
<!--{/if}-->

保证超链接能记住最近搜索的文本 快速跳转

id="scform_srchtxt" 的input元素添加 onblur事件

<input type="text" id="scform_srchtxt" name="srchtxt" size="45" maxlength="40" value="$keyword" tabindex="1" onblur ="modifyQuickSet(this)" x-webkit-speech speech />
<script type="text/javascript">
 function modifyQuickSet(e){
  var rs = document.getElementById('scform_srchtxt').value;
  var els = document.getElementById('quick_sch_menu').getElementsByTagName('a')
  for(var i = 0; i<els.length;i++) {
   els[i].href = els[i].href.replace(/srchtxt=(.+)/,"srchtxt="+rs)
  }
 }
</script>

文件 template\default\search\thread_list.htm 添加最后更新时间字段提示  

<p class="xg1">$thread[replies] {lang a_comment_thread} - $thread[views] {lang a_visit}</p>

改为 

<p class="xg1">$thread[replies] {lang a_comment_thread} - $thread[views] {lang a_visit}  - {lang lastupdate} $thread[lastpost] </p>

PHP 文件修改

source\module\search\search_forum.php

if ($_G['group']['allowsearch'] & 32 && $srchtype == 'fulltext') {
    periodscheck('searchbanperiods');
} elseif ($srchtype != 'title') {
    $srchtype = 'title';
}

在代码前面补上如下代码  

//判断是否 有  check_searchid
if (is_numeric($_GET['check_searchid'])) {
    if ($search_index = C::t('common_searchindex')->fetch($_GET['check_searchid'])) {
        $result_searchstring = explode("|", $search_index['searchstring']);
        $result_srchfrom = intval($result_searchstring[6]);
        $result_srchtxt = base64_decode($result_searchstring[2]);
        if ($result_srchfrom && $_GET['srchtxt'] != $result_srchtxt) {
            dheader("location: search.php?mod=forum&srchfrom={$result_srchfrom}&searchsubmit=yes&srchtxt={$_GET['srchtxt']}");
        }
    }
}

每一次检测搜索索引表 是否有做时间排序 有的话默认为时间排序  


 

 

 

返回顶部