0

我是 Shopware 的新手。我了解如何添加自定义属性,但我找不到如何使其可搜索。我被困。有必要在产品中添加 ISBN 字段,使其与商品编号一样可搜索。我看到了这个并在那里下载了“这个插件的 ZIP 包”,但是我从中得到的一切都是搜索结果页面上的致命错误:

在第 196 行的 engine/Shopware/Bundle/SearchBundleDBAL/ProductNumberSearch.php 中不支持 Facet ShopwarePlugins\SwagESProduct\SearchBundle\SalesFacet

堆栈跟踪:

#0 引擎/Shopware/Bundle/SearchBundleDBAL/ProductNumberSearch.php(149):Shopware\Bundle\SearchBundleDBAL\ProductNumberSearch->getFacetHandler(Object(ShopwarePlugins\SwagESProduct\SearchBundle\SalesFacet))
#1 引擎/Shopware/Bundle/SearchBundleDBAL/ProductNumberSearch.php(96):Shopware\Bundle\SearchBundleDBAL\ProductNumberSearch->createFacets(Object(Shopware\Bundle\SearchBundle\Criteria), Object(Shopware\Bundle\StoreFrontBundle\Struct\ShopContext ))
#2 引擎/Shopware/Bundle/SearchBundle/ProductSearch.php(65): Shopware\Bundle\SearchBundleDBAL\ProductNumberSearch->search(Object(Shopware\Bundle\SearchBundle\Criteria), Object(Shopware\Bundle\StoreFrontBundle\Struct\ShopContext ))
#3 引擎/Shopware/Controllers/Frontend/Search.php(76): Shopware\Bundle\SearchBundle\ProductSearch->search(Object(Shopware\Bundle\SearchBundle\Criteria), Object(Shopware\Bundle\StoreFrontBundle\Struct\ShopContext ))
#4 引擎/库/Enlight/Controller/Action.php(159):Shopware_Controllers_Frontend_Search->defaultSearchAction()
#5 引擎/库/Enlight/Controller/Dispatcher/Default.php(523): Enlight_Controller_Action->dispatch('defaultSearchAc...')
#6 engine/Library/Enlight/Controller/Front.php(223): Enlight_Controller_Dispatcher_Default->dispatch(Object(Enlight_Controller_Request_RequestHttp), Object(Enlight_Controller_Response_ResponseHttp))
#7 引擎/Shopware/Kernel.php(180): Enlight_Controller_Front->dispatch()
#8 vendor/symfony/http-kernel/HttpCache/HttpCache.php(491): Shopware\Kernel->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#9 engine/Shopware/Components/HttpCache/AppCache.php(255): Symfony\Component\HttpKernel\HttpCache\HttpCache->forward(Object(Symfony\Component\HttpFoundation\Request), true, NULL)
#10 供应商/symfony/http-kernel/HttpCache/HttpCache.php(448): Shopware\Components\HttpCache\AppCache->forward(Object(Symfony\Component\HttpFoundation\Request), true)
#11 供应商/symfony/http-kernel/HttpCache/HttpCache.php(344): Symfony\Component\HttpKernel\HttpCache\HttpCache->fetch(Object(Symfony\Component\HttpFoundation\Request), true)
#12 引擎/Shopware/Components/HttpCache/AppCache.php(178): Symfony\Component\HttpKernel\HttpCache\HttpCache->lookup(Object(Symfony\Component\HttpFoundation\Request), true)
#13 供应商/symfony/http-kernel/HttpCache/HttpCache.php(210): Shopware\Components\HttpCache\AppCache->lookup(Object(Symfony\Component\HttpFoundation\Request), true)
#14 engine/Shopware/Components/HttpCache/AppCache.php(114): Symfony\Component\HttpKernel\HttpCache\HttpCache->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#15 shopware.php(117): Shopware\Components\HttpCache\AppCache->handle(Object(Symfony\Component\HttpFoundation\Request))
#16 {主要}

请大家解释一下如何使产品属性在 Shopware 中可搜索并给出正常工作示例?Shopware 版本是 5.2.21 以防万一。

这是我所做的:
engine/Shopware/Plugins/Community/Frontend/IsbnSearch/Bootstrap.php:

    使用 ShopwarePlugins\IsbnSearch\SearchTermQueryBuilder\SearchTermQueryBuilder;
    /**
     * 类 Shopware_Plugins_Frontend_IsbnSearch_Bootstrap
     */
    类 Shopware_Plugins_Frontend_IsbnSearch_Bootstrap 扩展 Shopware_Components_Plugin_Bootstrap
    {
        公共函数安装()
        {
            $this->subscribeEvent(
                'Enlight_Bootstrap_AfterInitResource_shopware_search_es.search_term_query_builder',
                'decorateSearchTermQueryBuilder'
            );

            返回真;
        }

        公共函数 decorateSearchTermQueryBuilder()
        {
            $searchTermQueryBuilder = 新的 SearchTermQueryBuilder(
                $this->get('shopware_search_es.search_term_query_builder')
            );
            Shopware()->Container()->set('shopware_search_es.search_term_query_builder', $searchTermQueryBuilder);
        }
    }

引擎/商店软件/插件/社区/前端/IsbnSearch/SearchTermQueryBuilder/SearchTermQueryBuilder.php:

    命名空间 ShopwarePlugins\IsbnSearch\SearchTermQueryBuilder;

    使用 ONGR\ElasticsearchDSL\Query\BoolQuery;
    使用 ONGR\ElasticsearchDSL\Query\MultiMatchQuery;
    使用 Shopware\Bundle\SearchBundleES\SearchTermQueryBuilderInterface;
    使用 Shopware\Bundle\StoreFrontBundle\Struct\ShopContextInterface;

    类 SearchTermQueryBuilder 实现 SearchTermQueryBuilderInterface
    {
        /**
         * @var SearchTermQueryBuilderInterface
         */
        私人 $decoratedQueryBuilder;

        /**
         * @param SearchTermQueryBuilderInterface $decoratedQueryBuilder
         */
        公共函数 __construct(SearchTermQueryBuilderInterface $decoratedQueryBuilder)
        {
            $this->decoratedQueryBuilder = $decoratedQueryBuilder;
        }

        /**
         * @param ShopContextInterface $context
         * @param $term
         * @return 布尔查询
         */
        公共函数 buildQuery(ShopContextInterface $context, $term)
        {
            $query = $this->decoratedQueryBuilder->buildQuery($context, $term);

            $matchQuery = 新的 MultiMatchQuery(
                ['attributes.properties.swag_es_product.isbn'],
                $期限
            );
            $query->add($matchQuery, BoolQuery::SHOULD);

            返回$查询;
        }
    }

我删除了代码的其余部分。因为它只是抛出了上面的错误。但看起来还不够。以下是属性的创建方式:

    $service = $this->container->get('shopware_attribute.crud_service');
    $service->update('s_articles_attributes', 'isbn', 'string');

    $service->update('s_articles_attributes', 'isbn', 'string', [
                '标签' => 'ISBN',
                'supportText' => 'ISBN',
                'helpText' => 'ISBN',
                '可翻译' => 真的,
                'displayInBackend' => 真,
                '实体' => 'Shopware\Models\Article\Article',
                '位置' => 140,
                '自定义' => 真的,
                '独特' => 真的,
            ]);

4

0 回答 0