首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尝试在orocommerce中创建自定义块类型,但我得到:无法加载块类型"product_variants“。

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

Stack Overflow用户
提问于 2017-09-15 23:04:59
回答 2查看 438关注 0票数 0

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

我已经在资源/配置/块_类型.yml中创建了block_types yml文件

代码语言:javascript
复制
  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中配置产品创建了布局

代码语言:javascript
复制
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"'

有遗漏的步骤吗?

EN

回答 2

Stack Overflow用户

发布于 2017-09-16 14:29:05

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

票数 2
EN

Stack Overflow用户

发布于 2019-12-23 21:50:21

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

代码语言:javascript
复制
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']]

在Ibnab/Bundle/CustomWidgetBundle/Resources/config/block_types.yml中创建block_types.yml并填充:

代码语言:javascript
复制
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,例如:

代码语言:javascript
复制
$loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
$loader->load('services.yml');
$loader->load('block_types.yml');

在这里,您添加了一个基于数据块小部件的自定义小部件,该小部件可以接受和选择product_id,例如,您可以添加必填项

代码语言:javascript
复制
- [setOptionsConfig, [{product_id: {required: true}}]]

在布局处理程序oro_product_frontend_product_view中(包含产品页面视图的路由名称的文件夹,当您在产品详细信息页面上时,将很好地调度该文件夹),因此您可以使用以下内容填充layout.yml:

代码语言:javascript
复制
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()'

现在,您可以通过此选项product_id在layout.twig中使用inside

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46242625

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档