将SVG视为Silverstripe中的图像

时间:2015-02-13 03:07:29

标签: php silverstripe

我正在尝试上传Silverstripe中的图片并将其视为图片而不是文档链接。

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

<a href="/assets/uploads/somefile.svg">somefile.svg</a>

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

<img src="/assets/uploads/somefile.svg">

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

3 个答案:

答案 0 :(得分: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;

或者作为YAML config

File:
  app_categories:
    image: 
      - svg

对于“插入媒体”屏幕上的文件上传,这个简单的更改足以将SVG正确地视为图像,从而触发正确的缠绕功能以使用<img>标记而非锚点。 / p>

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

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

答案 1 :(得分:1)

SS3中的

只需在config.yml中使用它:

File:
    allowed_extensions:
        - svg
Image:
    allowed_extensions:
        - svg

答案 2 :(得分:0)

我写了一个SilverStripe模块就是这样做(将SVG视为图像而不是文件):https://github.com/micschk/silverstripe-svg-images/

如果您不想要模块,请参阅README以获取有关如何设置SVG-as-image的一般指示。