在Silverstripe ModelAdmin

时间:2015-09-08 14:56:30

标签: silverstripe

我是Silverstripe的新手,我很难在文档中或在SO上找到我的问题的答案。

我将Silverstripe纯粹用作CMS:没有网站作为前端。

我有最简单的DataObject Product和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之后,我的管理面板已构建完毕,我可以像往常一样将高分辨率图像上传到“上传”目录。

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

(我认为Silverstripe 3.1 - resize image on upload最接近回答此问题,但缺少一步,说明如何让CMS使用新的/覆盖的功能。)

我正在使用Silverstripe 3.1版

1 个答案:

答案 0 :(得分:2)

  1. 创建一个扩展Image的新类MyImage。
  2. 在MyImage类中创建一个函数onBeforeWrite()
  3. 在此功能中,制作新图像$image = Image::create()。您可以在此处设置重新采样图像的文件名,名称,标题,ParentID等
  4. 使用$image->SetWidth(...)
  5. 调整图片大小
  6. 更新您的阵列Product::$has_one以说明MyImage => MyImage