如何在 silverstripe 数据扩展中自动发布图像
How to automaticly publish images in silverstripe dataextension
我试图将上传字段添加到自定义 DataExtension 并使图像字段正常工作。但是,我上传的图像仍处于概念模式,我必须转到“文件”选项卡才能发布它。我尝试使用 Silverstripe 文档中提供的代码,但这似乎只适用于常规页面。我发现了一个类似于我的问题: 但这似乎只适用于 DataObjects。
这是我当前的代码:
<?php
use SilverStripe\Forms\LiteralField;
use SilverStripe\Forms\TextField;
use SilverStripe\Forms\FieldList;
use SilverStripe\Forms\HTMLEditor\HTMLEditorField;
use SilverStripe\AssetAdmin\Forms\UploadField;
use SilverStripe\Assets\Image;
use SilverStripe\Assets\Storage\AssetStore;
use SilverStripe\Versioned\Versioned;
use SilverStripe\ORM\DataExtension;
class CustomSiteConfig extends DataExtension
{
private static $db = [
];
private static $has_one = [
'Logo' => Image::class
];
private static $owns = [
'Logo'
];
private static $extensions = [
Versioned::class,
];
private static $versioned_gridfield_extensions = true;
public function updateCMSFields(FieldList $fields)
{
$fields->addFieldToTab("Root.Header", LiteralField::create("","<h1>Header</h1>"));
$fields->addFieldToTab("Root.Header", UploadField::create('Logo', 'Logo'));
}
}
有人知道解决办法吗?
当前存在一个错误,如果拥有的数据对象未版本化,该错误会阻止 "owned" 记录发布。
我认为您遇到了这个错误,因为 SiteConfig
没有版本控制,因此在保存时不会发布拥有的 files/images。
在解决此错误之前,您可以在扩展程序中使用 onAfterWrite
挂钩来发布文件:
public function onAfterWrite()
{
if ($this->owner->LogoID) {
$this->owner->Logo()->publishSingle();
}
}
我试图将上传字段添加到自定义 DataExtension 并使图像字段正常工作。但是,我上传的图像仍处于概念模式,我必须转到“文件”选项卡才能发布它。我尝试使用 Silverstripe 文档中提供的代码,但这似乎只适用于常规页面。我发现了一个类似于我的问题:
这是我当前的代码:
<?php
use SilverStripe\Forms\LiteralField;
use SilverStripe\Forms\TextField;
use SilverStripe\Forms\FieldList;
use SilverStripe\Forms\HTMLEditor\HTMLEditorField;
use SilverStripe\AssetAdmin\Forms\UploadField;
use SilverStripe\Assets\Image;
use SilverStripe\Assets\Storage\AssetStore;
use SilverStripe\Versioned\Versioned;
use SilverStripe\ORM\DataExtension;
class CustomSiteConfig extends DataExtension
{
private static $db = [
];
private static $has_one = [
'Logo' => Image::class
];
private static $owns = [
'Logo'
];
private static $extensions = [
Versioned::class,
];
private static $versioned_gridfield_extensions = true;
public function updateCMSFields(FieldList $fields)
{
$fields->addFieldToTab("Root.Header", LiteralField::create("","<h1>Header</h1>"));
$fields->addFieldToTab("Root.Header", UploadField::create('Logo', 'Logo'));
}
}
有人知道解决办法吗?
当前存在一个错误,如果拥有的数据对象未版本化,该错误会阻止 "owned" 记录发布。
我认为您遇到了这个错误,因为 SiteConfig
没有版本控制,因此在保存时不会发布拥有的 files/images。
在解决此错误之前,您可以在扩展程序中使用 onAfterWrite
挂钩来发布文件:
public function onAfterWrite()
{
if ($this->owner->LogoID) {
$this->owner->Logo()->publishSingle();
}
}