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.

Template Questions /

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

Template "slots" for inserting markup in other templates


Go to End


4 Posts   1750 Views

Avatar
gcoderre

Community Member, 5 Posts

20 January 2011 at 11:42am

Hi,

Does SilverStripe contain a way to add markup from a template to another template? Symfony calls it template slots, and Ruby on Rails content_for.

What I'm looking to do specifically is to add HTML / Javascript bits to the bottom of a site layout from inside a view.

I had a look at the reference pages of doc.silverstripe.com and the Sapphire API, and couldn't find an answer. I'm also quite new to SilverStripe, so I don't fully understand the capabilities / limitations of SSViewer yet...

Thanks for your help!

Avatar
Willr

Forum Moderator, 5523 Posts

20 January 2011 at 8:57pm

The symfony slots act a little bit like the <% include Template %> functionality but includes are much more simpler.

In sapphire you can also define your own functions which render into a template, then you can swap the template it renders into based on controller actions etc.

For example if you have a extra totally different layout based on whether someFunctionFoo() is true or not you can do

// main template
$SomeMoreTemplate

// in that templates controller
function SomeMoreTemplate() {
return ($this->someFunctionFoo()) ? $this->renderWith('Template1') : $this->renderWith('Template2');
}

Avatar
gcoderre

Community Member, 5 Posts

22 January 2011 at 4:40am

Edited: 22/01/2011 4:42am

Thanks for your reply Willr!

It's good to know that I can define my own template functions, but in my specific case it seems to be overkill. It often happens that I have view-specific Javascript to render, and while I could add it straight into the view, I would much prefer have some kind of mechanism to "inject" it to the bottom of my layout. A bit like that:

I know I should probably just put that JS in an external file and add it with Requirements::javascript, but it shows well what I'm trying to achieve.

Avatar
Willr

Forum Moderator, 5523 Posts

22 January 2011 at 12:51pm

I don't *think* there is anything to support that sort of dynamic injection yet. The current 2.4 SSViewer is little more than a simply string search and replace and doesn't really have any sort of smarts, hence using PHP and renderWith() which you can overload on your controller actions etc.

SSViewer is getting a bit old overhaul for 3.0 so implementing functions like that may become easier.