Корректировщики запросов используются для исправления запросов, поиск по которым не дал результатов (например, если запрос набран в неправильной кодировке или с орфографическими ошибками).
Корректировщик запросов должен быть наследником класса 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; } }