系统学习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的方法来执行搜索操作。最后,我们将结果设置为页面的标题,并返回结果页面。
请注意,这只是一个基本的搜索示例。在实际使用中,您需要根据您的具体需求进行更多的搜索条件设置和结果处理。