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.

Themes /

Discuss SilverStripe Themes.

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

Holder for childpages to create layout


Go to End


14 Posts   16466 Views

Avatar
shrike

Community Member, 17 Posts

14 June 2011 at 10:39pm

Edited: 15/06/2011 7:53am

Is it possible to create holder for subpages to output layout from subpages as they are? Example: you have subpage1 with 3 columns and subpage2 with 4 columns. Holder collects these to itself and outputs html page – first content and layout from subpage1 and under it subpage2 layout and content?

If this is possible, it gives an endless possibilities to create layout for one page, even some js-animation for revealing content from subpages. Or is this just a pointless idea?

Avatar
martimiz

Forum Moderator, 1391 Posts

18 June 2011 at 11:04pm

Edited: 18/06/2011 11:05pm

Are you thinking on using different stylesheets only? Or different templates (as well)? And is this a holder page that would show content of multiple pages/pagetypes at the same time, all with their many different layouts? That would be somewhat complex... I suppose it can still be done, but doable? :-)

Avatar
shrike

Community Member, 17 Posts

19 June 2011 at 5:24am

Actually, stylesheets are the same, but child pages include different layout as columns. Columns are added in the administration view as column1 tab, column2 tab, and column3 tab. Templates uses 960gs and the final layouts are created with classes.

I think it should be a holder page that would show content of multiple pages/pagetypes at the same page (inside itself). How you "gurus" would start to figure this out? At the moment, I do not know where to start...

Avatar
martimiz

Forum Moderator, 1391 Posts

23 June 2011 at 12:11am

Still thinking on this... :-)

If you were to know in advance what different layouts you were going to use, it's easy: you could use a conditional <% if .... %> <% elseif %> <% end_if %> in your <% control %> block that loops through the pages, and provide appropriate layouts...

Making it dynamice/extendable is a different thing:

- I don't think the <% include %> block accepts variables...

- you can't parse the template from a Controller function, since you have no access to controller methods from within the control block...

- You could consider parsing the template from a Datamodel function, but there you can't use RenderWith(), and having it return HTML would be no option I think...

- so now I think maybe you could use the Datamodel function above to instantiate a controller, and use a function within it to parse the appropriate template using RenderWith(). Never done that, but hey... :-)

Avatar
xeraa

Community Member, 58 Posts

23 June 2011 at 11:32am

1) Just to be sure: We're talking about subpages in the CMS and not about inheritance here, right?

2) Isn't http://doc.silverstripe.org/sapphire/en/reference/built-in-page-controls#and-lt-control-children-and-gt what you want or did I misunderstand your problem?

Avatar
shrike

Community Member, 17 Posts

23 June 2011 at 6:36pm

Could this picture illustrate it any... If we have a Product page on sitetree and child pages called product 1 (using page type 3column layout) and product 2 (using page type 4column layout) under Product page, I try to render these two child pages $Layout inside Product page. Product page should work dynamically and add new child page layouts after each other, based on CMS sitetree. Or I could use this technique to make pages scrollable on iPad, some kind of "content scroller", eh?

Attached Files
Avatar
martimiz

Forum Moderator, 1391 Posts

23 June 2011 at 10:03pm

OK, maybe I was taking it a bit too far wanting to make it all dynamic and extendable, sorry for that :-)

Try a simple conditional in your PageHolder.ss template:

<% control Children %>
	<% if ClassName = PageType1 %>
		<!-- use some layout-->
	<% elseif ClassName = PageType2 %>
		<!-- use some other layout-->
	<% elseif ClassName = PageType3 %>
		<!-- yet another layout -->
	<% end_if %>
<% end_control %>

Avatar
xeraa

Community Member, 58 Posts

23 June 2011 at 10:18pm

Yes martimiz, that's what I was thinking about. Not sure if it's flexible enough, but probably a good start...

Go to Top