首页 > 解决方案 > SilverStripe 图像填充功能导致服务器错误

问题描述

我正在尝试在银色条纹内部进行动态裁剪。过去我们使用

$Article_Image->SetWidth(390)

有效。它返回了正确宽度的图像。但是我现在想返回一个使用填充函数返回 390 x 235 图像的图像。到目前为止我得到的返回一个“服务器错误”,但它没有返回任何有用的错误。

在我的 newsArticle 类中,我有以下内容:

控制器 - 电流

class newsArticle extends Page {

    private static $has_one = array(
        'Article_Image' => 'Image'
    );
    public function ResizedImage() {
      return $this->Article_Image()->Fit(390,235);
    }
}

然后在我的页面模板中,我有以下内容:

模板 - 当前

<% if $Article_Image %>
    <div class="col-md-5 col-lg-4 nopadding">
        $ResizedImage()
    </div>
<% end_if %>

已经试过了

我已经尝试在模板内做 $Article_Image->Fit(390,235) 但它不起作用。我也尝试过以下代码,但它返回错误“无法在非成员对象上调用 Fit() 方法”

控制器 - 已经尝试过

class newsArticle extends Page {

    private static $has_one = array(
        'Article_Image' => 'Image'
    );
    public function ResizedImage($Image) {
      return $Image->Fit(390,235);
    }
}

模板 - 已经尝试过

<% if $Article_Image %>
    <div class="col-md-5 col-lg-4 nopadding">
        $ResizedImage($Article_Image)
    </div>
<% end_if %>

如何让它返回适合特定尺寸的图像?我确信它可以完成,因为它已在 Silverstripe 的文档中提到: https ://docs.silverstripe.org/en/4/developer_guides/files/images/

我正在使用 silverstripe 3.1.12

标签: phpsilverstripe

解决方案


最简单的方法是在模板中执行以下操作。

$Article_Image.CroppedImage(390,235)

您不需要ResizedImage在控制器中有功能。

这是第 3 版文档的链接:

https://docs.silverstripe.org/en/3.1/developer_guides/files/image/

Fit 方法是在 SS4 中引入的。


推荐阅读