Поиск товаров в VM происходит с учетом выбранного меню, это бывает не удобно, когда пользователю нужно организовать глобальнй поиск по всему каталогу
Исправить можно в файле
administrator/components/com_virtuemart/models/pooduct.php
Примерно на ~258 строке происходит проверка на ввод поисковой фразы, нам нужно добавить флаг "был ли поиск"
$is_searsh=0;
if (!empty($this->keyword) and $this->keyword !== '' and $group === FALSE)
{
$is_searsh=1;
Далее в блоке фильтра по категории, добавляет условие нового флага - если введено поисковое слово то игнорируем категорию
if ($virtuemart_category_id > 0 and $is_searsh==0)
{
$joinCategory = TRUE;
$categories = array();
VmModel::getModel('category')->GetTreeCatArray($categories, $virtuemart_category_id);
$where[] = ' `pc`.`virtuemart_category_id` in (\'' . implode('\',\'',$categories).'\')';
} else
Дополнительно можно отсеять товар перед выводм, например вывести только уникальные названия, в этом же методе перед выводом результата:
//убираем дубликаты по названию
if ($is_searsh==1 and count($product_ids)>0)
{
$db = JFactory::getDbo();
$db->setquery("select p.virtuemart_product_id as id,product_name as name from #__virtuemart_products p left join #__virtuemart_products_ru_ru as r on r.virtuemart_product_id=p.virtuemart_product_id where p.virtuemart_product_id in (".implode(',',$product_ids).") ");$lists=$db->loadobjectlist();
$product_ids=array();
$product_ids_name=array();
foreach($lists as $ll)
{
$is_new=1;
foreach($product_ids_name as $nn) {if ($nn==$ll->name) $is_new=0;}
if ($is_new==1)
{
$product_ids[]=$ll->id;
$product_ids_name[]=$ll->name;
}
}
}
return $product_ids;