📄 search_func.php
字号:
<?php//******************************************************//
// ///////// //// /////
// // // // // //
// // ///// ////// //// ////
// // // //// // // // //
// ///////// ///// ////// ///// /////
//******************************************************//
// icebb.net // 1.0
//******************************************************//
// search functions class
// $Id: search_func.php 563 2006-10-22 02:31:31Z mutantmonkey0 $
//******************************************************//class search_func extends search{ var $search; var $add_to_url; var $per_page; var $fulltext; function search_func($meine_lieblingsmutter) // O_O { global $post_parser; $this->search = $meine_lieblingsmutter; $this->start = $this->search->start; $this->per_page = $this->search->per_page; } function do_search_forum($query,$author) { } function do_search() { global $icebb,$db,$std,$timer,$post_parser; $ret = array(); if(empty($icebb->input['search_id'])) { if($this->fulltext == 0) { $can_fulltext = 0; } else { $mysql_version = $db->get_version(); if($mysql_version >= 32323) { $can_fulltext = 1; } else { $can_fulltext = 0; } if($mysql_version >= 40010) { $ftext_boolean = " IN BOOLEAN MODE"; } } $query = trim($icebb->input['q']); //////////////////////////////////////////////////////// // Used everywhere //////////////////////////////////////////////////////// $where_clauses = array(); // are we searching in a specific forum? if(is_array($icebb->input['search_forums'])) { foreach($icebb->input['search_forums'] as $k => $v) { $forums[$k] = intval($v); } $forums = implode(',',$forums); } if(!empty($forums)) { $where_clauses[] = "t.forum IN ({$forums})"; } // prevent passworded things from showing up $where_clauses[] = "f.password=''"; // are we searching for topics or posts? if($icebb->input['search_limit_post_type'] == 'topics') { $where_clauses[] = "p.pis_firstpost=1"; } // limit date if($icebb->input['search_limit_how_long_ago'] > 0) { $subtract = intval($icebb->input['search_limit_how_long_ago'])*86400; $start_date = time()-$subtract; $where_clauses[] = "p.pdate>={$start_date}"; } //////////////////////////////////////////////////////// // Special cases //////////////////////////////////////////////////////// // searching for a user? $icebb->input['search_user']= trim($icebb->input['search_user']); if(!empty($icebb->input['search_user'])) { $db->query("SELECT id FROM icebb_users WHERE username='{$icebb->input['search_user']}'"); $id = $db->fetch_row(); if($db->get_num_rows() <= 0) { return false; } $where_clauses[] = "p.pauthor_id={$id['id']}"; } // searching in a topic? if(!empty($icebb->input['topic'])) { $where_clauses[] = "p.ptopicid='{$icebb->input['topic']}'"; } if(count($where_clauses) >= 1) { $extra_where = "AND ".implode(' AND ',$where_clauses); } else if(empty($query)) { // wtf are you trying to do... you can't view EVERY post... return false; } if($can_fulltext == 1) { $total_query = " SELECT COUNT(*) as total FROM icebb_posts AS p LEFT JOIN icebb_topics AS t ON p.ptopicid=t.tid LEFT JOIN icebb_forums AS f ON f.fid=t.forum WHERE MATCH (ptext) AGAINST('{$query}'{$ftext_boolean}) {$extra_where} "; $orderby = "score DESC"; $t3h_query = " SELECT p.*,t.*,f.perms,MATCH (p.ptext) AGAINST('{$query}') as score FROM icebb_posts AS p LEFT JOIN icebb_topics AS t ON p.ptopicid=t.tid LEFT JOIN icebb_forums AS f ON f.fid=t.forum WHERE MATCH (p.ptext) AGAINST('{$query}'{$ftext_boolean}) {$extra_where} ORDER BY {$orderby}{$this->qextra}"; } else { $total_query = " SELECT COUNT(*) as total FROM icebb_posts AS p LEFT JOIN icebb_topics AS t ON p.ptopicid=t.tid LEFT JOIN icebb_forums AS f ON f.fid=t.forum WHERE ptext LIKE '%{$query}%' {$extra_where} "; $t3h_query = " SELECT p.*,t.*,f.perms,MATCH (p.ptext) AGAINST('{$query}') as score FROM icebb_posts AS p LEFT JOIN icebb_topics AS t ON p.ptopicid=t.tid LEFT JOIN icebb_forums AS f ON f.fid=t.forum WHERE p.ptext LIKE '%{$query}%' {$extra_where} {$this->qextra}"; } $total_query = preg_replace('`\s+`',' ',trim($total_query)); $teh_query = preg_replace('`\s+`',' ',trim($t3h_query)); $db->query($total_query); $result_count = $db->fetch_row(); if($result_count['total'] == 0) { if($can_fulltext == 1) { $this->fulltext = 0; return $this->do_search(); } else { return false; } } $search_id = md5(uniqid(microtime(),1)); /*if($db->get_num_rows($t3h_query)<= 0) { $query = preg_replace("#[\+\?\*]#",'',$query); }*/ $db->insert('icebb_search_results',array( 'search_id' => $search_id, 'search_query' => $query, 'topic_ids' => '', 'topic_num' => $result_count['total'], 'post_ids' => '', 'search_date' => time(), 'search_uid' => $icebb->user['id'], 'search_uip' => $icebb->client_ip, 'search_sort' => $orderby, 'search_query_cache' => addslashes($t3h_query), )); $std->redirect("{$icebb->base_url}act=search{$this->add_to_url}&search_id={$search_id}"); exit(); } else { $search_id = $icebb->input['search_id']; $start = $this->start; $db->query("SELECT * FROM icebb_search_results WHERE search_id='{$search_id}'"); $search = $db->fetch_row(); $search_query = $search['search_query_cache']; // time it $timer->start('search'); // run query $db->query($search_query." LIMIT {$start},{$this->per_page}"); // stop timing it $search_time = $timer->stop('search'); while($p = $db->fetch_row()) { $p['perms'] = unserialize($p['perms']); if($p['perms'][$icebb->user['g_permgroup']]['read']=='1') { $icebb->config['date_format_post'] = 'l, F j, Y @ g:i A'; $icebb->config['date_format_joindate']= 'F j, Y'; $p['pdate_formatted'] = date($icebb->config['date_format_post'],$p['pdate']+$std->get_offset()); $p['joindate_formatted'] = date($icebb->config['date_format_joindate'],$p['joindate']+$std->get_offset()); //$p['ptext'] = substr($post_parser->parse($p['ptext'],$p),0,255).'...'; $p['ptext'] = $post_parser->parse($p['ptext']); $search_results[] = $p; } } $ret['start'] = $start; $ret['search_id'] = $search_id; $ret['search_query'] = $search['search_query']; $ret['topic_num'] = $search['topic_num']; $ret['search_time'] = $search_time; $ret['posts'] = $search_results; } return $ret; }}?>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -