Skip to content

Commit 378c139

Browse files
author
Oleksandr Gorkun
committed
MAGETWO-59163: Category product count incorporating products with visibility set to search only
1 parent 90074e7 commit 378c139

File tree

5 files changed

+32
-12
lines changed

5 files changed

+32
-12
lines changed

app/code/Magento/CatalogSearch/Model/Adapter/Mysql/Filter/AliasResolver.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,8 @@ public function getAlias(\Magento\Framework\Search\Request\FilterInterface $filt
3535
$alias = 'price_index';
3636
break;
3737
case 'category_ids':
38-
$alias = 'category_ids_index';
38+
case 'visibility':
39+
$alias = 'category_products_index';
3940
break;
4041
default:
4142
$alias = $field . RequestGenerator::FILTER_SUFFIX;

app/code/Magento/CatalogSearch/Model/Adapter/Mysql/Filter/Preprocessor.php

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,10 @@ private function processQueryWithField(FilterInterface $filter, $isNegation, $qu
141141
$query
142142
);
143143
} elseif ($filter->getField() === 'category_ids') {
144-
return 'category_ids_index.category_id = ' . (int) $filter->getValue();
144+
return "{$this->aliasResolver->getAlias($filter)}.category_id = "
145+
. (int) $filter->getValue();
146+
} elseif ($filter->getField() === 'visibility') {
147+
return "{$this->aliasResolver->getAlias($filter)}." . $query;
145148
} elseif ($attribute->isStatic()) {
146149
$alias = $this->aliasResolver->getAlias($filter);
147150
$resultQuery = str_replace(

app/code/Magento/CatalogSearch/Model/ResourceModel/Fulltext/Collection.php

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -270,6 +270,14 @@ public function addFieldToFilter($field, $condition = null)
270270
$this->filterBuilder->setValue($condition);
271271
$this->searchCriteriaBuilder->addFilter($this->filterBuilder->create());
272272
} else {
273+
if (empty($condition['from']) && empty($condition['to'])) {
274+
$this->filterBuilder->setField($field);
275+
$this->filterBuilder->setValue($condition);
276+
$this->filterBuilder->setConditionType('in');
277+
$this->searchCriteriaBuilder->addFilter(
278+
$this->filterBuilder->create()
279+
);
280+
}
273281
if (!empty($condition['from'])) {
274282
$this->filterBuilder->setField("{$field}.from");
275283
$this->filterBuilder->setValue($condition['from']);

app/code/Magento/CatalogSearch/Model/Search/FilterMapper/ExclusionStrategy.php

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -70,14 +70,18 @@ public function apply(
7070
[]
7171
);
7272
$isApplied = true;
73-
} elseif ('category_ids' === $field) {
73+
} elseif ('category_ids' === $field || $field === 'visibility') {
7474
$alias = $this->aliasResolver->getAlias($filter);
75-
$tableName = $this->resourceConnection->getTableName('catalog_category_product_index');
76-
$select->joinInner(
77-
[$alias => $tableName],
78-
'search_index.entity_id = category_ids_index.product_id',
79-
[]
80-
);
75+
if (!array_key_exists($alias, $select->getPart('from'))) {
76+
$tableName = $this->resourceConnection->getTableName(
77+
'catalog_category_product_index'
78+
);
79+
$select->joinInner(
80+
[$alias => $tableName],
81+
"search_index.entity_id = $alias.product_id",
82+
[]
83+
);
84+
}
8185
$isApplied = true;
8286
}
8387

lib/internal/Magento/Framework/Search/Search.php

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -84,15 +84,19 @@ public function search(SearchCriteriaInterface $searchCriteria)
8484
*/
8585
private function addFieldToFilter($field, $condition = null)
8686
{
87-
if (!is_array($condition) || !in_array(key($condition), ['from', 'to'], true)) {
88-
$this->requestBuilder->bind($field, $condition);
89-
} else {
87+
if (is_array($condition)
88+
&& (
89+
!empty($condition['from']) || !empty($condition['to'])
90+
)
91+
) {
9092
if (!empty($condition['from'])) {
9193
$this->requestBuilder->bind("{$field}.from", $condition['from']);
9294
}
9395
if (!empty($condition['to'])) {
9496
$this->requestBuilder->bind("{$field}.to", $condition['to']);
9597
}
98+
} else {
99+
$this->requestBuilder->bind($field, $condition);
96100
}
97101

98102
return $this;

0 commit comments

Comments
 (0)