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.


Discuss SilverStripe Widgets.

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

Blog Widget duplicated in Sidebar - Please Help!

Go to End

14 Posts   2565 Views


8 March 2011 at 2:29pm Community Member, 165 Posts

Hopefully somebody can help me out here. I have a blog page which is currently showing two Widget panels in the sidebar. One is the default setting, the second is due to a modification I made to the page code to ensure that the widget panel appeared beneath the sidebar navigation panel in my template (as opposed to on top of my navigation template)...

So now, having generated a second Widget panel I set about disabling the first. I found a useful tutorial under [url][/url] which told me how to do this as follows:


But what if I have widgets on my blog currently??

If you currently have a blog installed, the widget fields are going to double up on those pages (as the blog extends the Page class). One way to fix this is to comment out line 30 in BlogHolder.php and remove the DB entry by running a /db/build.

** blog/code/BlogHolder.php **

class BlogHolder extends Page {

static $has_one = array(
// "SideBar" => "WidgetArea", COMMENT OUT
'Newsletter' => 'NewsletterType'
function getCMSFields() {
$fields = parent::getCMSFields();
// $fields->addFieldToTab("Root.Content.Widgets", new WidgetAreaEditor("SideBar")); COMMENT OUT


Then you can use the Widget area you defined on Page.php


Yeah, right... First problem is the build of SilverStripe that I am using is obviously a later version. In the file BlogHolder.php does not extend the Page class, it extends the Blog tree. The code is completely different. And commenting out any mention of Sidebar in this file has no apparent effect on the page, even after running db/build

Am I working on the wrong file? Is there a more up-to-date method? Can anybody give me any pointers?



8 March 2011 at 5:03pm Forum Moderator, 5511 Posts


Thanks for pointing out the issue with the documentation it needs to be updated. If you notice any old information like that please report it as a ticket ( with the component Content.

If it is not in BlogHolder you want to look at the BlogTree.php code and comment out the SideBar in there. A better way of doing it now is to actually use a decorator (more information on the doc site). Decorate BlogTree and use updateCMSFields() to remove the WidgetArea.


class MyBlogTree extends DataObjectDecorator {

function updateCMSFields(&$fields) {


9 March 2011 at 10:37am Community Member, 165 Posts

Willr, thanks once again for your help and advice. I'm looking at using a 'decorator' to achieve this. I've looked at the doc site but I'm not 100% sure what I should be doing (while I know HTML, CSS and a smattering of PHP, I'm really a designer, not a programmer...)

Should the code you supplied below be added to the BlogTree.php file? Is this what is meant by 'decorating'?!

Just moving a little bit outside my comfort zone here...


6 April 2011 at 6:36pm Community Member, 190 Posts

I'm finding that even commenting out those lines or using a decorator in BlogTree.php isn't enough. When doing so, I get an "Error Saving Content" when trying to publish a BlogEntry or BlogHolder page.

The only thing I can think of is to rename the WidgetArea on my Page.php (ie "SideBarWidgets" => "WidgetArea"). I'd rather not do that since I'll have to go back to all of my pages and re-add the widgets.

Any other suggestions on the best way to have Widgets and Blog Widgets?


18 April 2011 at 9:59pm Community Member, 95 Posts

Hello guys,

i see you all have this kind of problems. I myself have found an elegant solution to this problem. Most of us don't need widgets on absolutely every page we use, so if you need them on homepage,you will likely make another page controller homepage.php that extends page.php so add widget areas you wanna use there instead on page controller so that homepage, and homepage alone has access to widgets.
also, if you then need them on some of the other pages, make separate controllers for them also.
This is sth i think is best, cause on hompage i use 3 or 4 separate widget areas, on blog you use only 1 (but ofc, if you need them you can always add them on blob and blogholder controllers where you need them), i also have 2 more pages that use some widgets, but in 1 and 2 areas - so it's nice to have a separate page controller for all of them anyways - so why place it all on page.php?

Mby i'm doing sth "wrong" or the way it is not supposed to be done, but it works and I think it's an elegant way of using widgets and some other stuff.

Hope you understand what i've said and that i'tll help some of you!


7 January 2012 at 2:27am Community Member, 164 Posts

Found this toppic whilst searching for solution to the same problem.

Willr's solution was 90% there. My modification without needing to edit core files ended up as:

Create mysite/code/NoWidgetsBlogTree.php


class NoWidgetsBlogTree extends DataObjectDecorator {
   function updateCMSFields(&$fields) {

in mysite/_config.php add:

Object::add_extension('BlogTree', 'NoWidgetsBlogTree');


20 June 2012 at 11:56pm Community Member, 19 Posts

Hi all
MarijnKampf I used your code and it has removed duplicates from the blog page. Sadly now I get am unable to add any widgets at all to the blog page. I select a widget, add it and when I save the widget disappears.
All other page types are saving widgets fine.
(I'm running v 2.4.5)
Any tips on what I might have missed?


21 June 2012 at 1:15am Community Member, 164 Posts

Not quite sure why it would do that. Do the Widgets work on pages that are not a blog?

Go to Top