系统学习magento二次开发,推荐小册:《Magento中文全栈二次开发 》
本小册面向Magento2以上版本,书代码及示例兼容magento2.0-2.4版本。涵盖了magento前端开发,后端开发,magento2主题,magento2重写,magento2 layout,magento2控制器,magento2 block等相关内容,带领您成为magento开发技术专家。
在Magento 2中,您可以使用Search API和Search Result API来执行搜索操作。以下是一个基本的搜索示例:
use Magento\Framework\App\Action\Action;
use Magento\Framework\App\Action\Context;
use Magento\Framework\View\Result\PageFactory;
class Search extends Action
{
protected $resultPageFactory;
public function __construct(Context $context, PageFactory $resultPageFactory)
{
$this->resultPageFactory = $resultPageFactory;
parent::__construct($context);
}
public function execute()
{
$query = $this->getRequest()->getParam('q');
$resultPage = $this->resultPageFactory->create();
// Use the following code to execute a search query using the Search API
$searchCriteria = $this->_objectManager->create('\Magento\Framework\Api\SearchCriteriaInterface');
$searchCriteria->setRequestName('quick_search_container');
$searchCriteria->setFilterGroups([]);
$searchCriteria->setPageSize(10);
$searchCriteria->setCurrentPage(1);
$searchResults = $this->_objectManager->create('\Magento\CatalogSearch\Api\SearchInterface')->search($searchCriteria);
// Use the following code to execute a search query using the Search Result API
$searchCriteriaBuilder = $this->_objectManager->create('\Magento\Framework\Api\SearchCriteriaBuilder');
$searchCriteriaBuilder->addFilter('name', '%' . $query . '%', 'like');
$searchCriteriaBuilder->setPageSize(10);
$searchCriteriaBuilder->setCurrentPage(1);
$searchCriteria = $searchCriteriaBuilder->create();
$searchResults = $this->_objectManager->create('\Magento\Catalog\Model\ResourceModel\Product\Collection')->addAttributeToSelect('*')->addAttributeToFilter('status', \Magento\Catalog\Model\Product\Attribute\Source\Status::STATUS_ENABLED)->setVisibility(\Magento\Catalog\Model\Product\Visibility::VISIBILITY_BOTH)->setCurPage($searchCriteria->getCurrentPage())->setPageSize($searchCriteria->getPageSize());
$resultPage->getConfig()->getTitle()->set(__('Search results for: "%1"', $query));
return $resultPage;
}
}在此示例中,我们首先从请求中获取查询参数,然后使用PageFactory来创建一个页面。我们随后执行了两个搜索操作:一个使用Search API,一个使用Search Result API。在使用Search API时,我们创建了一个SearchCriteria对象,并使用CatalogSearch API的SearchInterface执行了搜索操作。在使用Search Result API时,我们使用SearchCriteriaBuilder来构建搜索条件,并使用Magento\Catalog\Model\ResourceModel\Product\Collection的方法来执行搜索操作。最后,我们将结果设置为页面的标题,并返回结果页面。
请注意,这只是一个基本的搜索示例。在实际使用中,您需要根据您的具体需求进行更多的搜索条件设置和结果处理。