Корректировщики запросов используются для исправления запросов, поиск по которым не дал результатов (например, если запрос набран в неправильной кодировке или с орфографическими ошибками).
Корректировщик запросов должен быть наследником класса nc_search_language_corrector и реализовывать метод correct():
public function correct(nc_search_language_corrector_phrase $phrase)
Тип: boolean
Возвращает TRUE, если запрос был исправлен, иначе — FALSE.
Параметр — экземпляр класса nc_search_language_corrector_phrase, позволяющий получить как запрос целиком (метод to_string()), так и составляющие его слова (метод get_terms()).
Все имеющиеся корректировщики вызываются по порядку (в соответствии с приоритетом) до тех пор, пока исправленный запрос не даст результатов, поэтому часть слов в запросе уже может быть исправлена. Чтобы получить только неисправленные (некорректные) слова, используйте метод get_not_corrected_terms().
Методы get_terms() и get_not_corrected_terms() возвращают массив с экземплярами объектов nc_search_language_corrector_phrase_term. Для получения слова в том виде, как оно было введено пользователем, следует использовать метод $term->get('term'), для сохранения исправленного варианта — $term->set_corrected($corrected_word).
Минималистический пример использования библиотеки проверки орфографии pspell (http://php.net/pspell):
<?php
class my_pspell_corrector extends nc_search_language_corrector {
public function correct(nc_search_language_corrector_phrase $phrase) {
$pspell_link = pspell_new($this->context->get('language'));
$has_corrections = false;
foreach ($phrase->get_not_corrected_terms() as $term) {
$suggestions = pspell_suggest($pspell_link, $term->get('term'));
if ($suggestions) {
$term->set_corrected($suggestions[0]);
$has_corrections = true;
}
}
return $has_corrections;
}
}