12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\CatalogSearch\Model\Autocomplete;
- use Magento\Search\Model\ResourceModel\Query\Collection;
- use Magento\Search\Model\QueryFactory;
- use Magento\Search\Model\Autocomplete\DataProviderInterface;
- use Magento\Search\Model\Autocomplete\ItemFactory;
- use Magento\Framework\App\Config\ScopeConfigInterface as ScopeConfig;
- use Magento\Store\Model\ScopeInterface;
- /**
- * Catalog search auto-complete data provider.
- */
- class DataProvider implements DataProviderInterface
- {
- /**
- * Autocomplete limit
- */
- const CONFIG_AUTOCOMPLETE_LIMIT = 'catalog/search/autocomplete_limit';
- /**
- * Query factory
- *
- * @var QueryFactory
- */
- protected $queryFactory;
- /**
- * Autocomplete result item factory
- *
- * @var ItemFactory
- */
- protected $itemFactory;
- /**
- * Limit
- *
- * @var int
- */
- protected $limit;
- /**
- * @param QueryFactory $queryFactory
- * @param ItemFactory $itemFactory
- * @param ScopeConfig $scopeConfig
- */
- public function __construct(
- QueryFactory $queryFactory,
- ItemFactory $itemFactory,
- ScopeConfig $scopeConfig
- ) {
- $this->queryFactory = $queryFactory;
- $this->itemFactory = $itemFactory;
- $this->limit = (int) $scopeConfig->getValue(
- self::CONFIG_AUTOCOMPLETE_LIMIT,
- ScopeInterface::SCOPE_STORE
- );
- }
- /**
- * @inheritdoc
- */
- public function getItems()
- {
- $collection = $this->getSuggestCollection();
- $query = $this->queryFactory->get()->getQueryText();
- $result = [];
- foreach ($collection as $item) {
- $resultItem = $this->itemFactory->create([
- 'title' => $item->getQueryText(),
- 'num_results' => $item->getNumResults(),
- ]);
- if ($resultItem->getTitle() == $query) {
- array_unshift($result, $resultItem);
- } else {
- $result[] = $resultItem;
- }
- }
- return ($this->limit) ? array_splice($result, 0, $this->limit) : $result;
- }
- /**
- * Retrieve suggest collection for query
- *
- * @return Collection
- */
- private function getSuggestCollection()
- {
- return $this->queryFactory->get()->getSuggestCollection();
- }
- }
|