Jump to content

Выборка из корневой категории через фильтр get_products


Go to solution Solved by Kors,

Recommended Posts

Когда я на сайте выбираю корневую категорию (site.com/category/name), отображаются все товары включая подкатегории. Но фильтр по продуктам в функции get_products (api/Products.php) по параметру category_id делает выборку только из конечной категории. Это нормальное явление или у меня что-то не так работает?

Link to post
Share on other sites

Это нормально, так и задумано.

 

Видимо, фильтр у Вас самодельный. Пробуйте действовать по образцу view/ProductsView.php,

в котором   get_products получает  category_id как массив подкатегорий, что делается в строке

        $filter['category_id'] = $category->children;

 

Link to post
Share on other sites

Это нормально, так и задумано.

 

Видимо, фильтр у Вас самодельный. Пробуйте действовать по образцу view/ProductsView.php,

в котором   get_products получает  category_id как массив подкатегорий, что делается в строке

        $filter['category_id'] = $category->children;

 

 

 

Спасибо! Получилось вот что.

if($params['category_id']){
	$category = $this->categories->get_category((int)$params['category_id']);
	if(empty($category) || (!$category->visible))
		return false;
	
	// получаем дочерние категории
	if( isset($category->subcategories) ){
		$category_ids = array();
		// добавим корневую категорию в массив
		$category_ids[] = $params['category_id'];
		foreach($category->subcategories as $key => $val){
			// добавим подкатегорию в массив
			if( $category->subcategories[$key]->visible == $params['visible'] )
				$category_ids[] = $category->subcategories[$key]->id;
		}
		$params['category_id'] = $category_ids;
	}
}

// получаем элементы
foreach($this->products->get_products($params) as $p){
	$products[$p->id] = $p;
	$products[$p->id]->features = $this->features->get_product_options(array('product_id'=>$p->id));
	if(empty($products[$p->id]->features)) unset($products[$p->id]->features);
}

Но категории 3 уровня работать к сожалению не будут видимо...

Edited by mikeevstropov
Link to post
Share on other sites
  • Solution

...если появится подкатегория в 3 уровне, конечно же ключ "children" ее не увидит.

 

Это Вы просто придумали, или ПРОВЕРИЛИ точно? 

До сих пор $category->children содержало потомков ЛЮБОЙ глубины... 

 

 Усложняете все неимоверно...

Все уже давно изобретено и написано:

// получаем дочерние категории
if($params['category_id']){
        $category = $this->categories->get_category((int)$params['category_id']);
	$params['category_id'] = $category->children;
}

// получаем товары
foreach($this->products->get_products($params) as $p){
	$products[$p->id] = $p;
}
Edited by Kors
Link to post
Share on other sites
  • 4 months later...

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...