【问题标题】:Trying to create custom block type in orocommerce but I am getting: Could not load a block type "product_variants".尝试在 orocommerce 中创建自定义块类型,但我得到:无法加载块类型“product_variants”。
【发布时间】:2018-02-24 19:49:55
【问题描述】:

尝试在 orocommerce 中创建自定义块类型,但我得到:无法加载块类型“product_variants”。

我已经创建了 block_types yml 文件 资源/config/block_types.yml

  services:
       xngage_product.layout.block_type.product_variants:
       parent: oro_layout.block_type.abstract_configurable_container
       calls:
        - [setOptionsConfig, [{variants: {required: true}}]]
        - [setName, ['product_variants']]
    tags:
         - { name: layout.block_type, alias: product_variants }


xngage_product.layout.block_type_extension.product_variants:
    class: Xngage\ProductBundle\Layout\Extension\ProductVariantsExtension
    tags:
        - { name: layout.block_type_extension, alias: product_variants }

并在 Resources/layouts/xngage_theme/oro_product_frontend_product_view/configure_product.yml 中为配置产品创建布局

layout:
imports:
    - oro_product_view

actions:
    - '@setBlockTheme':
        themes: 'configurable_product.html.twig'

    - '@add':
        id: product_variants
        blockType: product_variants
        parentId: product_specification_container
        siblingId: product_specification
        options:
            variants: '=data["product_variants"].getVariants(data["product"])'

conditions: 'context["product_type"] == "simple"'

请问有什么遗漏的步骤吗?

【问题讨论】:

    标签: php symfony symfony-2.1 orocrm orocommerce


    【解决方案1】:

    确保您在容器中注册了Resources/config/block_types.yml。 注册示例可以在这里找到https://github.com/orocommerce/orocommerce/blob/master/src/Oro/Bundle/CMSBundle/DependencyInjection/OroCMSExtension.php#L25

    【讨论】:

    【解决方案2】:

    因此,使用 Oro 布局系统,您可以基于块创建自定义小部件因此负责的类父级是 Oro\Bundle\LayoutBundle\Layout\Block\Type\ConfigurableType 或者您可以通过父级基于容器创建自定义小部件oro_layout.block_type.abstract_configurable 或

    oro_layout.block_type.abstract_configurable_container:
        oro_layout.block_type.abstract_configurable:
            abstract: true
            class: Oro\Bundle\LayoutBundle\Layout\Block\Type\ConfigurableType
        oro_layout.block_type.abstract_configurable_container:
            abstract: true
            parent: oro_layout.block_type.abstract_configurable
            calls:
                - [setParent, ['container']]
    

    在里面创建block_types.yml ibnab/Bundle/CustomWidgetBundle/Resources/config/block_types.yml 并填写:

    ibnab_custom_widget.layout.type.product:
        parent:  oro_layout.block_type.abstract_configurable
        calls:
            - [setOptionsConfig, [{product_id: {}}]]
            - [setName, ['ibnab_custom_widget_product']]
    

    注意不要忘记在 DependencyInjection/CustomWidgetExtension 中加载你的 block_types.yml,例如:

    $loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
    $loader->load('services.yml');
    $loader->load('block_types.yml');
    

    在这里,您添加了一个基于块小部件的自定义小部件,它能够接受和选择 product_id,您可以添加例如是必需的

    - [setOptionsConfig, [{product_id: {required: true}}]]
    

    在布局处理程序 oro_product_frontend_product_view 内部(带有产品页面视图的路由名称的文件夹,当您在产品详细信息页面上时可以很好地调度),因此您可以填写 layout.yml 例如:

    layout:
        actions:
            - '@setBlockTheme':
                themes: 'CustomWidgetBundle:layouts:blank/oro_product_frontend_product_view/layout.html.twig' 
            - '@add':
                id:  ibnab_custom_widget_product_direct
                parentId: product_view_primary_container
                blockType:  ibnab_custom_widget_product
                prepend: true
                options:
                    product_id: '=data["product"].getId()'
    

    现在你可以在你的 layout.twig 里面使用这个选项 product_id

    完整课程OroCommerce Custom widget type based on block or container

    【讨论】:

      猜你喜欢
      • 2018-02-24
      • 2014-11-02
      • 2017-03-06
      • 2013-12-04
      • 2021-04-16
      • 2014-01-19
      • 2013-03-01
      • 1970-01-01
      • 2018-11-23
      相关资源
      最近更新 更多