Как автоматически публиковать изображения с расширением данных silverstripe

Я пытался добавить поле загрузки в Custom DataExtension и получил рабочее поле Image. Однако загруженное изображение остается в концептуальном режиме, и мне нужно перейти на вкладку "Файл", чтобы опубликовать его. Я пытался использовать код, представленный в документации Silverstripe, но это, похоже, работает только на обычных страницах. Я нашел вопрос, похожий на мой: как автоматически публиковать файлы, загруженные в объект данных в администраторе модели Silverstripe, однако, похоже, это работает только для объектов DataObject.

Это мой текущий код:

<?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'));                     
    }       
}

Кто-нибудь знает решение?

1 ответ

Решение

В настоящее время существует ошибка, которая препятствует публикации "собственных" записей, если объект-владелец не является версионным.

Я думаю, что вы испытываете эту ошибку, так как SiteConfig не является версионной и поэтому не будет публиковать собственные файлы / изображения при сохранении.

Пока эта ошибка не будет устранена, вы можете использовать onAfterWrite подключите ваше расширение, чтобы опубликовать файл:

public function onAfterWrite()
{
    if ($this->owner->LogoID) {
        $this->owner->Logo()->publishSingle();
    }
}
Другие вопросы по тегам