【问题标题】:How to automaticly publish images in silverstripe dataextension如何在 silverstripe 数据扩展中自动发布图像
【发布时间】:2018-08-07 01:30:48
【问题描述】:

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

有人知道解决办法吗?

【问题讨论】:

    标签: php silverstripe silverstripe-4


    【解决方案1】:

    当前存在一个错误,如果拥有的数据对象未进行版本控制,则该错误会阻止发布“拥有的”记录。

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

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

    public function onAfterWrite()
    {
        if ($this->owner->LogoID) {
            $this->owner->Logo()->publishSingle();
        }
    }
    

    【讨论】:

    • 哦,我不知道 SiteConfig 中存在错误,但感谢您的帮助!这段代码解决了我遇到的问题。
    • 这不是 SiteConfig 中的问题,而是所有未版本化且与版本化资源相关的 DataObjects。
    • 嗨@bummzak,我在我当前的项目中尝试了这段代码,我正在做同样的事情。在devtest 环境中运行良好,但在live 版本中它会抛出There has been an error 异常——没有任何痕迹。似乎条件没有通过 - 它没有拦截LogoID。使用 $this-&gt;owner-&gt;Logo() 可以工作,但会引发该错误。有什么建议吗?
    猜你喜欢
    • 2016-12-19
    • 1970-01-01
    • 2018-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    相关资源
    最近更新 更多