在Silverstripe ModelAdmin中上传图像大小

我是Silverstripe的新手,在文档或SO上找不到我的问题的答案.

我正在使用Silverstripe纯粹作为CMS:没有网站作为前端.

我有最简单的DataObject产品和ModelAdmin ProductAdmin,如下所示:

class Product extends DataObject
{

  private static $db = array(
    'Name' => 'Varchar',
    'Copy' => 'Text'
  );

  private static $has_one = array(
    'MyImage' => 'Image'
  );

}


class ProductAdmin extends ModelAdmin
{

  private static $managed_models = array(
    'Product'
  );

  private static $url_segment = 'product';

  private static $menu_title = 'Product';

}

在/ dev / build之后,构建了我的管理面板,我可以像往常一样将高分辨率图像上传到’Uploads’目录.

我想上传CMS以将图像重新采样为几种不同的尺寸,同时保留原始图像.新的和原始图像也需要保存到FlushGeneratedImagesTask不会删除它们的位置.通过查看文档,我知道图像可以轻松调整大小,但我不清楚添加所需自定义功能的位置(或方式).有人可以帮忙吗?

(我认为Silverstripe 3.1 – resize image on upload最接近回答这个问题,但是缺少一个步骤来说明如何让CMS使用新的/被覆盖的功能.)

我正在使用Silverstripe 3.1版

最佳答案 >创建一个扩展Image的新类MyImage.

>在MyImage类中创建一个onBeforeWrite()函数.

>在此函数内部,创建一个新图像$image = Image :: create().您可以在此处设置重新采样图像的文件名,名称,标题,ParentID等

>使用$image-> SetWidth(…)调整图像大小

>更新你的数组Product :: $has_one to say MyImage => MYIMAGE

点赞