behappy/elasticsearch-plugin

BitBag Elasticsearch 插件,适用于 Sylius。


README


概述

基于 FOSElasticaBundleSyliusElasticsearch 集成。此插件的主要目标是支持在前端产品列表页面上通过选项、属性、分类、渠道和名称进行产品筛选。它完全替换了默认的 Sylius sylius_shop_product_index 路由。

此外,该插件具有友好的 Sylius 架构,使得将资源映射到 Elastic 文档更加容易。它也非常灵活,因此您可以根据特定的业务需求自定义现有功能。

支持

您可以通过 此页面 订购我们的支持。

我们在 Sylius 和 Pimcore 之上进行令人惊叹的电子商务项目开发。需要帮助或额外的资源来完成项目吗?请发送电子邮件到 mikolaj.krol@bitbag.pl 或访问 我们的网站!🚀

演示

我们创建了一个演示应用程序,其中包含一些有用的插件用例!访问 demo.bitbag.shop 来查看它。管理员可以通过 demo.bitbag.shop/admin 链接和 sylius: sylius 凭据访问。

安装

$ composer require bitbag/elasticsearch-plugin

将插件依赖项添加到您的 AppKernel.php 文件

public function registerBundles()
{
    return array_merge(parent::registerBundles(), [
        ...
        
        new \FOS\ElasticaBundle\FOSElasticaBundle(),
        new \BitBag\SyliusElasticsearchPlugin\BitBagSyliusElasticsearchPlugin(),
    ]);
}

在您的 app/config/config.yml 文件中导入所需的配置

# app/config/config.yml

imports:
    ...
    
    - { resource: "@BitBagSyliusElasticsearchPlugin/Resources/config/config.yml" }

在您的 app/config/routing.yml 文件之上导入路由

# app/config/routing.yml

bitbag_sylius_elasticsearch_plugin:
    resource: "@BitBagSyliusElasticsearchPlugin/Resources/config/routing.yml"
    
redirect_sylius_shop_product_index:
    path: /{_locale}/taxons/{slug}
    controller: Symfony\Bundle\FrameworkBundle\Controller\RedirectController::redirectAction
    defaults:
        route: bitbag_sylius_elasticsearch_plugin_shop_list_products
        permanent: true
    requirements:
        slug: .+

当 Elasticsearch 服务器运行时,执行以下命令

$ bin/console fos:elastica:populate

注意:如果您在生产环境中运行它,请向此命令添加 -e prod 标志。Elastic 创建时带有环境后缀。

使用方法

渲染商店产品列表

现在当您访问 /{_locale}/products/taxon/{slug} 页面时,您应该看到一组全新的过滤器。您应该看到如下内容

您可能还想将水平菜单指向新的产品列表页面。按照以下说明操作

  1. 如果您还没有这样做,请创建一个位于 app/Resources/SyliusShopBundle/views/Taxon 目录下的 _horizontalMenu.html.twig 文件。
  2. sylius_shop_product_index 替换为 bitbag_sylius_elasticsearch_plugin_shop_list_products
  3. 使用 bin/console cache:clear 命令清理您的缓存。
  4. 🎉

在过滤器菜单中排除选项和属性

您可能不想在菜单中显示某些特定的选项或属性。您可以为此设置特定的参数

parameters:
    bitbag_es_excluded_filter_options: []
    bitbag_es_excluded_filter_attributes: ['book_isbn', 'book_pages']

默认情况下,所有选项和属性都会被索引。更改这些参数后,请记住再次运行 bin/console fo:el:po 命令(这是 fos:elastica:populate 的快捷方式)。

重新索引

默认情况下,当前索引监听所有 Doctrine 事件。您可以通过在 config.yml 文件中覆盖索引定义来为每个索引覆盖此设置

fos_elastica:
    indexes:
        bitbag_attribute_taxons:
            types:
                default:
                    persistence:
                        listener:
                            insert: true
                            update: false
                            delete: true

目前,具有 bitbag_shop_productbitbag_attribute_taxonsbitbag_option_taxons 键的索引是可用的。

自定义

您可以使用以下服务进行装饰,以及可以扩展的表单:

bitbag.sylius_elasticsearch_plugin.context.product_attributes                                BitBag\SyliusElasticsearchPlugin\Context\ProductAttributesContext
bitbag.sylius_elasticsearch_plugin.context.product_options                                   BitBag\SyliusElasticsearchPlugin\Context\ProductOptionsContext
bitbag.sylius_elasticsearch_plugin.context.taxon                                             BitBag\SyliusElasticsearchPlugin\Context\TaxonContext
bitbag.sylius_elasticsearch_plugin.string_formatter                                          BitBag\SyliusElasticsearchPlugin\Formatter\StringFormatter
bitbag.sylius_elasticsearch_plugin.twig.extension.unset_array_elements                       BitBag\SyliusElasticsearchPlugin\Twig\Extension\UnsetArrayElementsExtension
bitbag_sylius_elasticsearch_plugin.controller.action.shop.list_products                      BitBag\SyliusElasticsearchPlugin\Controller\Action\Shop\ListProductsAction
bitbag_sylius_elasticsearch_plugin.controller.request_data_handler.pagination                BitBag\SyliusElasticsearchPlugin\Controller\RequestDataHandler\PaginationDataHandler
bitbag_sylius_elasticsearch_plugin.controller.request_data_handler.shop_product_list         BitBag\SyliusElasticsearchPlugin\Controller\RequestDataHandler\ShopProductListDataHandler
bitbag_sylius_elasticsearch_plugin.controller.request_data_handler.shop_products_sort        BitBag\SyliusElasticsearchPlugin\Controller\RequestDataHandler\ShopProductsSortDataHandler
bitbag_sylius_elasticsearch_plugin.finder.product_attributes                                 BitBag\SyliusElasticsearchPlugin\Finder\ProductAttributesFinder
bitbag_sylius_elasticsearch_plugin.finder.product_options                                    BitBag\SyliusElasticsearchPlugin\Finder\ProductOptionsFinder
bitbag_sylius_elasticsearch_plugin.finder.shop_products                                      BitBag\SyliusElasticsearchPlugin\Finder\ShopProductsFinder
bitbag_sylius_elasticsearch_plugin.form.type.choice_mapper.product_attributes                BitBag\SyliusElasticsearchPlugin\Form\Type\ChoiceMapper\ProductAttributesMapper
bitbag_sylius_elasticsearch_plugin.form.type.choice_mapper.product_options                   BitBag\SyliusElasticsearchPlugin\Form\Type\ChoiceMapper\ProductOptionsMapper
bitbag_sylius_elasticsearch_plugin.form.type.name_filter                                     BitBag\SyliusElasticsearchPlugin\Form\Type\NameFilterType
bitbag_sylius_elasticsearch_plugin.form.type.price_filter                                    BitBag\SyliusElasticsearchPlugin\Form\Type\PriceFilterType
bitbag_sylius_elasticsearch_plugin.form.type.product_attributes_filter                       BitBag\SyliusElasticsearchPlugin\Form\Type\ProductAttributesFilterType
bitbag_sylius_elasticsearch_plugin.form.type.product_options_filter                          BitBag\SyliusElasticsearchPlugin\Form\Type\ProductOptionsFilterType
bitbag_sylius_elasticsearch_plugin.form.type.shop_products_filter                            BitBag\SyliusElasticsearchPlugin\Form\Type\ShopProductsFilterType
bitbag_sylius_elasticsearch_plugin.property_builder.attribute                                BitBag\SyliusElasticsearchPlugin\PropertyBuilder\AttributeBuilder
bitbag_sylius_elasticsearch_plugin.property_builder.attribute_taxons                         BitBag\SyliusElasticsearchPlugin\PropertyBuilder\AttributeTaxonsBuilder
bitbag_sylius_elasticsearch_plugin.property_builder.channel_pricing                          BitBag\SyliusElasticsearchPlugin\PropertyBuilder\ChannelPricingBuilder
bitbag_sylius_elasticsearch_plugin.property_builder.channels                                 BitBag\SyliusElasticsearchPlugin\PropertyBuilder\ChannelsBuilder
bitbag_sylius_elasticsearch_plugin.property_builder.option                                   BitBag\SyliusElasticsearchPlugin\PropertyBuilder\OptionBuilder
bitbag_sylius_elasticsearch_plugin.property_builder.option_taxons                            BitBag\SyliusElasticsearchPlugin\PropertyBuilder\OptionTaxonsBuilder
bitbag_sylius_elasticsearch_plugin.property_builder.product_created_at                       BitBag\SyliusElasticsearchPlugin\PropertyBuilder\ProductCreatedAtPropertyBuilder
bitbag_sylius_elasticsearch_plugin.property_builder.product_name                             BitBag\SyliusElasticsearchPlugin\PropertyBuilder\ProductNameBuilder
bitbag_sylius_elasticsearch_plugin.property_builder.product_taxons                           BitBag\SyliusElasticsearchPlugin\PropertyBuilder\ProductTaxonsBuilder
bitbag_sylius_elasticsearch_plugin.property_builder.sold_units                               BitBag\SyliusElasticsearchPlugin\PropertyBuilder\SoldUnitsPropertyBuilder
bitbag_sylius_elasticsearch_plugin.property_name_resolver.attribute                          BitBag\SyliusElasticsearchPlugin\PropertyNameResolver\ConcatedNameResolver
bitbag_sylius_elasticsearch_plugin.property_name_resolver.channel_pricing                    BitBag\SyliusElasticsearchPlugin\PropertyNameResolver\ConcatedNameResolver
bitbag_sylius_elasticsearch_plugin.property_name_resolver.name                               BitBag\SyliusElasticsearchPlugin\PropertyNameResolver\ConcatedNameResolver
bitbag_sylius_elasticsearch_plugin.property_name_resolver.option                             BitBag\SyliusElasticsearchPlugin\PropertyNameResolver\ConcatedNameResolver
bitbag_sylius_elasticsearch_plugin.property_name_resolver.price                              BitBag\SyliusElasticsearchPlugin\PropertyNameResolver\PriceNameResolver
bitbag_sylius_elasticsearch_plugin.query_builder.contains_name                               BitBag\SyliusElasticsearchPlugin\QueryBuilder\ContainsNameQueryBuilder
bitbag_sylius_elasticsearch_plugin.query_builder.has_attribute_taxon                         BitBag\SyliusElasticsearchPlugin\QueryBuilder\HasTaxonQueryBuilder
bitbag_sylius_elasticsearch_plugin.query_builder.has_attributes                              BitBag\SyliusElasticsearchPlugin\QueryBuilder\HasAttributesQueryBuilder
bitbag_sylius_elasticsearch_plugin.query_builder.has_channel                                 BitBag\SyliusElasticsearchPlugin\QueryBuilder\HasChannelQueryBuilder
bitbag_sylius_elasticsearch_plugin.query_builder.has_option_taxon                            BitBag\SyliusElasticsearchPlugin\QueryBuilder\HasTaxonQueryBuilder
bitbag_sylius_elasticsearch_plugin.query_builder.has_options                                 BitBag\SyliusElasticsearchPlugin\QueryBuilder\HasOptionsQueryBuilder
bitbag_sylius_elasticsearch_plugin.query_builder.has_price_between                           BitBag\SyliusElasticsearchPlugin\QueryBuilder\HasPriceBetweenQueryBuilder
bitbag_sylius_elasticsearch_plugin.query_builder.has_product_taxon                           BitBag\SyliusElasticsearchPlugin\QueryBuilder\HasTaxonQueryBuilder
bitbag_sylius_elasticsearch_plugin.query_builder.is_enabled                                  BitBag\SyliusElasticsearchPlugin\QueryBuilder\IsEnabledQueryBuilder
bitbag_sylius_elasticsearch_plugin.query_builder.product_attributes_by_taxon                 BitBag\SyliusElasticsearchPlugin\QueryBuilder\ProductAttributesByTaxonQueryBuilder
bitbag_sylius_elasticsearch_plugin.query_builder.product_options_by_taxon                    BitBag\SyliusElasticsearchPlugin\QueryBuilder\ProductOptionsByTaxonQueryBuilder
bitbag_sylius_elasticsearch_plugin.query_builder.shop_products                               BitBag\SyliusElasticsearchPlugin\QueryBuilder\ShopProductsQueryBuilder

您可以在您的参数文件(parameters.yml(.dist))中覆盖的参数

bitbag_es_excluded_filter_attributes                                      []
bitbag_es_excluded_filter_options                                         []
bitbag_es_shop_attribute_property_prefix                                  attribute
bitbag_es_shop_attribute_taxons_property                                  attribute_taxons
bitbag_es_shop_channels_property                                          channels
bitbag_es_shop_enabled_property                                           enabled
bitbag_es_shop_name_property_prefix                                       name
bitbag_es_shop_option_property_prefix                                     option
bitbag_es_shop_option_taxons_property                                     option_taxons
bitbag_es_shop_product_created_at                                         product_created_at
bitbag_es_shop_product_price_property_prefix                              price
bitbag_es_shop_product_sold_units                                         sold_units
bitbag_es_shop_product_taxons_property                                    product_taxons
fos_elastica.default_index                                                bitbag_shop_product

测试

$ composer install
$ cd tests/Application
$ yarn install
$ yarn run gulp
$ bin/console assets:install web -e test
$ bin/console doctrine:schema:create -e test
$ elasticsearch 
$ bin/console fos:elastica:populate -e test
$ bin/console server:run 127.0.0.1:8080 -d web -e test
$ open https://:8080
$ bin/behat
$ bin/phpspec run

贡献

了解更多关于我们的贡献流程,请访问http://docs.sylius.org/en/latest/contributing/