findOrMakeTab('Root.Widgets'); $tab->setTitle('Sidebar'); $tab->removeByName('SideBar'); $widgetTypes = WidgetAreaEditor::create('Sidebar')->AvailableWidgets(); $available = []; /** @var Widget $type */ foreach ($widgetTypes as $type) { $available[get_class($type)] = $type->getCMSTitle(); } $w = $this->owner->Sidebar(); $tab->push(WidgetAreaField::create( 'SideBar', $w, $available )); } public function onBeforeWrite() { parent::onBeforeWrite(); $obj = $this->owner; $w = $obj->SideBar(); if (!$w->ID || !$obj->getField('SideBarID')) { $area = WidgetArea::create(); $area->write(); $obj->setField('SideBarID', $area->ID); } } }