8
8
namespace Magento \CatalogGraphQl \DataProvider \Product \LayeredNavigation \Builder \Aggregations \Category ;
9
9
10
10
use Magento \Catalog \Api \CategoryListInterface ;
11
+ use Magento \Catalog \Model \Config \LayerCategoryConfig ;
11
12
use Magento \Framework \Api \SearchCriteriaBuilder ;
13
+ use Magento \Framework \App \ObjectManager ;
12
14
use Magento \Framework \ObjectManager \ResetAfterRequestInterface ;
13
15
use Magento \Framework \Search \Response \Aggregation ;
14
16
use Magento \Framework \Search \Response \AggregationFactory ;
@@ -61,25 +63,34 @@ class IncludeDirectChildrenOnly implements ResetAfterRequestInterface
61
63
*/
62
64
private $ searchCriteriaBuilder ;
63
65
66
+ /**
67
+ * @var LayerCategoryConfig|null
68
+ */
69
+ private $ layerCategoryConfig ;
70
+
64
71
/**
65
72
* @param AggregationFactory $aggregationFactory
66
73
* @param BucketFactory $bucketFactory
67
74
* @param StoreManagerInterface $storeManager
68
75
* @param CategoryListInterface $categoryList
69
76
* @param SearchCriteriaBuilder $searchCriteriaBuilder
77
+ * @param LayerCategoryConfig|null $layerCategoryConfig
70
78
*/
71
79
public function __construct (
72
80
AggregationFactory $ aggregationFactory ,
73
81
BucketFactory $ bucketFactory ,
74
82
StoreManagerInterface $ storeManager ,
75
83
CategoryListInterface $ categoryList ,
76
- SearchCriteriaBuilder $ searchCriteriaBuilder
84
+ SearchCriteriaBuilder $ searchCriteriaBuilder ,
85
+ ?LayerCategoryConfig $ layerCategoryConfig = null
77
86
) {
78
87
$ this ->aggregationFactory = $ aggregationFactory ;
79
88
$ this ->bucketFactory = $ bucketFactory ;
80
89
$ this ->storeManager = $ storeManager ;
81
90
$ this ->categoryList = $ categoryList ;
82
91
$ this ->searchCriteriaBuilder = $ searchCriteriaBuilder ;
92
+ $ this ->layerCategoryConfig = $ layerCategoryConfig ?? ObjectManager::getInstance ()
93
+ ->get (LayerCategoryConfig::class);
83
94
}
84
95
85
96
/**
@@ -91,28 +102,34 @@ public function __construct(
91
102
*/
92
103
public function filter (AggregationInterface $ aggregation , ?int $ storeId ): Aggregation
93
104
{
94
- $ categoryIdsRequested = $ this ->filter ['category ' ] ?? null ;
95
- if ($ categoryIdsRequested === null ) {
96
- return $ aggregation ;
97
- }
98
- $ buckets = $ aggregation ->getBuckets ();
99
- $ categoryBucket = $ buckets [self ::CATEGORY_BUCKET ] ?? null ;
100
- if ($ categoryBucket === null || empty ($ categoryBucket ->getValues ())) {
101
- return $ aggregation ;
105
+ if (!$ this ->layerCategoryConfig ->isCategoryFilterVisibleInLayerNavigation ()) {
106
+ $ buckets = $ aggregation ->getBuckets ();
107
+ unset($ buckets [self ::CATEGORY_BUCKET ]);
108
+ } else {
109
+ $ categoryIdsRequested = $ this ->filter ['category ' ] ?? null ;
110
+ if ($ categoryIdsRequested === null ) {
111
+ return $ aggregation ;
112
+ }
113
+ $ buckets = $ aggregation ->getBuckets ();
114
+ $ categoryBucket = $ buckets [self ::CATEGORY_BUCKET ] ?? null ;
115
+ if ($ categoryBucket === null || empty ($ categoryBucket ->getValues ())) {
116
+ return $ aggregation ;
117
+ }
118
+ $ categoryIdsRequested = is_array ($ categoryIdsRequested ) ? $ categoryIdsRequested : [$ categoryIdsRequested ];
119
+ $ bucketValuesFiltered = $ this ->filterBucketValues (
120
+ $ categoryBucket ->getValues (),
121
+ $ categoryIdsRequested ,
122
+ $ storeId
123
+ );
124
+ $ categoryBucketResolved = $ this ->bucketFactory ->create (
125
+ [
126
+ 'name ' => self ::CATEGORY_BUCKET ,
127
+ 'values ' => $ bucketValuesFiltered
128
+ ]
129
+ );
130
+ $ buckets [self ::CATEGORY_BUCKET ] = $ categoryBucketResolved ;
102
131
}
103
- $ categoryIdsRequested = is_array ($ categoryIdsRequested ) ? $ categoryIdsRequested : [$ categoryIdsRequested ];
104
- $ bucketValuesFiltered = $ this ->filterBucketValues (
105
- $ categoryBucket ->getValues (),
106
- $ categoryIdsRequested ,
107
- $ storeId
108
- );
109
- $ categoryBucketResolved = $ this ->bucketFactory ->create (
110
- [
111
- 'name ' => self ::CATEGORY_BUCKET ,
112
- 'values ' => $ bucketValuesFiltered
113
- ]
114
- );
115
- $ buckets [self ::CATEGORY_BUCKET ] = $ categoryBucketResolved ;
132
+
116
133
return $ this ->aggregationFactory ->create ([self ::BUCKETS_NAME => $ buckets ]);
117
134
}
118
135
0 commit comments