기본 위젯 우리는 기본값을 설정할 수 있습니다 어디 SiteConfig에 위젯 영역을 추가 한 다음 새 페이지로 SiteConfig에서 위젯을 복사 페이지에 populateDefaults을 사용할 수 있습니다 을 할 오히려 쉽게해야 mysite/code/mysiteSiteConfigDecorator.php
class mysiteSiteConfigDecorator extends DataObjectDecorator {
public function extraStatics() {
return array(
'has_one' =>array(
'DefaultWidgets' => 'WidgetArea'
),
);
}
public function updateCMSFields(FieldSet &$fields) {
$fields->removeByName('Theme');
$fields->addFieldToTab('Root', new Tab('DefaultWidgetsTab', _t('SiteConfig.DefaultWidgetsTab', 'Default Widgets for new Pages')));
$fields->addFieldToTab("Root.DefaultWidgetsTab", new WidgetAreaEditor("DefaultWidgets"));
}
}
파일 mysite/_config.php
...
Object::add_extension('SiteConfig', 'mysiteSiteConfigDecorator');
...
파일을 파일
class Page extends SiteTree {
public static $has_one = array(
'Sidebar' => 'WidgetArea'
);
public function populateDefaults() {
parent::populateDefaults();
if ($this->Sidebar()) {
$widgetArea = new WidgetArea();
$widgetArea->write();
$this->SidebarID = $widgetArea->ID;
} else {
$widgetArea = $this->Sidebar();
}
$siteConfig = SiteConfig::current_site_config();
if ($siteConfig && $siteConfig->DefaultWidgets() && $siteConfig->DefaultWidgets()->Widgets()->exists()) {
foreach ($siteConfig->DefaultWidgets()->Widgets() as $widget) {
$widget->ID = 0;
$widget->write();
$widgetArea->Widgets()->add($widget);
}
}
}
public function getCMSFields() {
$fields = parent::getCMSFields();
$fields->addFieldToTab("Root.Content.Widgets", new WidgetAreaEditor("Sidebar"));
return $fields;
}
}
...
그러나, 부모로부터 대처하는 것은 그렇게 쉬운 일이 아니다. 그러나 당신은 또한 단지 현재 페이지 위젯이있는 경우하지 않을 경우과 같이, 부모 위젯을 표시, 확인할 수 있습니다 원하는 경우 :
class Page extends SiteTree {
...
public function SidebarForTemplate() {
if ($this->Sidebar())
return $this->Sidebar();
elseif ($this->Parent())
return $this->Parent()->SidebarForTemplate();
return false;
}
...
}
을 다음 템플릿
에서 $ SidebarForTemplate를 사용