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