*

andre

  • *
  • 35

Расширенный поиск по категориям

Заказчик заметил, что не робит поиск по категориям. Сказал разобраться. Может кому полезно будет.

Проблема: при формировании списка категорий, если уровень справочника > 1, value формируется как путь до корневого узла (см buildBranchArray в category_tree.php) напр.: 2_12_34. А в файле includes/content/search/search.php ожидается только число:

if (isset($_GET['category']) && is_numeric($_GET['category']) && ($_GET['category'] > 0)) {
        $osC_Search->setCategory($_GET['category'], (isset($_GET['recursive']) && ($_GET['recursive'] == '1') ? true : false));
}

посему категория не выставляется и не участвует в поиске.

Для данного случая я сделал не большой обход. В файле includes/classes/category_tree.php добавил метод (для общности случая):

    function getBreadcrumbUsage() {
    return $this->breadcrumb_usage;
    }

а в шаблоне страницы расширенного поиска (templates/.../content/search/search.php)

изменил

<?php
  
echo osc_draw_label($osC_Language->get('field_search_categories'), 'category');

  
$osC_CategoryTree->setSpacerString('&nbsp;'2);

  
$categories_array = array(array('id' => '''text' => $osC_Language->get('filter_all_categories')));

  foreach (
$osC_CategoryTree->buildBranchArray(0) as $category) {
    
$categories_array[] = array('id' => $category['id'],
                                
'text' => $category['title']);
  }
  
  echo 
osc_draw_pull_down_menu('category'$categories_array);
?>

на

<?php
  
echo osc_draw_label($osC_Language->get('field_search_categories'), 'category');

  
$osC_CategoryTree->setSpacerString('&nbsp;'2);

  
$categories_array = array(array('id' => '''text' => $osC_Language->get('filter_all_categories')));

  
$oldUsage $osC_CategoryTree->getBreadcrumbUsage();
  
$osC_CategoryTree->setBreadcrumbUsage(false);
  
  foreach (
$osC_CategoryTree->buildBranchArray(0) as $category) {
    
$categories_array[] = array('id' => $category['id'],
                                
'text' => $category['title']);
  }
  
$osC_CategoryTree->setBreadcrumbUsage($oldUsage);
  
  echo 
osc_draw_pull_down_menu('category'$categories_array);
?>


Может быть кто-нибудь знает другой способ?

*

Love

Не знаю что вы имели ввиду. У меня поиск по категориям робит плюс если галку ставишь включая все подкатегории. Находит все.

*

andre

  • *
  • 35

Не знаю что вы имели ввиду. У меня поиск по категориям робит плюс если галку ставишь включая все подкатегории. Находит все.

Скорее всего, потому, что у Вас рубрикатор товаров одноуровневый или при тесте выбираете первый уровень.

*

Love

Рубрикатор двухуровневый. Выбирается только первый уровень с галкой всех последующих подуровней.

*

andre

  • *
  • 35

Рубрикатор двухуровневый. Выбирается только первый уровень с галкой всех последующих подуровней.

А если выберете второй уровень - не будет работать.

*

Love

Рубрикатор двухуровневый. Выбирается только первый уровень с галкой всех последующих подуровней.

А если выберете второй уровень - не будет работать.
Второй уровень у меня не выбрать, нету его в списках выбора. Ну если так будем иметь ввиду.

Учтем в сервиспаке это дело если эта недоработка действительно есть. Спасибо за помощь   
(Здесь есть изображение, скрытое от гостей. Для просмотра зарегистрируйтесь или залогиньтесь)