@@ -84,9 +84,10 @@ protected function _getItemsData()
84
84
->getProductCollection ();
85
85
$ optionsFacetedData = $ productCollection ->getFacetedData ($ attribute ->getAttributeCode ());
86
86
87
- if (count ($ optionsFacetedData ) === 0
88
- && $ this ->getAttributeIsFilterable ($ attribute ) !== static ::ATTRIBUTE_OPTIONS_ONLY_WITH_RESULTS
89
- ) {
87
+ $ isAttributeFilterable =
88
+ $ this ->getAttributeIsFilterable ($ attribute ) === static ::ATTRIBUTE_OPTIONS_ONLY_WITH_RESULTS ;
89
+
90
+ if (count ($ optionsFacetedData ) === 0 && $ isAttributeFilterable ) {
90
91
return $ this ->itemDataBuilder ->build ();
91
92
}
92
93
@@ -95,29 +96,62 @@ protected function _getItemsData()
95
96
$ options = $ attribute ->getFrontend ()
96
97
->getSelectOptions ();
97
98
foreach ($ options as $ option ) {
98
- if (empty ($ option ['value ' ]) && !is_numeric ($ option ['value ' ])) {
99
- continue ;
100
- }
99
+ $ this ->buildOptionData ($ option , $ isAttributeFilterable , $ optionsFacetedData , $ productSize );
100
+ }
101
101
102
- $ value = $ option ['value ' ];
102
+ return $ this ->itemDataBuilder ->build ();
103
+ }
103
104
104
- $ count = isset ($ optionsFacetedData [$ value ]['count ' ])
105
- ? (int )$ optionsFacetedData [$ value ]['count ' ]
106
- : 0 ;
107
- // Check filter type
108
- if (
109
- $ this ->getAttributeIsFilterable ($ attribute ) === static ::ATTRIBUTE_OPTIONS_ONLY_WITH_RESULTS
110
- && (!$ this ->isOptionReducesResults ($ count , $ productSize ) || $ count === 0 )
111
- ) {
112
- continue ;
113
- }
114
- $ this ->itemDataBuilder ->addItemData (
115
- $ this ->tagFilter ->filter ($ option ['label ' ]),
116
- $ value ,
117
- $ count
118
- );
105
+ /**
106
+ * Build option data
107
+ *
108
+ * @param array $option
109
+ * @param boolean $isAttributeFilterable
110
+ * @param array $optionsFacetedData
111
+ * @param int $productSize
112
+ * @return void
113
+ */
114
+ private function buildOptionData ($ option , $ isAttributeFilterable , $ optionsFacetedData , $ productSize )
115
+ {
116
+ $ value = $ this ->getOptionValue ($ option );
117
+ if ($ value === false ) {
118
+ return ;
119
+ }
120
+ $ count = $ this ->getOptionCount ($ value , $ optionsFacetedData );
121
+ if ($ isAttributeFilterable && (!$ this ->isOptionReducesResults ($ count , $ productSize ) || $ count === 0 )) {
122
+ return ;
119
123
}
120
124
121
- return $ this ->itemDataBuilder ->build ();
125
+ $ this ->itemDataBuilder ->addItemData (
126
+ $ this ->tagFilter ->filter ($ option ['label ' ]),
127
+ $ value ,
128
+ $ count
129
+ );
130
+ }
131
+
132
+ /**
133
+ * Retrieve option value if it exists
134
+ *
135
+ * @param array $option
136
+ * @return bool|string
137
+ */
138
+ private function getOptionValue ($ option )
139
+ {
140
+ if (empty ($ option ['value ' ]) && !is_numeric ($ option ['value ' ])) {
141
+ return false ;
142
+ }
143
+ return $ option ['value ' ];
144
+ }
145
+
146
+ /**
147
+ * Retrieve count of the options
148
+ *
149
+ * @return int
150
+ */
151
+ private function getOptionCount ($ value , $ optionsFacetedData )
152
+ {
153
+ return isset ($ optionsFacetedData [$ value ]['count ' ])
154
+ ? (int )$ optionsFacetedData [$ value ]['count ' ]
155
+ : 0 ;
122
156
}
123
157
}
0 commit comments