1. почему после транслитерации запроса пропал setFilter('public', 1) ?
2. чем setFilter('name', "$query%", 'like') от setFilter('name', $query, '%like%') отличается? почему такой синтаксис?
3. удаление методов getSearchQueryProductResults, getSearchQueryProductCount ломает обратную совместимость и может привести к проблемам в сторонних модулях.
У меня получился вот такой вариант:
public function getSearchQueryCategoryResults($query, $limit = 1)
{
$list = $this->dirapi
->setFilter('name', $query, 'like%')
->setFilter('public', 1)
->getList(1, $limit);
$limit -= count($list);
if ($limit) {
$list2 = $this->dirapi
->clearFilter()
->setFilter('id', $this->getIds($list), 'notin')
->setFilter('name', $query, '%like%')
->setFilter('public', 1)
->getList(1, $limit);
$list = array_merge($list, $list2);
$limit -= count($list2);
}
// Если не нашли результаты, то посмотрим с транслитом
if ($limit) {
$query = Transliteration::puntoSwitchWord($query);
$list2 = $this->dirapi
->clearFilter()
->setFilter('id', $this->getIds($list), 'notin')
->setFilter('name', $query, 'like%')
->setFilter('public', 1)
->getList(1, $limit);
$list = array_merge($list, $list2);
$limit -= count($list2);
if ($limit) {
$list2 = $this->dirapi
->clearFilter()
->setFilter('id', $this->getIds($list), 'notin')
->setFilter('name', $query, '%like%')
->setFilter('public', 1)
->getList(1, $limit);
$list = array_merge($list, $list2);
}
}
return $list;
}