Заказчик заметил, что не робит поиск по категориям. Сказал разобраться. Может кому полезно будет.
Проблема: при формировании списка категорий, если уровень справочника > 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(' ', 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(' ', 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);
?>
Может быть кто-нибудь знает другой способ?