3

我试图将上传字段添加到自定义 DataExtension 并让 Image 字段正常工作。但是,我上传的图像仍处于概念模式,我必须转到“文件”选项卡才能发布它。我尝试使用 Silverstripe 文档中提供的代码,但这似乎只适用于常规页面。我发现了一个类似于我的问题:如何在 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'));                     
    }       
}

有谁知道解决方案?

4

1 回答 1

8

如果拥有的数据对象没有版本化,当前有一个错误会阻止发布“拥有的”记录。

我认为您遇到了这个错误,因为SiteConfig没有版本控制,因此在保存时不会发布拥有的文件/图像。

在解决此错误之前,您可以onAfterWrite在扩展程序中使用挂钩来发布文件:

public function onAfterWrite()
{
    if ($this->owner->LogoID) {
        $this->owner->Logo()->publishSingle();
    }
}
于 2018-02-27T13:41:21.210 回答