if anyone needs an updated version for latest virtuemart, I have modified it to work
/administrator/components/com_virtuemart/models/category.php
static public function categoryFlatList(&$cats, $catId) {
$catmodel = VmModel::getModel ('category');
$childcats = $catmodel->getChildCategoryList(1, $catId,null, null, true);
foreach($childcats as $k=>$childcat){
if(!empty($childcat->virtuemart_category_id)){
$cats .= $childcat->virtuemart_category_id .',';
self::categoryFlatList($cats, $childcat->virtuemart_category_id);
}
}
}
/administrator/components/com_virtuemart/models/product.php
if(VmConfig::get('show_subcat_products',false)){
/*GJC add subcat products*/
$catmodel = VmModel::getModel ('category');
$cats = '';
foreach($virtuemart_category_id as $catId){
$childcats = $catmodel->getChildCategoryList(1, $catId,null, null, true);
foreach($childcats as $k=>$childcat){
if(!empty($childcat->virtuemart_category_id)){
$cats .= $childcat->virtuemart_category_id .',';
}
}
$cats .= $catId;
}
if(!empty($cats)){
$joinCategory = TRUE;
$where[] = ' `pc`.`virtuemart_category_id` IN ('.$cats.') ';
}
} else if (VmConfig::get('show_all_subcat_products',false)) {
$cats = '';
foreach($virtuemart_category_id as $catId){
VmModel::getModel('category')->categoryFlatList($cats, $catId);
$this->filter_order = '';
$orderBy='';
$cats .= $catId;
}
if(!empty($cats)){
$joinCategory = TRUE;
$where[] = ' `pc`.`virtuemart_category_id` IN ('.$cats.') ';
}
} else {
$where[] = ' `pc`.`virtuemart_category_id` IN ('.implode(',',$virtuemart_category_id).') ';
}