файл
language/russian/lang_admin_all.php
CODE:/*
search in topic
*/
$this->LANG['SearchInTopic'] = 'Поиск в теме';
$this->LANG['SearchInText'] = 'Искать в тексте';
$this->LANG['SearchParams'] = 'Параметры поиска';
$this->LANG['SearchParamsAND'] = 'т.е. в тексте должны присутствовать все искомые слова';
$this->LANG['SearchParamsOR'] = 'т.е. в тексте может присутствовать любое из искомых слов';
$this->LANG['SearchAuthor'] = 'Автор сообщения';
$this->LANG['SearchOptions'] = 'Дополнительно';
$this->LANG['SearchColor'] = 'выделять цветом найденные слова';
$this->LANG['StartSearch'] = 'Начать поиск!';
$this->LANG['SearchNoParams'] = 'Не заданы параметры поиска!';
$this->LANG['SearchNotFound'] = 'Не найдено соответствий Вашему запросу';
$this->LANG['SearchTotalFound'] = 'Найдено сообщений: ';
/*
search new posts
*/
$this->LANG['NoNewPosts'] = 'Нет новых сообщений с последнего Вашего визита на форум';
$this->LANG['SearchTotalTopics'] = 'Найдено тем:';
$this->LANG['Topics'] = 'Темы';
$this->LANG['Forum'] = 'Форум';
$this->LANG['TopicInfo'] = 'Информация о теме';
$this->LANG['TopicOpenNew'] = 'Открытая тема (есть новые сообщения)';
$this->LANG['TopicOpenNoNew'] = 'Открытая тема (нет новых сообщений)';
$this->LANG['TopicHotNew'] = 'Популярная тема (есть новые сообщения)';
$this->LANG['TopicHotNoNew'] = 'Популярная тема (нет новых сообщений)';
$this->LANG['TopicClosed'] = 'Закрытая тема';
$this->LANG['TopicMoved'] = 'Тема закрыта и перемещена';
$this->LANG['TopicPinned'] = 'Прикрепленная тема';
$this->LANG['TopicAuthor'] = 'Автор темы';
/*
search
*/
$this->LANG['INALL'] = 'Везде';
$this->LANG['QUERY'] = 'Запрос';
$this->LANG['KEYWORDS'] = 'Ключевые слова';
$this->LANG['SEARCHIN'] = 'Где искать';
$this->LANG['KEYWORDSDESC'] = 'Язык запросов<br />Ключевые слова в поле ввода разделяются пробелом или запятой. Регистр не имеет значения. Режим поиска "AND" ("И") означает, что будут найдены только те данные, где встречается каждое из ключевых слов. При использовании режима "OR" ("ИЛИ") результатом поиска будут все файлы, где встречается хотя бы одно ключевое слово. В любом режиме знак "+" перед ключевым словом означает, что данное ключевое слово должно присутствовать в найденных файлах. Если вы хотите исключить какое-либо слово из поиска, поставьте перед ним знак "-". Например: "+толстой -алексей". По умолчанию скрипт ищет все данные, которые начинаются с введенной вами строки. Например, при запросе "город" будут найдены слова "город", "городок", "городской" и многие другие. Восклицательный знак после ключевого слова означает, что будут найдены только слова точно соответствующие запросу ("город!").';
$this->LANG['SEARCHNOPARAM'] = 'Не заданы параметры поиска! Либо запрос короче четырёх символов!';
$this->LANG['SEARCHERROR'] = 'Ошибка инициализации поиска!';
$this->LANG['SEARCHCOMPLT'] = 'Поиск завершён';
$this->LANG['SEARCHNO'] = 'По Вашему запросу ничего не найдено.';
$this->LANG['SEARCHRESULT'] = 'Обработка запроса выполнена.<br>Найдено тем: %d<br>Ожидайте результаты.';
$this->LANG['PRINTRESULT'] = 'Результаты поиска';
$this->LANG['YOUSEARCH'] = '<br>Вы искали "<b>%s</b>"<br>Красным выделены короткие слова, исключенные из поиска<br>';
заменено на :
CODE:/* Search */
$this->LANG['SearchConfig'] = 'Настройка поиска';
$this->LANG['SearchURLTitle'] = 'Настройки URL, на которых будет производиться поиск<br /><small>Для удаления какой-либо зоны поиска надо очистить оба поля ( и URL и имя вкладки ) для удаляемой зоны.</small>';
$this->LANG['SearchURL'] = 'URL для поиска';
$this->LANG['SearchTabTitle'] = 'Заголовок на вкладке';
$this->LANG['SearchApiKeyText'] = 'API-ключ для поиска. Необязательно, но рекомендуется для серьезных сайтов и сайтов с большой посещаемостью. <a href="http://code.google.com/intl/ru-RU/apis/ajaxsearch/key.html" target="_blank" title="Страница Goole">Описание</a> <a href="http://code.google.com/intl/ru-RU/apis/ajaxsearch/signup.html" target="_blank" title="Страница Goole">Получить</a>';
$this->LANG['SearchImgSet'] = 'Настройки поиска картинок';
$this->LANG['SearchImgAppr'] = 'Поиск картинок';
$this->LANG['SearchImgURL'] = 'URL на котором производится поиск картинок';
$this->LANG['SearchImgTab'] = 'Подзаголовок на вкладке с результатами поиска картинок';
$this->LANG['SearchColorConfig']= 'Настройка цветовой гаммы<br /><small>Если поле цвета оставить пустым - будет прозрачный</small>';
$this->LANG['SearchTEXT'] = 'Цвет текста на странице поиска';
$this->LANG['SearchLINK'] = 'Цвет ссылки';
$this->LANG['SearchTEXTLIGHT'] = 'Цвет дополнительного, второстепенного текста';
$this->LANG['SearchTABACTIVETXT']= 'Цвет текста заголовка на текущей вкладке';
$this->LANG['SearchTABACTIVEBG']= 'Фоновый цвет текущей вкладки';
$this->LANG['SearchBORDER'] = 'Цвет рамки у кнопок навигации по страницам';
$this->LANG['SearchBORDERACTIVE']= 'Цвет рамки текущей страницы у кнопки навигации по страницам';
$this->LANG['SearchBACKGROUND'] = 'Фоновый цвет вкладок и кнопок навигации по страницам';
$this->LANG['SearchNewAdd'] = 'Добавить URL для поиска';
$this->LANG['SearchNewURL'] = 'Добавляемый URL для поиска';
$this->LANG['SearchNewTitle'] = 'Заголовок вкладки для добавляемой зоны поиска';
$this->LANG['SearchErZone'] = '<br />Неверно указана одна из зон поиска.';
$this->LANG['SearchErImg'] = '<br />Вы можете отключить поиск картинок, но чтобы в скрипте не было ошибки, требуется обязательно прописать URL и имя вкладки. Отключить можно селектором ВКЛ/ВЫКЛ...';
$this->LANG['SearchErText'] = '<br />Неверно указан цвет текста. Имейте в виду - текст не может быть прозрачным.';
$this->LANG['SearchErCol'] = '<br />Неверно указан фоновый цвет или цвет рамки.';
$this->LANG['SearchErAddUrl'] = '<br />При добавлении зоны поиска не все поля были заполнены.';
файл
admin/nav_bar.tpl
ниже строк
CODE:<tr>
<td class="row1"><span class="genmed"><a href="setbannedip.php" class="genmed">{$fm->LANG['BannedIp']}</a></span></td>
</tr>
добавлено :
CODE:<tr>
<td class="row1"><span class="genmed"><a href="setsearch.php" class="genmed">{$fm->LANG['SearchConfig']}</a></span></td>
</tr>
файл
search.php из корня форума :
ниже строк
CODE:define('IN_EXBB', TRUE);
include('./include/common.php');
добавлено
CODE:if(isset($_GET['forum']) && isset($_GET['topic'])) {
// Получаем заголовок топика:
$tarr=array_shift($fm->_Read('forum'.$_GET['forum'].'/'.$_GET['topic'].'-thd.php'));
$tn=$tarr['name'];
unset($tarr);
$pagetitle='Поиск в теме: '.$tn;
} else {$pagetitle='Поиск';}
function search() {
global $pagetitle;
// Разбираем конфигурацию:
$sconfarr=file(dirname(__FILE__).'/search/search_config.php'); // Путь к файлу конфигурации
for($i=1;$i<count($sconfarr);$i++) {
$csline=trim($sconfarr[$i]);
if(!empty($csline)) {
list($svar,$svalue)=explode('::',$csline);
define($svar,$svalue);
}
}
$srareas = explode('@@', SRAREASTR);
if(APIKEY!=='') {$gakey='?key='.APIKEY;}
else {$gakey='';}
// Определяем переменные для java-скрипта текущей страницы:
if(count($srareas)>1) {
$srchstr='';
for($i=0;$i<count($srareas);$i++) {
list($ssite,$stitle)=explode('||',trim($srareas[$i]));
$srchstr=$srchstr.'
var siteSearch'.$i.' = new google.search.WebSearch();
siteSearch'.$i.'.setUserDefinedLabel("'.$stitle.'");
siteSearch'.$i.'.setSiteRestriction("'.$ssite.'");
searchControl.addSearcher(siteSearch'.$i.', options);'."\r\n\r\n";
}
} else {
list($ssite,$stitle)=explode('||',trim($srareas[0]));
$srchstr='
var siteSearch = new google.search.WebSearch();
siteSearch.setUserDefinedLabel("'.$stitle.'");
siteSearch.setSiteRestriction("'.$ssite.'");
searchControl.addSearcher(siteSearch, options);'."\r\n\r\n";
}
if(!empty($_POST['q'])) {
$sq=trim($_POST['q']);
}
if(IMAGESEARCH==='1') {
$str_scr1='
var siteImgsearch = new google.search.ImageSearch();
siteImgsearch.setUserDefinedLabel("'.SCHTIMGTITLE.'");
siteImgsearch.setSiteRestriction("'.IMAGEURL.'");
searchControl.addSearcher(siteImgsearch, options);';
$str_scr2='siteImgsearch.setResultSetSize(google.search.Search.LARGE_RESULTSET);
';
} else {$str_scr1='';$str_scr2='';}
if(isset($sq)) {$str_scr3='
searchControl.execute("'.$sq.'");
';}
else {$str_scr3='';}
// Строка java-скрипта:
$js_search=$srchstr.$str_scr1.'
searchControl.setResultSetSize(google.search.Search.LARGE_RESULTSET);
'.$str_scr2.'
var drawOptions = new google.search.DrawOptions();
drawOptions.setDrawMode(google.search.SearchControl.DRAW_MODE_TABBED);
searchControl.draw(document.getElementById("searchcontrol"), drawOptions);
'.$str_scr3;
global $fm;
$fm->_Title = ' :: '.$fm->LANG['Search'];
$fm->_Link = "\n".'<link href="search/default.css.php" type="text/css" rel="stylesheet">';
include('./templates/'.DEF_SKIN.'/all_header.tpl');
include('./templates/'.DEF_SKIN.'/logos.tpl');
include('./search/google_search_body.tpl');
include('./templates/'.DEF_SKIN.'/footer.tpl');
}
##############
// Функция поиска в теме:
function intopic() {
//http://exbb.info/community/topic.php?forum=8&topic=118
$url=str_replace('search.php','',$_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF']).'topic.php?forum='.$_GET['forum'].'&topic='.$_GET['topic'];
// Если у Вас установлены ЧПУ, заккоментируйте строку выше этой и раскомментируйте строку под этой строкой
//$url=str_replace('search.php','',$_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF']).'topic'.$_GET['forum'].'-'.$_GET['topic'];
global $pagetitle;
// Разбираем конфигурацию:
$sconfarr=file(dirname(__FILE__).'/search/search_config.php'); // Путь к файлу конфигурации
for($i=1;$i<count($sconfarr);$i++) {
$csline=trim($sconfarr[$i]);
if(!empty($csline)) {
list($svar,$svalue)=explode('::',$csline);
define($svar,$svalue);
}
}
if(APIKEY!=='') {$gakey='?key='.APIKEY;}
else {$gakey='';}
// Определяем переменные для java-скрипта текущей страницы:
$srchstr='
var siteSearch = new google.search.WebSearch();
siteSearch.setUserDefinedLabel("'.$pagetitle.'");
siteSearch.setSiteRestriction("'.$url.'");
searchControl.addSearcher(siteSearch, options);'."\r\n\r\n";
// Строка java-скрипта:
$js_search=$srchstr.'
searchControl.setResultSetSize(google.search.Search.LARGE_RESULTSET);
var drawOptions = new google.search.DrawOptions();
drawOptions.setDrawMode(google.search.SearchControl.DRAW_MODE_TABBED);
searchControl.draw(document.getElementById("searchcontrol"), drawOptions);
';
global $fm;
$fm->_Title = ' :: '.$fm->LANG['Search'];
$fm->_Link = "\n".'<link href="search/default.css.php" type="text/css" rel="stylesheet">';
include('./templates/'.DEF_SKIN.'/all_header.tpl');
include('./templates/'.DEF_SKIN.'/logos.tpl');
include('./search/google_search_body.tpl');
include('./templates/'.DEF_SKIN.'/footer.tpl');
}
из того же файла удалено :
CODE:function intopic() {
global $fm;
$allforums = $fm->_Read(FM_ALLFORUMS);
if (($topic_id = $fm->_Intval('topic')) === 0 || ($forum_id = $fm->_Intval('forum')) === 0 || !isset($allforums[$forum_id])) {
$fm->_Message($fm->LANG['MainMsg'],$fm->LANG['CorrectPost']);
}
$list = $fm->_Read('forum'.$forum_id.'/list.php');
if (!isset($list[$topic_id]) || !file_exists('forum'.$forum_id.'/'.$topic_id.'-thd.php')) {
$fm->_Message($fm->LANG['MainMsg'],$fm->LANG['TopicMiss']);
}
$fm->_Title = ' :: '.$fm->LANG['SearchInTopic'];
include('./templates/'.DEF_SKIN.'/all_header.tpl');
include('./templates/'.DEF_SKIN.'/logos.tpl');
include('./templates/'.DEF_SKIN.'/search_intop.tpl');
include('./templates/'.DEF_SKIN.'/footer.tpl');
}
и
CODE:function search() {
global $fm, $_SEARCH;
$allforums = $fm->_Read(FM_ALLFORUMS);
if ($fm->input['action'] === '') {
$forums = '<option value="-1"> '.$fm->LANG['INALL']."\n";
$last_cat = -1;
foreach ($allforums as $forumid=>$val) {
if (stristr($val['catid'], 'f')) continue;
if (!empty($allforums[$forumid]['private']) && empty($fm->user['private'][$forumid]) && !defined('IS_ADMIN') ||
$allforums[$forumid]['stview'] == 'reged' && !$fm->user['id'] ||
$allforums[$forumid]['stview'] == 'admo' && !defined('IS_ADMIN') && $fm->user['status'] != 'sm' && !isset($allforums[$forumid]['moderators'][$fm->user['id']])) {
continue;
}
if ($val['catid'] != $last_cat) {
$forums .= '<option value="cat:'.$val['catid'].'"> '.$val['catname']."\n";
}
$forums .= '<option value="'.$forumid.'">-- '.$val['name']."\n";
foreach ($allforums as $s_id => $s_val)
if ($s_val['catid'] == 'f'.$forumid)
$forums .= '<option value="'.$s_id.'">---- '.$s_val['name']."\n";
$last_cat = $val['catid'];
}
$fm->_Title = ' :: '.$fm->LANG['Search'];
include('./templates/'.DEF_SKIN.'/all_header.tpl');
include('./templates/'.DEF_SKIN.'/logos.tpl');
include('./templates/'.DEF_SKIN.'/search.tpl');
include('./templates/'.DEF_SKIN.'/footer.tpl');
} elseif ($fm->input['action'] == 'start') {
preg_match_all('/([^a-zA-Zа-яА-ЯёЁ]|^)([a-zA-Zа-яА-ЯёЁ]{4,})(?![a-zA-Zа-яА-ЯёЁ])/',$fm->input['search_keywords'],$key_words);
if (!count($key_words[0])) {
$fm->_Message($fm->LANG['Search'],$fm->LANG['SEARCHNOPARAM']);
}
$key_words = array_unique($key_words[0]);
if (strstr($fm->input['src_in'],'cat')) {
list($in_where,$in_range) = explode(':',$fm->input['src_in']);
} else {
$in_where = 'forum';
$in_range = $fm->input['src_in'];
}
$dir_arr = array();
if ($in_range == -1) {
foreach ($allforums as $forum_id => $forum) {
$dir_arr[$forum_id] = 0;
}
} elseif ($in_where == 'cat') {
foreach ($allforums as $forum_id => $forum) {
if ($in_range == $forum['catid']) {
$dir_arr[$forum_id] = 0;
}
}
} else {
$dir_arr[$in_range] = 0;
}
if (!count($dir_arr)) {
$fm->_Message($fm->LANG['Search'],$fm->LANG['SEARCHERROR']);
}
include('./search/search.php');
$wholeword = $querymode = $query_arr = array();
$_SEARCH['entered_word'] = $fm->input['search_keywords'];
$_SEARCH['search_keywords'] = $fm->input['search_keywords'];
$_SEARCH['stype'] = $fm->input['stype'];
get_query($wholeword,$querymode,$query_arr);
$_SEARCH['entered_word_arr'] = $query_arr;
$_SEARCH['query_statistics'] = '';
$total_found = 0;
if (count($query_arr) > 0) {
$_SEARCH['rescount'] = array();
foreach ($dir_arr as $forum => $trash) {
if (!empty($allforums[$forum]['private']) && empty($fm->user['private'][$forum]) && !defined('IS_ADMIN') ||
$allforums[$forum]['stview'] == 'reged' && !$fm->user['id'] ||
$allforums[$forum]['stview'] == 'admo' && !defined('IS_ADMIN') && $fm->user['status'] != 'sm' && !isset($allforums[$forum]['moderators'][$fm->user['id']])) {
continue;
}
$allres = array();
get_results($forum,$wholeword,$querymode,$query_arr,$allres);
boolean($forum,$query_arr,$querymode,$allres);
$total_found += (isset($_SEARCH['rescount'][$forum])) ? $_SEARCH['rescount'][$forum]:0;
}
if ($total_found) {
$search_id = $newpassword = substr(uniqid(str_shuffle(session_id()), false),mt_rand(0,32),16);
if ($fp = @fopen('search/temp/'.$search_id,'wb')) {
$fm->_FilePointers[$fp] = $fp;
$fm->_Write($fp,$_SEARCH);
}
$fm->_Message($fm->LANG['SEARCHCOMPLT'],sprintf($fm->LANG['SEARCHRESULT'],$total_found),'search.php?action=next&search_id='.$search_id);
} else {
$fm->_Message($fm->LANG['SEARCHCOMPLT'],$fm->LANG['SEARCHNO']);
}
} else {
$fm->_Message($fm->LANG['Search'],$fm->LANG['SEARCHNOPARAM']);
}
} elseif ($fm->input['action'] == 'next') {
include('./search/search.php');
clear_dir_from_expired_files();
$search_id = $fm->_String('search_id');
if (!$search_id || !file_exists('search/temp/'.$search_id)) {
$fm->_Message($fm->LANG['Search'],$fm->LANG['SEARCHNOPARAM']);
}
$_SEARCH = $fm->_Read('search/temp/'.$search_id);
//unset($vars['res']);
//prints($vars);exit();
$data = '';
$t_visits = $fm->_GetCookieArray('t_visits');
$found = $_found = 0;
$entered_word = preg_replace('/([^a-zA-Zа-яА-ЯёЁ]|^)([a-zA-Zа-яА-ЯёЁ]{1,3})(?![a-zA-Zа-яА-ЯёЁ])/', '', $_SEARCH['entered_word']);
$entered_word = preg_replace('/([[:punct:]]+)/', '', $entered_word);
$entered_word = urlencode($entered_word);
$fm->input['p'] = abs($fm->_Intval('p', 1));
foreach ($_SEARCH['res'] as $forum_id => $res) {
$FINFO = 'search/db/'.$forum_id.'_finfo';
if (!file_exists('search/db/'.$forum_id.'_finfo')) continue;
$topic = $fm->_Read('forum'.$forum_id.'/list.php');
$FP_FINFO = fopen ($FINFO, "rb");
$found += $_SEARCH['rescount'][$forum_id];
$temparray = array();
for ($i=0; $i<$_SEARCH['rescount'][$forum_id]; $i++) {
if ($i >= strlen($_SEARCH['res'][$forum_id])/4) {
break 1;
}
$_found++;
if ($_found <= $fm->exbb['topics_per_page'] * ($fm->input['p'] - 1)) continue;
if ($_found >= $fm->exbb['topics_per_page'] * $fm->input['p'] + 1) break;
$strpos = unpack("Npos",substr($_SEARCH['res'][$forum_id],$i*4,4));
fseek($FP_FINFO,$strpos['pos'],0);
$dum = fgets($FP_FINFO,100);
if (isset($temparray[$dum])) continue;
$temparray[$dum] = true;
list($f, $t) = explode('::',$dum);
$f = trim($f);
$t = trim($t);
$f_readed = $fm->_GetCookie('f'.$forum_id,0);
$TopicVisitTime = (isset($t_visits[$f.':'.$t]) && $t_visits[$f.':'.$t] > $fm->user['last_visit']) ? $t_visits[$f.':'.$t]:$fm->user['last_visit'];
$topicicon = topic_icon($topic[$t],$TopicVisitTime);
$author = ($topic[$t]['author'] !== FALSE) ? $topic[$t]['author']:$fm->LANG['Guest'];
$author = ($topic[$t]['a_id'] !== 0) ? '<a href="profile.php?action=show&member='.$topic[$t]['a_id'].'">'.$author.'</a>':$author;
$poster = ($topic[$t]['poster'] !== FALSE) ? $topic[$t]['poster']:$fm->LANG['Guest'];
$poster = ($topic[$t]['p_id'] !== 0) ? '<a href="profile.php?action=show&member='.$topic[$t]['p_id'].'">'.$poster.'</a>':$poster;
//printpage.php?action=1&forum='.$f.'&topic='.$t.'&post='.urlencode($_SEARCH['entered_word']).'&stype='.$_SEARCH['stype'].'&color=yes
$topicname = '<a href="printpage.php?action=1&forum='.$f.'&topic='.$t.'&post='.$entered_word.'&stype=OR&color=yes">'.$fm->chunk_split($topic[$t]['name']).'</a>';
//$topicname = '<a href="topic.php?forum='.$f.'&topic='.$t.'&v=l#'.$topic[$t]['postkey'].'">'.$fm->chunk_split($topic[$t]['name']).'</a>';
$topicdesc = $fm->chunk_split($topic[$t]['desc']);
$forumname = '<a href="forums.php?forum='.$f.'">'.$allforums[$f]['name'].'</a>';
$posts = $topic[$t]['posts'];
$postdate = $fm->_DateFormat($topic[$t]['postdate']+$fm->user['timedif']*3600);
include('./templates/'.DEF_SKIN.'/newposts_data.tpl');
}
fclose ($FP_FINFO);
$list = array();
}
$pages = Print_Paginator($found, 'search.php?action=next&search_id='.$fm->input['search_id'].'&p={_P_}', $fm->exbb['topics_per_page'], 8, $first, TRUE);
$searchinmessage = sprintf($fm->LANG['YOUSEARCH'],preg_replace('/([^a-zA-Zа-яА-ЯёЁ]|^)([a-zA-Zа-яА-ЯёЁ]{1,3})(?![a-zA-Zа-яА-ЯёЁ])/', '$1<font color="red">$2</font>', $_SEARCH['entered_word']));
$fm->LANG['NewPosts'] = $fm->LANG['PRINTRESULT'];
$fm->_Title = ' :: '.$fm->LANG['Search'].' :: '.$fm->LANG['PRINTRESULT'];
include('./templates/'.DEF_SKIN.'/all_header.tpl');
include('./templates/'.DEF_SKIN.'/logos.tpl');
include('./templates/'.DEF_SKIN.'/newposts.tpl');
include('./templates/'.DEF_SKIN.'/footer.tpl');
}
}
function clear_dir_from_expired_files() {
$cleardir = 'search/temp';
$d = dir($cleardir);
while (false !== ($file = $d->read())) {
if (is_dir($cleardir . '/' . $file)) {
continue;
} else {
$clearfile = $cleardir . '/' . $file;
$lifetime = time() - filemtime($clearfile);
if ($lifetime >= 3600) {
unlink($clearfile);
}
}
}
$d->close();
return true;
}
в папку
admin добавлен файл
search_config.tpl
папка
search заменена полностью
в корень форума добавлен файл
setsearch.php