Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Silverstripe:在新页面上设置默认小部件_Silverstripe - Fatal编程技术网

Silverstripe:在新页面上设置默认小部件

Silverstripe:在新页面上设置默认小部件,silverstripe,Silverstripe,是否可以为silverstripe中的新页面设置默认窗口小部件,或者让子页面最初从父页面继承其窗口小部件?整个侧栏被我正在工作的站点中的自定义小部件占据,如果在默认情况下,客户机将创建的(许多)新页面上会出现一些精选的小部件,那就太好了。他们仍然可以选择删除或添加任何其他内容 我已经搜索了文档,没有找到任何迹象表明这是可能的。默认小部件应该很容易做到 我们可以将小部件区域添加到SiteConfig,您可以在其中设置默认值,然后使用页面中的populateDefaults将小部件从SiteConf

是否可以为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"));
    }
}
...

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;
    }
}

...
文件
mysite/_config.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"));
    }
}
...

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;
    }
}

...
文件
mysite/code/Page.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"));
    }
}
...

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