common - wiki - search functionality
Промени в системата за търсене
Разлики между функционалност и задание
Задание:
1. Търсенето да е case-insensitive и да може да се търси и по част от дума, както и по израз, по няколко думи, които не са поредни
2. В резултатите да се показват резултатите, като само търсеният стринг е подчертан и без да има объркани тагове (незатворени болд табгове и т.н.)
3. При отваряне на конкретна страница от резултатите за търсене пак да се подвертава търсеният стринг в текста на страницата.
Неща от заданието, които не са постигнати:
При търсене на повече от 1 дума намерените думи не винаги се виждат подчертани в извадката от текста на страницата в списъка с резултати от търсенето, но като се отвори самата страница са подчертани правилно.
Промени в кода
tiki-listpages.php
редове 327-330 и 333 - коментирани, за да не прави exact_match, а да търси и по част от думата
tililib.php
започвайки от ред 3379
if $f {//look for space...
// $mid = " where LOWER(`pageName`) like LOWER('click="javascript:toggle_dynamic_var("$find");" title="Click to edit dynamic variable: $find">NaV')";
$mid = " where LOWER(`pageName`) like LOWER('NaV') OR LOWER(tp.`data`) LIKE LOWER('NaV') "; //Modified By Tihomir Tenchev
} else {
$findop = $forListPages ? ' AND' : ' OR';
// $mid = " where LOWER(`pageName`) like ".implode($findop . ' LOWER(`pageName`) like ', array_fill(0, count($f), 'LOWER(?)'));
$mid = " where LOWER(`pageName`) like ".implode($findop . ' LOWER(`pageName`) like ', array_fill(0, count($f), 'LOWER(?)')) .
" OR LOWER(tp.`data`) like ".implode($findop . ' LOWER(tp.`data`) like ', array_fill(0, count($f), 'LOWER(?)')); //Modified By Tihomir Tenchev
$bindvars = $f;
foreach ($f as $f1) {
array_push($bindvars,$f1);
}
също така във функцията get_snippet след if ($prefs'search_parsed_snippet' == 'y') {...} следващия IF се заменя с
$data = strip_tags($data);
$highlight = trim($highlight);
if ($highlight != '') {
$offset = ($length > 0)?(int) $length/2:100;
if (mb_stripos(' ',$highlight) !== false) {
foreach " ",$highlight) as $k=>$hl) {
if (mb_stripos($data, $hl) !== false) {
$s_start = max(mb_stripos($data, $hl)-$offset,0);
$s_end = min(mb_stripos($data, $hl)+$offset,mb_strlen($data;
$data = mb_substr($data,$s_start,($s_end-$s_start)-1);
// return $ret;
// return preg_replace("~$hl~ui", ''.$hl.'', $ret);
}
}
} else {
$hl= mb_strtolower($highlight);
$start = max(mb_stripos($data, $hl)-$offset,0);
$end = min(mb_stripos($data, $hl)+$offset,mb_strlen($data));
$data = mb_substr($data,$start,($end-$start)-1);
// return $ret;
// return preg_replace("~$hl~ui", ''.$hl.'', $ret);
}
return $data;
}
и в lib/smarty_tiki/outputfilter.highlight.php ървите две функции се заменят с:
function smarty_outputfilter_highlight($source, $smarty)
{
global $prefs;
if $_REQUEST'highlight' {
if $_REQUEST'find'
return $source;
else
$_REQUEST'highlight' = $_REQUEST'find';
}
if (!strstr($source, 'id="tiki-center"')) {
return $source;
}
$highlight = $_REQUEST'highlight';
if | $_REQUEST'boolean' == 'y' {
$highlight = str_replace'(', ')', '*', '-', '"', '~', '<', '>'), ' ', $highlight);
}
if | empty($highlight return $source;
}
if ( $end = strrpos($source, 'id="col2"') )
$stop_pattern = '(
