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, biapar, Willr, Ingo, swaiba, simon_w

[Solved] Override WidgetHolder.ss


Reply


6 Posts   2955 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, 60 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 %>