Автор Тема: Поиск на оскласс  (Прочитано 406 раз)

0 Пользователей и 1 Гость просматривают эту тему.

гудочек

  • Гость
Поиск на оскласс
« : 19 Июня 2018, 15:45:38 »
Как работает поиск на этом движке, что за муть!
Допустим пользователь вводит в строку поиска "торт" и ему показывает только торт, не торты, тортов, и т.п. - ничего этого не видно. Ка я понял, у оскласс поиск ищет только точное вхождение слов.
А как зделать так чтобы искало все варианты слов, в том числе и склонения?
Про умный поиск я уже и молчу.
 

point

  • Гость
Поиск на оскласс
« Ответ #1 : 24 Июня 2018, 12:23:58 »

Да, с поиском тут беда.
Можно чуть улучшить поиск, модифицировав файл functions.php вашей темы.
Вставьте в него следующий код:




function cust_refined_pattern_search($params) {

if ($params['sPattern'] != '' && !Session::newInstance()->_get('seeBy')) {
$mSearch = Search::newInstance();
$query_elements = (array) json_decode($mSearch->toJson());

$mSearch->addJoinTable(count($query_elements['tables_join']), sprintf("(SELECT DISTINCT(fk_i_item_id), MATCH(s_title, s_description) AGAINST('%s') AS relevance FROM %st_item_description ) des", $params['sPattern'], DB_TABLE_PREFIX), 'des.fk_i_item_id = '.DB_TABLE_PREFIX.'t_item.pk_i_id', 'INNER' );
$mSearch->addLocale('%');
$mSearch->addGroupBy(DB_TABLE_PREFIX.'t_item.pk_i_id');
$mSearch->order("des.relevance DESC, dt_pub_date", "DESC");
}

Session::newInstance()->_drop('seeBy');
}

osc_add_hook('search_conditions', 'cust_refined_pattern_search');

function cust_alerts_locale_hack_start() {

if (osc_get_osclass_section() == "alerts") {
View::newInstance()->_exportVariableToView('aUserLocale', Session::newInstance()->_get('userLocale'));
Session::newInstance()->_set('userLocale', '%');
}

// Detect See By link
if (Session::newInstance()->_get('seeBy') == '') Session::newInstance()->_set('seeBy', (Params::getParam('seeBy') ? 1 : 0));
Params::unsetParam('seeBy');
}

osc_add_hook('init', 'cust_alerts_locale_hack_start');

function cust_alerts_locale_hack_end($conditions) {

if (osc_get_osclass_section() == "alerts") {
Session::newInstance()->_set('userLocale', View::newInstance()->_get('aUserLocale'));
}

return $conditions;
}

osc_add_filter('sql_search_item_conditions', 'cust_alerts_locale_hack_end');

function cust_seeBy_link_add_identifier() { ?>
<script type="text/javascript">
$(".see_by a").on('click', function(e) {
$(this).prop('href', $(this).prop('href') + '?seeBy=1');
return true;
})
</script>
<?php }

osc_add_hook('footer', 'cust_seeBy_link_add_identifier');
 

 

В быстром ответе можно использовать BB-теги и смайлы.

Имя: E-mail: