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

1 page with 2+ page types


Reply


6 Posts   1533 Views

Avatar
raamklaza

Community Member, 182 Posts

24 June 2009 at 2:02am

Hello,

how can i make more then one page type on one page?

For example we have a normal Page page type.

I would love to put a custom Form page type under the above mentioned Page page type.

What's the easiest way to do this?

Avatar
CrazyCoders

Community Member, 32 Posts

24 June 2009 at 1:11pm

Page types are intimately linked to the template. You can only have 1 template/page type per page. That said, you can do all kinds of tweaks to get to a solution.

You could extend your page type to another page type such as CustomFormPage extends Page and put the code in there that creates the custom form. Then just copy and paste the page template to create the new associated template and then rebuild. That should do it.

Was that too complex?

Avatar
Sam

Administrator, 685 Posts

24 June 2009 at 5:09pm

Yes, page types are designed to inherit from each other.

If you have CustomFormPage extends Page, it will first look for CustomFormPage.ss and then use Page.ss if that's not found.

Combined with the Layout subfolder functionality, this can be quite powerful. If you have these 3 templates:

templates/Page.ss - contains the template variable '$Layout' in it somewhere
templates/Layout/Page.ss
templates/Layout/CustomFormPage.ss

Then the logic is this:

* On a Page page, the page will be rendered using templates/Layout/Page.ss, and then that will be placed inside templates/Page.ss where the $Layout code is.
* On a CustomFormPage page, the page will be rendered using templates/Layout/CustomFormPage.ss, and then that will be placed inside templates/Page.ss where the $Layout code is.

In other words, you can have your "common skin" stuff in templates/Page.ss, and then have a region inside that that is customised on a per-pagetype basis.

I hope that makes sense; it's a little tricky to describe!

Avatar
raamklaza

Community Member, 182 Posts

24 June 2009 at 8:56pm

Thnx Sam.

If i make CustomFormpage page it will use the Page.ss aswell or only when CustomFormpage isn't found?

Is there a way to include exsisting Page templates?

For example
I make a formpage page and on top i include:page.ss

Avatar
CDGIDev

Community Member, 9 Posts

26 June 2009 at 2:36am

No it's only like this:

Page extends SiteTree
CustomFormPage extends Page

For the templates:

If CustomFormPage.ss then use it
elseif Page.ss then use it

Thats all

Avatar
TotalNet

Community Member, 181 Posts

3 July 2009 at 11:40am

Great, someone has asked this question already :)

I'm trying to do this for UserDefinedForm, so ... Should I see templates/layout/UserDefinedForm.ss displayed from $Layout in templates/Page.ss ?

The reason is: I'm not seeing this happen right now, UserDefinedForm extends Page so it should work right? Or would it be better to have CustomForm extends UserDefinedForm and expect templates/Pages.ss + templates/layout/CustomForm.ss to work?

This is all because CalendarDateField.php adds Requirements::css which is overriding my theme's form.css GRRR and was hoping that <% require themedCSS(form) %> will work in there, but probably not.

Cheers,

Rich