You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Shopware 6自定义区块添加8个自定义字段实现方法咨询

Shopware 6 自定义区块添加自定义字段实现方案

1. 扩展区块注册代码的默认配置

在区块注册的defaultConfig中直接添加8个数字/滚动进度类型的自定义字段,并设置初始默认值:

Shopware.Service('cmsService').registerCmsBlock({
    name: 'my-image-text-reversed',
    category: 'text-image',
    label: 'My Image Text Block!',
    component: 'sw-cms-block-my-image-text-reversed',
    previewComponent: 'sw-cms-preview-my-image-text-reversed',
    defaultConfig: {
        marginBottom: '20px',
        marginTop: '20px',
        marginLeft: '0px',
        marginRight: '0px',
        sizingMode: 'boxed',
        // 新增8个自定义字段,设置默认值
        scrollProgress1: 0,
        scrollProgress2: 25,
        scrollProgress3: 50,
        scrollProgress4: 75,
        scrollProgress5: 100,
        scrollProgress6: 0,
        scrollProgress7: 50,
        scrollProgress8: 100
    },
    slots: {
        left: 'text',
        right: 'image'
    }
});

2. 在区块组件中配置后台编辑表单

修改sw-cms-block-my-image-text-reversed Vue组件,添加自定义字段的编辑控件,让后台用户可以调整这些值:

<template>
  <sw-cms-block v-bind="$props">
    <template #config>
      <!-- 保留原有边距、布局配置项 -->
      <sw-cms-block-config-margin v-model="block.config" />
      <sw-cms-block-config-sizing-mode v-model="block.config" />
      
      <!-- 新增8个数字输入控件,绑定自定义字段 -->
      <sw-number-field
        v-for="num in 8"
        :key="`scrollProgress${num}`"
        :label="`滚动进度 ${num}`"
        v-model="block.config[`scrollProgress${num}`]"
        :min="0"
        :max="100"
        step="1"
        style="margin: 10px 0"
      />
    </template>
  </sw-cms-block>
</template>

<script>
import 'sw-cms-block';
import 'sw-cms-block-config-margin';
import 'sw-cms-block-config-sizing-mode';
import 'sw-number-field';

export default {
  name: 'sw-cms-block-my-image-text-reversed',
  props: {
    block: {
      type: Object,
      required: true
    }
  }
};
</script>

3. 同步预览组件的字段渲染

修改sw-cms-preview-my-image-text-reversed组件,让后台预览能实时反映字段变化:

<template>
  <div class="sw-cms-preview-my-image-text-reversed">
    <!-- 预览自定义字段对应的效果 -->
    <div class="progress-group">
      <div 
        v-for="num in 8"
        :key="`preview-progress-${num}`"
        class="preview-progress-bar"
        :style="{ width: `${block.config[`scrollProgress${num}`]}%` }"
      >
        进度 {{ num }}: {{ block.config[`scrollProgress${num}`] }}%
      </div>
    </div>
    
    <!-- 原有区块预览内容 -->
    <div class="slot-container">
      <div class="left-slot">
        <sw-cms-slot-preview :slot="block.slots.left" />
      </div>
      <div class="right-slot">
        <sw-cms-slot-preview :slot="block.slots.right" />
      </div>
    </div>
  </div>
</template>

<script>
import 'sw-cms-slot-preview';

export default {
  name: 'sw-cms-preview-my-image-text-reversed',
  props: {
    block: {
      type: Object,
      required: true
    }
  }
};
</script>

<style scoped>
.progress-group {
  padding: 10px;
  background: #f5f5f5;
  margin-bottom: 20px;
}
.preview-progress-bar {
  height: 24px;
  line-height: 24px;
  padding: 0 10px;
  background: #2196F3;
  color: #fff;
  margin: 5px 0;
  border-radius: 4px;
}
.slot-container {
  display: flex;
  gap: 20px;
}
.left-slot, .right-slot {
  flex: 1;
  padding: 20px;
  background: #fff;
  border: 1px dashed #ddd;
}
</style>

4. 前端模板中使用字段控制区块设计

在区块的前端渲染模板(src/Resources/views/storefront/block/cms-block-my-image-text-reversed.html.twig)中,通过block.config调用自定义字段值,控制样式或结构:

{% block block_my_image_text_reversed %}
<div class="cms-block-my-image-text-reversed">
  <!-- 使用自定义字段控制元素样式 -->
  {% for num in 1..8 %}
    <div class="custom-progress-bar" 
         style="width: {{ block.config['scrollProgress'~num] }}%"
         data-progress="{{ block.config['scrollProgress'~num] }}">
    </div>
  {% endfor %}
  
  <div class="row">
    <div class="col-md-6">
      {% block block_my_image_text_reversed_left %}
        {% sw_slot "left" %}
      {% endblock %}
    </div>
    <div class="col-md-6">
      {% block block_my_image_text_reversed_right %}
        {% sw_slot "right" %}
      {% endblock %}
    </div>
  </div>
</div>
{% endblock %}

内容的提问来源于stack exchange,提问作者Illia Yalovoi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 03:57:44