diff --git a/app/code/Magento/CatalogSearch/Model/Autocomplete/DataProvider.php b/app/code/Magento/CatalogSearch/Model/Autocomplete/DataProvider.php
index c4413d002e19c..c1c9997bc83ea 100644
--- a/app/code/Magento/CatalogSearch/Model/Autocomplete/DataProvider.php
+++ b/app/code/Magento/CatalogSearch/Model/Autocomplete/DataProvider.php
@@ -10,9 +10,16 @@
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;
class DataProvider implements DataProviderInterface
{
+ /**
+ * Autocomplete limit
+ */
+ const CONFIG_AUTOCOMPLETE_LIMIT = 'catalog/search/autocomplete_limit';
+
/**
* Query factory
*
@@ -27,16 +34,29 @@ class DataProvider implements DataProviderInterface
*/
protected $itemFactory;
+ /**
+ * Limit
+ *
+ * @var int
+ */
+ protected $limit;
+
/**
* @param QueryFactory $queryFactory
* @param ItemFactory $itemFactory
*/
public function __construct(
QueryFactory $queryFactory,
- ItemFactory $itemFactory
+ ItemFactory $itemFactory,
+ ScopeConfig $scopeConfig
) {
$this->queryFactory = $queryFactory;
$this->itemFactory = $itemFactory;
+
+ $this->limit = (int) $scopeConfig->getValue(
+ self::CONFIG_AUTOCOMPLETE_LIMIT,
+ ScopeInterface::SCOPE_STORE
+ );
}
/**
@@ -58,7 +78,7 @@ public function getItems()
$result[] = $resultItem;
}
}
- return $result;
+ return ($this->limit) ? array_splice($result, 0, $this->limit) : $result;
}
/**
diff --git a/app/code/Magento/CatalogSearch/Test/Unit/Model/Autocomplete/DataProviderTest.php b/app/code/Magento/CatalogSearch/Test/Unit/Model/Autocomplete/DataProviderTest.php
index 75daf438f7bf2..bb8fc848bb2b7 100644
--- a/app/code/Magento/CatalogSearch/Test/Unit/Model/Autocomplete/DataProviderTest.php
+++ b/app/code/Magento/CatalogSearch/Test/Unit/Model/Autocomplete/DataProviderTest.php
@@ -30,6 +30,11 @@ class DataProviderTest extends \PHPUnit\Framework\TestCase
*/
private $suggestCollection;
+ /**
+ * @var integer
+ */
+ private $limit = 3;
+
protected function setUp()
{
$helper = new ObjectManager($this);
@@ -60,11 +65,20 @@ protected function setUp()
->setMethods(['create'])
->getMock();
+ $scopeConfig = $this->getMockBuilder(\Magento\Framework\App\Config\ScopeConfigInterface::class)
+ ->setMethods(['getValue'])
+ ->disableOriginalConstructor()
+ ->getMockForAbstractClass();
+ $scopeConfig->expects($this->any())
+ ->method('getValue')
+ ->willReturn($this->limit);
+
$this->model = $helper->getObject(
\Magento\CatalogSearch\Model\Autocomplete\DataProvider::class,
[
'queryFactory' => $queryFactory,
- 'itemFactory' => $this->itemFactory
+ 'itemFactory' => $this->itemFactory,
+ 'scopeConfig' => $scopeConfig
]
);
}
@@ -103,8 +117,10 @@ public function testGetItems()
->will($this->returnValue($expected));
$this->itemFactory->expects($this->any())->method('create')->willReturn($itemMock);
+
$result = $this->model->getItems();
$this->assertEquals($expected, $result[0]->toArray());
+ $this->assertEquals($this->limit, count($result));
}
private function buildCollection(array $data)
diff --git a/app/code/Magento/CatalogSearch/etc/adminhtml/system.xml b/app/code/Magento/CatalogSearch/etc/adminhtml/system.xml
index f5ebd3c6c9dc4..18d2cdf542799 100644
--- a/app/code/Magento/CatalogSearch/etc/adminhtml/system.xml
+++ b/app/code/Magento/CatalogSearch/etc/adminhtml/system.xml
@@ -32,6 +32,10 @@
Number of popular search terms to be cached for faster response. Use “0” to cache all results after a term is searched for the second time.
validate-digits
+
+
+ validate-digits
+
diff --git a/app/code/Magento/CatalogSearch/etc/config.xml b/app/code/Magento/CatalogSearch/etc/config.xml
index 9fb0118701d10..d2b50fe9f5336 100644
--- a/app/code/Magento/CatalogSearch/etc/config.xml
+++ b/app/code/Magento/CatalogSearch/etc/config.xml
@@ -16,6 +16,7 @@
1
128
100
+ 8