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.

General Questions

General questions about getting started with SilverStripe that don't fit in any of the categories above.

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

Rendering with default template?


Reply

3 Posts   610 Views

Avatar
k0m0r

15 February 2012 at 6:43am (Last edited: 15 February 2012 6:43am), Community Member, 39 Posts

Hi.
How do I render a page on demand with its default template?
My code is:

public function onAfterWrite() {
parent::onAfterWrite();
$render = $this->renderWith(array($this->ClassName,'Page')));
}

Saving the page gives me the following error:

500//ERROR [User Warning]: None of these templates can be found in theme '': MainPage.ss, Page.ss IN POST /admin/EditForm Line 207 in /var/www/vhosts/orange.czterystacztery.pl/htdocs/sapphire/core/SSViewer.php

As you can see, current theme name variable is surprisingly empty, although I use set_current_theme() in config.php

All I need to do is export my page into a static file. But I am unable to get its published content.
What am I doing wrong?
Is there any method to render a page with its default template? Like $this->render() and not $this->renderWith()

Avatar
k0m0r

15 February 2012 at 6:53am Community Member, 39 Posts

For the future me:

I just found Director::test($this->Link())->getBody() but I don't consider it a kosher way to do this.

Avatar
martimiz

16 February 2012 at 12:36am (Last edited: 16 February 2012 12:38am), Forum Moderator, 1091 Posts

I don't think you can render a page from within the Page class: OnAfterWrite() belongs to the DataObject (the Page). It's the Page_Controller that knows howto render itself...

So you should be able to do it like this (haven't tested it though):

$class = $this->ClassName . "_Controller";
$controller = new $class($this);
$render = $controller->renderWith(array($this->ClassName,'Page')));

Having said that, I think OnAfterWrite() might be called multiple times. So it might not be a good idea to do this - unless you at least cache $render.

As for Director::test - I think SilverStripe uses it in their Static caching - so you might as well, as long as it works - although normally 'test' would make me hesitate as well :-)