将SVG视为Silverstripe中的图像

jam*_*ckp 3 php silverstripe

我正在尝试上传Silverstripe中的图像,并将它们视为图像而不是文档链接.

我已经将SVG添加到允许的文件类型中并且可以上传SVG文件但是当我点击插入时,编辑器将标记插入

<a href="/assets/uploads/somefile.svg">somefile.svg</a>
Run Code Online (Sandbox Code Playgroud)

我想将SVG视为任何其他图像格式,其中插入将标记作为常规图像插入

<img src="/assets/uploads/somefile.svg">
Run Code Online (Sandbox Code Playgroud)

实现这一目标的最佳方法是什么?

Tur*_*erj 6

调试后HtmlEditorField.js,我发现SVG未显示的问题是"插入媒体"屏幕的上传字段不将SVG视为图像.(我原本以为问题是TinyMCE,但事实并非如此)

我知道File该类有一个静态属性app_categories ,其中包含SS认为是图像的所有扩展.默认情况下,SVG不在此列表中.

在Silverstripe 3.1中,如果指定以下内容,则会将SVG添加到"图像"类别:

$categories = File::config()->app_categories;
$categories['image'][] = 'svg';
File::config()->app_categories = $categories;
Run Code Online (Sandbox Code Playgroud)

或者作为YAML配置:

File:
  app_categories:
    image: 
      - svg
Run Code Online (Sandbox Code Playgroud)

这个简单的更改足以让"插入媒体"屏幕上的文件上传正确地将SVG视为图像,而这反过来又触发了正确的缠绕功能来使用<img>标签而不是锚.

虽然此方法可以解决您的特定问题,但是在Silverstripe中的其他部分可能会产生副作用,无法将SVG添加到图像应用类别.

还有一件事,我需要更新我的.htaccess资产文件夹中的文件,以便查看SVG文件,否则我收到403 Forbidden错误.