1
是否有可能爲銀色條紋內的新頁面設置默認窗口小部件,還是讓子頁面最初從父窗口繼承它們的窗口小部件?整個側欄被我正在工作的網站中的自定義小部件佔用,並且在客戶機將創建的(許多)新頁面上默認顯示少數選定的小部件會很好。他們仍然可以選擇刪除它們或添加其他任何選項。Silverstripe:在新頁面上設置默認窗口小部件
我搜查了文檔,沒有發現任何可能的指標。
是否有可能爲銀色條紋內的新頁面設置默認窗口小部件,還是讓子頁面最初從父窗口繼承它們的窗口小部件?整個側欄被我正在工作的網站中的自定義小部件佔用,並且在客戶機將創建的(許多)新頁面上默認顯示少數選定的小部件會很好。他們仍然可以選擇刪除它們或添加其他任何選項。Silverstripe:在新頁面上設置默認窗口小部件
我搜查了文檔,沒有發現任何可能的指標。
默認控件應該是相當容易做到 我們可以添加小工具區域的SiteConfig在那裏你可以設置的默認值,然後用populateDefaults頁面,以便從SiteConfig小部件複製到新的頁面:
文件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');
...
文件mysite/code/Page.php
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