Я пытался добавить поле загрузки в Custom DataExtension и получил рабочее поле Image. Однако загруженное изображение остается в концептуальном режиме, и мне нужно перейти на вкладку «Файл», чтобы опубликовать его. Я пытался использовать код, представленный в документации Silverstripe, но это, кажется, работает только на обычных страницах. Я нашел вопрос, похожий на мой:Как автоматически публиковать файлы, загруженные в объект данных в администраторе модели 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'));
}
}
Кто-нибудь знает решение?
В настоящее время существует ошибка, которая запрещает публиковать «собственные» записи, если объект-владелец не является версионным.
Я думаю, что вы испытываете эту ошибку, так как SiteConfig
не является версионной и поэтому не будет публиковать собственные файлы / изображения при сохранении.
Пока эта ошибка не будет устранена, вы можете использовать onAfterWrite
подключите ваше расширение, чтобы опубликовать файл:
public function onAfterWrite()
{
if ($this->owner->LogoID) {
$this->owner->Logo()->publishSingle();
}
}
Других решений пока нет …