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.

We've moved the forum!

Please use forum.silverstripe.org for any new questions (announcement).
The forum archive will stick around, but will be read only.

You can also use our Slack channel or StackOverflow to ask for help.
Check out our community overview for more options to contribute.

Widgets /

Discuss SilverStripe Widgets.

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

[Solved] Override WidgetHolder.ss


Go to End


6 Posts   4781 Views

Avatar
FungshuiElephant

Community Member, 57 Posts

28 March 2009 at 9:43am

Edited: 28/03/2009 9:52am

I have a widget on a page.
It's wrapped in HTML by the silverstripe/sappire/templates/WidgetHolder.ss file which contains:

<div class="WidgetHolder">
  <h3>$Title</h3>
  $Content
</div>

I would prefer the title to be an h2 element rather than an h3 element.

I copied the above, changing h3 to h2 and put it in silverstripe/themes/mytheme/templates/Includes as per this page http://doc.silverstripe.org/doku.php?id=widgets

You can override the WidgetHolder.ss and Widget.ss templates in your theme too by adding WidgetHolder and Widget templates to themes/myThemeName/templates/Includes/

but it didn't work.
If I delete the core sapphire file (silverstripe/sappire/templates/WidgetHolder.ss) it works fine but obviously I don't want to do that because it will break following an update to the core sapphire files.
Any ideas?

Avatar
FungshuiElephant

Community Member, 57 Posts

28 March 2009 at 9:51am

It seems that I should have put the modified WidgetHolder.ss into silverstripe/themes/mytheme/templates not silverstripe/themes/mytheme/templates/Includes. I moved the file and it worked.
This makes more sense as I'm not including it.
I think that the documentation (http://doc.silverstripe.org/doku.php?id=widgets) is incorrect.

Avatar
christophermanning

Community Member, 3 Posts

8 April 2009 at 7:19am

I just ran into the same problem. Your solution worked correctly and it seems as either the documentation is misleading or incorrect.

Avatar
Tó Morais

Community Member, 1 Post

16 April 2011 at 8:20pm

Hello!
My problem was that i didn't want to have my html code inside the widgetHolder div so i change the template used.
If you just want to change the template used by your widget you can override the widget Holder by overriding your controller:

...

class YOURWIDGET_Controller extends Widget_Controller {
function WidgetHolder() {
return $this->renderWith("YOURTEMPLATE");
}

...
}

And your model

class YOURWIDGET extends Widget {
...
function WidgetHolder() {
return $this->renderWith("YOURTEMPLATE");
}
...
}

That would do the trick. And this way you keep the other widgets that used the default widgetHolder unchanged.

Avatar
stevanovich

Community Member, 63 Posts

3 December 2011 at 3:08am

Just as a matter of interest as I tried to change my WidgetHolder.ss I was frustrated to the limit for it not changing then I realised that one has been put in the latest Silverstripe in the blackcandy_blog/templates/ so look there to change.

Avatar
priithansen

Community Member, 25 Posts

28 February 2012 at 5:54am

One way to wrap each widget in the area with extra code.

<% control SideBar %>
<% control Widgets %>
<div class="extrahtml">
$Content
</div>
<% end_control %>
<% end_control %>