![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/old/vendor/magento/module-search/Block/ |
<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ /** * Search term block */ namespace Magento\Search\Block; use Magento\Framework\DataObject; use Magento\Framework\Exception\NoSuchEntityException; use Magento\Framework\UrlFactory; use Magento\Framework\UrlInterface; use Magento\Framework\View\Element\Template; use Magento\Framework\View\Element\Template\Context; use Magento\Search\Model\ResourceModel\Query\CollectionFactory; /** * Terms and conditions block * * @api * @since 100.0.2 */ class Term extends Template { /** * @var array */ protected $_terms; /** * @var int */ protected $_minPopularity; /** * @var int */ protected $_maxPopularity; /** * @var UrlFactory */ protected $_urlFactory; /** * @var CollectionFactory */ protected $_queryCollectionFactory; /** * @param Context $context * @param CollectionFactory $queryCollectionFactory * @param UrlFactory $urlFactory * @param array $data */ public function __construct( Context $context, CollectionFactory $queryCollectionFactory, UrlFactory $urlFactory, array $data = [] ) { $this->_queryCollectionFactory = $queryCollectionFactory; $this->_urlFactory = $urlFactory; parent::__construct($context, $data); } /** * Load terms and try to sort it by names * * @return $this * @throws NoSuchEntityException */ protected function _loadTerms() { if (empty($this->_terms)) { $this->_terms = []; $terms = $this->_queryCollectionFactory->create() ->setPopularQueryFilter($this->_storeManager->getStore()->getId()) ->setPageSize(100) ->load() ->getItems(); if (count($terms) == 0) { return $this; } $this->_maxPopularity = reset($terms)->getPopularity(); $this->_minPopularity = end($terms)->getPopularity(); $range = $this->_maxPopularity - $this->_minPopularity; $range = $range == 0 ? 1 : $range; $termKeys = []; foreach ($terms as $term) { if (!$term->getPopularity()) { continue; } $term->setRatio(($term->getPopularity() - $this->_minPopularity) / $range); $temp[$term->getQueryText()] = $term; $termKeys[] = $term->getQueryText(); } natcasesort($termKeys); foreach ($termKeys as $termKey) { $this->_terms[$termKey] = $temp[$termKey]; } } return $this; } /** * Load and return terms * * @return array * @throws NoSuchEntityException */ public function getTerms() { $this->_loadTerms(); return $this->_terms; } /** * Return search url * * @param DataObject $obj * @return string */ public function getSearchUrl($obj) { /** @var $url UrlInterface */ $url = $this->_urlFactory->create(); /* * url encoding will be done in Url.php http_build_query * so no need to explicitly called urlencode for the text */ $url->setQueryParam('q', $obj->getQueryText()); return $url->getUrl('catalogsearch/result'); } /** * Return max popularity * * @return int */ public function getMaxPopularity() { return $this->_maxPopularity; } /** * Return min popularity * * @return int */ public function getMinPopularity() { return $this->_minPopularity; } }