Как я могу переопределить результат поиска по каталогу в Magento 2?

#php #magento #magento2

#php #magento #magento2

Вопрос:

Я работаю над пользовательским плагином, мне нужно переопределить результаты поиска товаров по каталогу.

например, всегда добавление удаление некоторого продукта в результат.

Что-то вроде the_posts фильтра WordPress.


Если это невозможно, могу ли я переопределить результат поиска по каталогу html?

Ответ №1:

Да, вы можете переопределить результат поиска по каталогу, выполнив следующие изменения в вашем пользовательском модуле в вашем контроллере

 <?php
namespace VendorModuleControllerSearch;
class Result extends MagentoCatalogSearchControllerResultIndex
{
public function execute($coreRoute = null)
{
return parent::execute($coreRoute);
}
}
  

В вашем блоке

 <?php

$query = $this->getRequest()->getParam('q');

$objectManager = MagentoFrameworkAppObjectManager::getInstance();
$productFactory = $objectManager->create('MagentoCatalogModelProductFactory');
$collection = $productFactory->create()->getCollection();

$query = $this->getRequest()->getParam('q');

?>

<div>
    <form class="form minisearch" id="searchProducts"  method="get">
         <div class="col-xs-12 col-md-6 col-sm-3">
            <input type="text" name="q" id="searchbox" value="" class="searchbox" placeholder="Type here...." />
          </div>
          <div class="col-xs-6 col-md-2 col-sm-3"> 
            <button type="submit" class="btn new-searchbtn action search menu-search" id="submitBtn" title="Search">
              <span class="search-text">search</span>
              <span class="search-icon"></span>
            </button>
          </div>
    </form>
</div>
<?php if ($collection->count()): ?>
<?= $block->getChildHtml('tagged_product_list_rss_link') ?>
<div class="search results container">
    <?php if ($messages = $block->getNoteMessages()):?>
    <div class="message notice">
        <div>
            <?php foreach ($messages as $message):?>
                <?= /* @escapeNotVerified */ $message ?><br />
            <?php endforeach;?>
        </div>
    </div>
    <?php endif; ?>
    <?= $block->getProductListHtml() ?>
</div>
<?php// else: ?>
<?php endif; ?>
  

И, наконец, ваш vendor/module/view/frontent/layout/catalogsearch_result_index.xml будет выглядеть следующим образом.

 <?xml version="1.0"?>
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" layout="1column" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
    <body>

         <referenceBlock name="search.result">
            <action method="setTemplate">
                <argument name="template" xsi:type="string">Vendor_Module::result.phtml</argument>
            </action>
        </referenceBlock>
    </body>
</page>