Проект Silverstripe 4 имеет расширенную страницу, которая автоматически генерирует «MetaImage» при сохранении, который затем должен быть присоединен к странице. Пример кода ниже:
class ExamplePage extends \Page
{
private static $has_one = [
'MetaImage' => 'SilverStripe\Assets\Image'
];
public function onBeforeWrite()
{
if ($this->MetaImageID == 0) {
$metaObjectImage = new Image();
$metaObjectImage->setFromLocalFile($tmpFolder.'/'.$fileName);
$metaObjectImage->ParentID = $saveFolder->ID;
$metaObjectImage->Title = $this->Title;
$metaObjectImage->write();
$metaObjectImage->doPublish();
$this->MetaImageID = $metaObjectImage->ID;
}
parent::onBeforeWrite();
}
}
Однако изображение подключается к версии «Stage», а не к «Live». MetaImageID обновляется в ExamplePage
таблица в базе данных, но не ExamplePage_Live
Таблица.
Я предполагаю, что проблема в $this->MetaImageID = $metaObjectImage->ID;
неправильно устанавливает отношения, но я не уверен, как это изменить, поэтому он сохраняет «Live» при публикации ExamplePage.
Задача ещё не решена.
Других решений пока нет …