Cum să faci căutarea din phpbb 2 să meargă şi cu diacritice şi fără
Simptome:
- dacă caută cineva cu diacritice, nu găseşte postările fără diacritice şi viceversa
- dacă caută cineva cu şţ cu virgulă, nu găseşte postările cu şţ cu sedilă şi viceversa
- dacă cineva a scris un cuvânt între ghilimele româneşti, este probabil ca el să nu fie găsit decât dacă este căutat cu ghilimele româneşti
Trebuie să modifici fişierul includes/functions_search.php după cum se arată mai jos:
Textul original ce trebuie înlocuit:
function clean_words($mode, &$entry, &$stopword_list, &$synonym_list)
{
static $drop_char_match = array('^', '$', '&', '(', ')', '<', '>', '`', '\'', '"', '|', ',', '@', '_', '?', '%', '-', '~', '+', '.', '[', ']', '{', '}', ':', '\\', '/', '=', '#', '\'', ';', '!');
static $drop_char_replace = array(' ', ' ', ' ', ' ', ' ', ' ', ' ', '', '', ' ', ' ', ' ', ' ', '', ' ', ' ', '', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ' , ' ', ' ', ' ', ' ', ' ', ' ');
Textul cu care va fi înlocuit:
function recreate_word_match_table() {
global $db;
$sql = "TRUNCATE TABLE " . SEARCH_WORD_TABLE;
if ( !($result = $db->sql_query($sql)) )
{
message_die(GENERAL_ERROR, 'Could not truncate word table', '', __LINE__, __FILE__, $sql);
}
$sql = "TRUNCATE TABLE " . SEARCH_MATCH_TABLE;
if ( !($result = $db->sql_query($sql)) )
{
message_die(GENERAL_ERROR, 'Could not truncate match table', '', __LINE__, __FILE__, $sql);
}
$sql = "SELECT * FROM " . POSTS_TEXT_TABLE;
if ( !($result = $db->sql_query($sql)) )
{
message_die(GENERAL_ERROR, 'Could not select posts', '', __LINE__, __FILE__, $sql);
}
while ( $row = $db->sql_fetchrow($result) )
{
add_search_words('post', $row['post_id'], $row['post_text'], $row['post_subject']);
}
}
//recreate_word_match_table();
function clean_words($mode, &$entry, &$stopword_list, &$synonym_list)
{
static $drop_char_match = array('^', '$', '&', '(', ')', '<', '>', '`', '\'', '"', '|', ',', '@', '_', '?', '%', '-', '~', '+', '.', '[', ']', '{', '}', ':', '\\', '/', '=', '#', '\'', ';', '!', 'ă', 'î', 'â', 'ş', 'ţ', 'ș', 'ț', 'Ă', 'Î', 'Â', 'Ş', 'Ţ', 'Ș', 'Ț', '„', '”');
static $drop_char_replace = array(' ', ' ', ' ', ' ', ' ', ' ', ' ', '', '', ' ', ' ', ' ', ' ', '', ' ', ' ', '', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ' , ' ', ' ', ' ', ' ', ' ', ' ', 'a', 'i', 'a', 's', 't', 's', 't', 'A', 'I', 'A', 'S', 'T', 'S', 'T', ' ', ' ');
/**
function clean_words($mode, &$entry, &$stopword_list, &$synonym_list)
{
static $drop_char_match = array('^', '$', '&', '(', ')', '<', '>', '`', '\'', '"', '|', ',', '@', '_', '?', '%', '-', '~', '+', '.', '[', ']', '{', '}', ':', '\\', '/', '=', '#', '\'', ';', '!');
static $drop_char_replace = array(' ', ' ', ' ', ' ', ' ', ' ', ' ', '', '', ' ', ' ', ' ', ' ', '', ' ', ' ', '', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ' , ' ', ' ', ' ', ' ', ' ', ' ');
*/
Acest lucru va rezolva problema postărilor care vor fi introduse după această modificare. Pentru a rezolva şi postările anterioare, decomentaţi linia „//recreate_word_match_table();” înlăturând „//” din faţa ei. Apoi executaţi o căutare în forum. Va dura ceva timp în funcţie de câte postări aveţi, de la câteva secunde la câteva minute. După ce operaţia de căutare s-a încheiat, adăugăţi „//” din nou în faţa lui „recreate_word_match_table();”.
Atenţie, dacă aveţi un forum de trafic foarte mare, nu e recomandat să decomentaţi linia, ci mai degabă să plasaţi apelul funcţiei recreate_word_match_table(); undeva în partea de administrare. Pentru sfaturi, folosiţi comentariile la acest subiect.
Succes!

Publică un comentariu nou