/
githubmirror
/
magento2
Обзор
Документация
Войти
/
githubmirror
/
magento2
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
2.4-develop
lib/internal/Magento/Framework/Search/Search.php
114 строк
4 KB
Alexandru Plapana
ACP2E-3892: [Mainline] Unpopulated pages are cached due to search engine errors
04 июн 2025, 12:25
04 июн 2025, 12:25
9a4b9fe
Код
Авторство
О чём код?
<?php /** * Copyright 2015 Adobe * All Rights Reserved. */ namespace Magento\Framework\Search; use Magento\Framework\Api\Search\SearchInterface; use Magento\Framework\Api\Search\SearchCriteriaInterface; use Magento\Framework\App\ScopeResolverInterface; use Magento\Framework\Search\Request\Builder; /** * Search API for all requests. */ class Search implements SearchInterface { /** * @var Builder */ private Builder $requestBuilder; /** * @var ScopeResolverInterface */ private ScopeResolverInterface $scopeResolver; /** * @var SearchEngineInterface */ private SearchEngineInterface $searchEngine; /** * @var SearchResponseBuilder */ private SearchResponseBuilder $searchResponseBuilder; /** * @param Builder $requestBuilder * @param ScopeResolverInterface $scopeResolver * @param SearchEngineInterface $searchEngine * @param SearchResponseBuilder $searchResponseBuilder */ public function __construct( Builder $requestBuilder, ScopeResolverInterface $scopeResolver, SearchEngineInterface $searchEngine, SearchResponseBuilder $searchResponseBuilder, ) { $this->requestBuilder = $requestBuilder; $this->scopeResolver = $scopeResolver; $this->searchEngine = $searchEngine; $this->searchResponseBuilder = $searchResponseBuilder; } /** * @inheritdoc */ public function search(SearchCriteriaInterface $searchCriteria) { $this->requestBuilder->setRequestName($searchCriteria->getRequestName()); $scope = $this->scopeResolver->getScope()->getId(); $this->requestBuilder->bindDimension('scope', $scope); foreach ($searchCriteria->getFilterGroups() as $filterGroup) { foreach ($filterGroup->getFilters() as $filter) { $this->addFieldToFilter($filter->getField(), $filter->getValue()); } } $this->requestBuilder->setFrom($searchCriteria->getCurrentPage() * $searchCriteria->getPageSize()); $this->requestBuilder->setSize($searchCriteria->getPageSize()); /** * This added in Backward compatibility purposes. * Temporary solution for an existing API of a fulltext search request builder. * It must be moved to different API. * Scope to split Search request builder API in MC-16461. */ if (method_exists($this->requestBuilder, 'setSort')) { $this->requestBuilder->setSort($searchCriteria->getSortOrders()); } $request = $this->requestBuilder->create(); $searchResponse = $this->searchEngine->search($request); $response = $this->searchResponseBuilder->build($searchResponse) ->setSearchCriteria($searchCriteria); return $response; } /** * Apply attribute filter to facet collection * * @param string $field * @param string|array|null $condition * @return $this */ private function addFieldToFilter($field, $condition = null) { if (!is_array($condition) || !in_array(key($condition), ['from', 'to'], true)) { $this->requestBuilder->bind($field, $condition); } else { if (!empty($condition['from'])) { $this->requestBuilder->bind("{$field}.from", $condition['from']); } if (!empty($condition['to'])) { $this->requestBuilder->bind("{$field}.to", $condition['to']); } } return $this; } }