Skip to main content

This site requires you to update your browser. Your browsing experience maybe affected by not having the most up to date version.

Widgets /

Discuss SilverStripe Widgets.

Moderators: martimiz, Sean, Ed, biapar, Willr, Ingo, swaiba

Possible bug in the duplicating page and children functionality

Go to End

4 Posts   2532 Views


Community Member, 63 Posts

5 February 2010 at 1:38pm

Hi there I have just a bug, but I dont know if its expected behavior. There is the following scenario.

Your page class has a widget area (which is the relation to that forum).

You have a holder page (inherits page) with lots of child (inherits page) pages. Then u duplicate the holder with all its childs. This means for me I create new pages, and it does create new pages. The problem is it does not create an WidgetAreas in the WidgetArea table --> for the new pages. It just refers to the page from which u have duplicated. So if you now change a widget in one holder page you change the widget in other holder page as well, and this is just not how I would expect it. I would like to change my widgets for every page how i need them and thats not possible if u duplicate in that way. Is there something I can do, maybe a setting to force the system to create new widgetAreas for the new pages .

Atm I need to do that manualy in the database and that is a bit pain in the ass (ups sorry).

Is that a bug or expected behavior ??

Thank you in advance.


Community Member, 63 Posts

10 February 2010 at 12:40pm

what a shame no one was able to answer this simple question. I had a deeper look in the cms and sappire code. It turns out that the duplicate functions (one page or with children) ignore any relations. I mean it is principle fine to do so, but in case of a has_one relation with an widget area u run in trouble by just duplication the page table entry and keeping the widget area id. Duplication is atm not an option anymore because of this issue, what a shame.

I could hack the code and create with the duplication of a page on the fly widgetareas but this would require changes to the core, and I would like to avoid that. Is there a easy way to extend the sitetree methods.




Community Member, 5 Posts

23 February 2011 at 12:57pm


got the same issue. you are right there's no new WidgetArea-Item created.

maybe an overwrite of an parent-method could be the answer. something to do with "onBeforeWrite" or something like that...

what's the method that duplicates these pages? any guesses?



Community Member, 4 Posts

18 January 2012 at 2:11am

Edited: 18/01/2012 2:25am

This was really annoying me also. Duplicating pages results in just referenced widgets, not duplicated widgets.

My solution is to extend the duplicate-function on Page class (page.php):

 * Duplicate this page, and make a copy of its Widgets (instead of copying the reference to it). 
 * @return Page 
public function duplicate() { 
	$oPage = parent::duplicate(); 
	if($this->hasField("SidebarID") && ($this->getComponent("Sidebar"))) { 
		//duplicate the current widgetArea
		$newWidgetArea = $this->getComponent("Sidebar")->duplicate();
		//loop through all widgets linked to this wigetArea & connect them to the new WidgetArea
		foreach($this->getComponent("Sidebar")->Items() as $oAreaWidget) { 
			$newWidget = $oAreaWidget->duplicate(); 
			$newWidget->ParentID = $newWidgetArea->ID;
		//connect the new widgetArea to the duplicate page
		$oPage->SidebarID = $newWidgetArea->ID;
	return $oPage; 

Hopefully this helps someone else aswell...