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

如何在Shopware插件配置中为sw-media-field设置默认文件夹?

在Shopware插件配置中为sw-media-field设置默认文件夹

正确的XML配置方式

你之前的配置未生效的核心原因:Shopware插件配置XML中,sw-media-field的自定义属性需要嵌套在<config>节点内,而非直接作为组件的子节点。正确配置如下:

<component name="sw-media-field">
    <name>image</name>
    <label>Image</label>
    <config>
        <defaultFolder>example</defaultFolder>
    </config>
</component>

关键注意事项

  • defaultFolder的值必须是媒体文件夹的技术名称(Technical Name),而非后台显示的名称。确保你在Shopware后台创建的媒体文件夹技术名称为example,或通过插件自动创建(符合官方质量指南要求)。

自动创建媒体文件夹(符合质量指南)

根据Shopware插件质量指南,插件应创建独立的媒体文件夹。你可以通过Migration类在插件安装时自动完成:

<?php declare(strict_types=1);

namespace YourPluginNamespace\Migration;

use Shopware\Core\Framework\Migration\MigrationStep;
use Shopware\Core\Framework\Uuid\Uuid;
use Shopware\Core\Content\Media\Aggregate\MediaFolder\MediaFolderRepository;
use Shopware\Core\Content\Media\Aggregate\MediaFolderConfig\MediaFolderConfigRepository;
use Shopware\Core\Content\Media\MediaType\MediaTypeRepository;
use Shopware\Core\Framework\Context;
use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\EqualsFilter;

class Migration16XXXXXXXXXCreateExampleMediaFolder extends MigrationStep
{
    public function getCreationTimestamp(): int
    {
        return 16XXXXXXXXX; // 替换为当前时间戳
    }

    public function update(Context $context): void
    {
        $folderRepository = $this->container->get(MediaFolderRepository::class);
        $folderConfigRepository = $this->container->get(MediaFolderConfigRepository::class);
        $mediaTypeRepository = $this->container->get(MediaTypeRepository::class);

        // 检查文件夹是否已存在
        $existingFolder = $folderRepository->search(
            (new Criteria())->addFilter(new EqualsFilter('technicalName', 'example')),
            $context
        )->first();

        if ($existingFolder) {
            return;
        }

        // 创建媒体文件夹
        $folderId = Uuid::randomHex();
        $folderRepository->create([
            [
                'id' => $folderId,
                'name' => 'Example', // 后台显示名称
                'technicalName' => 'example', // 对应XML中的defaultFolder值
                'parentId' => $this->getDefaultMediaFolderId($context),
            ]
        ], $context);

        // 配置允许上传图片类型
        $imageTypeId = $mediaTypeRepository->search(
            (new Criteria())->addFilter(new EqualsFilter('name', 'IMAGE')),
            $context
        )->first()->getId();

        $folderConfigRepository->create([
            [
                'mediaFolderId' => $folderId,
                'mediaTypeId' => $imageTypeId,
            ]
        ], $context);
    }

    private function getDefaultMediaFolderId(Context $context): string
    {
        return $this->container->get(MediaFolderRepository::class)->search(
            (new Criteria())->addFilter(new EqualsFilter('technicalName', 'default')),
            $context
        )->first()->getId();
    }
}

生效步骤

  1. 保存修改后的XML配置文件
  2. 运行Migration(或重新安装插件)以创建媒体文件夹
  3. 清除Shopware缓存
  4. 进入插件配置页面,测试sw-media-field的上传路径,文件将自动存入example文件夹

内容的提问来源于stack exchange,提问作者5chwarz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 14:27:23