Хак под cherry picker для фильтрации товаров не зависимо от вложенности категорий все подхватывается из под категорий, протестировал вроде все работает!
Все модификации проходили в controller.php
строка 36 сопоставляем два ифа
PHP:
if ( empty($url_ptid) ) { // if product_type_id in a link - we do not make query
require_once (CLASSPATH."ps_product_category.php");
$ps_product_category = new ps_product_category;
$category_id=JRequest::getVar('category_id','');
$category_childs = array();
if ( $category_id && $ps_product_category->has_childs($category_id) ){
$category_childs = getCatergoryChildsList( $ps_product_category->getCategoryTreeArray(), $category_id );
}
if (!empty($category_id)){
$q = "SELECT pptx.`product_type_id`".
" FROM (`#__vm_product_product_type_xref` as pptx, `#__vm_product` as p)".
" LEFT JOIN `#__vm_product_category_xref` as pcx ".
" ON pptx.`product_id`=pcx.`product_id`";
if(count($category_childs )){
$q .= " WHERE pcx.`category_id` IN (".implode(',',$category_childs).")";
} else {
$q .= " WHERE pcx.`category_id`='$category_id'";
}
$q .= " AND p.`product_id`=pcx.`product_id`".
" AND p.`product_publish`='Y'";
if( CHECK_STOCK && PSHOP_SHOW_OUT_OF_STOCK_PRODUCTS != "1") {
$q .= ' AND p.`product_in_stock` > 0';
}
$q.= " LIMIT 0 , 1";
$db->setQuery($q);
$ptid=$db->loadResult();
}
}else{
$ptid=$url_ptid;
}
это для того чтобы автоматом вытянуть product_type_id из товаров подкатегорий
потом в конец перед закрытием класса ставим новую функцию
PHP:
function getCatergoryChildsList( $clist, $catid ){
$res_list = array( $catid );
$search_childs = true;
while( $search_childs ){
$search_childs = false;
foreach( $clist as $c_catid => $val ){
if( in_array( $val['category_parent_id'], $res_list ) ){
$res_list[] = $c_catid;
unset( $clist[ $c_catid ] );
$search_childs = true;
}
}
}
return $res_list;
}
ну и на последок проверка параметров со всех под категорий строка 306
PHP:
if($category_id && !chpconf::option('custom_ptid')){ // becuase we use custom PTI in some category - we don't want wrong category_id to be added
require_once (CLASSPATH."ps_product_category.php");
$ps_product_category = new ps_product_category;
$category_childs = array();
if ( $category_id && $ps_product_category->has_childs($category_id) ){
$category_childs = getCatergoryChildsList( $ps_product_category->getCategoryTreeArray(), $category_id );
}
$tables="`#__vm_product_type_{$this->ptid()}` as pt";
$joins="LEFT JOIN `#__vm_product_category_xref` as pcx ON pt.`product_id`=pcx.`product_id` ".$joins;
//$where="pcx.`category_id`=$category_id ".$where;
// uncomment this, comment above 1 line--for search with Child Products
if(count($category_childs)){
$where="pcx.`category_id` IN (".implode(',',$category_childs).") ".$where;
} else {
$where="(pcx.`category_id`=$category_id OR `product_parent_id`<>0) ".$where;
}
}else{
$tables="`#__vm_product_type_{$this->ptid()}` as pt, `#__vm_product_category_xref` as pcx";
$where="pt.`product_id`=pcx.`product_id` ".$where;
// uncomment this, comment above 2 lines--for search with Child Products
//$tables="`#__vm_product_type_{$this->ptid()}` as pt";
//$where="1 ".$where;
}
`product_parent_id`<>0 я убрал потому как задача не стояла тому с подтоварами скорей всего работать не будет! кому нужно допилит
Всем удачи! Это все под VM 1.1.9