gpt4 book ai didi

silverstripe - 如何在 Silverstripe 模型管理员中自动发布上传到数据对象的文件

转载 作者:行者123 更新时间:2023-12-04 14:39:11 24 4
gpt4 key购买 nike

在 Silverstripe 4 中,上传的文件必须在网站的公共(public)端可见之前发布。

如果我使用 $has_one Image::Class 创建一个 $Page,然后将该图像分配给 $owns[],则上传的图像将在我发布页面时发布。

但是,如果我创建以下数据对象结构,则不会。

Class Item extends DataObject{
$has_one[
'ItemImage'=>Image::Class,
'Catalog'=>'Catalog'
];

$owns[
'ItemImage'
]
}

Class Catalog extend DataObject{
$has_many[
'Items'=>'Item'
]
$owns[
'Items'
]

public function getCMSFields(){
$fields = parent::getCMSFields();

$fields->addFieldToTab('Root.Items', GridField::create('Items', 'Items', $this->Items(), GridFieldConfig_RecordEditor::create()));

return $fields;

}
}

如果我创建一个目录并在其中创建带有图像的项目然后保存它,它将不会发布已上传的图像。我将不得不手动:
1.选择图片
2. 编辑原文
3. 发布

必须为用户提供更简单的方法。

最佳答案

我有点晚了,但不幸的是 $owns 仍然不适用于非版本化的 DataObjects。
我也不想对其进行版本控制,所以这是我手动发布它们的方式:

<?php

namespace app\foo;

use SilverStripe\ORM\DataObject;
use SilverStripe\Assets\Image;

class Bar extends DataObject {
private static $has_one = [
'MyImage' => Image::class
];

protected function onAfterWrite() {
parent::onAfterWrite();
$img = $this->MyImage();
if ($img && $img->exists()) {
$img->publishRecursive();
}
}
}

关于silverstripe - 如何在 Silverstripe 模型管理员中自动发布上传到数据对象的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48144600/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com