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're retiring the forums!

The SilverStripe forums have passed their heyday. They'll stick around, but will be read only. We'd encourage you to get involved in the community via the following channels instead:

Data Model Questions /

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

Trying to extend ViewableData

Go to End

3 Posts   2152 Views


Community Member, 4 Posts

12 August 2009 at 11:08am

Hi guys,

I'm new to Silverstripe so please bear with me if my questions are obvious.

I'm trying to create a two menu structures - one for the header and one for the footer. At a particular stage in each of these menus, I need to know which position I am at and make conditional decisions based on this. For example, if I am at Pos = 3 in a particular control block, then I want to add an extra class to the element I'm displaying. Is there a way to do this using control block code?

Another option for me is to extend the ViewableData class in order to add some custom functions to it. For example, I want to create a function similar to "Last" which is called "SecondLast" and does the same as "Last", except subtracts 2 instead of 1. Ideally I'd like to do this in a child class so I don't touch the Silverstripe core files. Is there a way I could implement this and then run the code block (see below):

<div id="footer-inner" class="clearfix">
	<% control Page(footer) %>
		<% if Children %>
		<h5 class="acc">Footer Menu</h5>
		<ul class="clearfix">
			<% control Children %>
				<li <% if First || SecondLast %> class="separate" <% end_if %>><a href="$Link">$MenuTitle</a></li>
			<% end_control %>
		<% end_if %>
	<% end_control %>

Any help is much appreciated. Thanks :)



Community Member, 904 Posts

12 August 2009 at 7:01pm

Edited: 12/08/2009 7:07pm


This has already been answered several times. For example here:

Or on

You can implement the Pos = 3 or SecondLast in the same manner as the examples above suggest.

Hint The implementation of SecondLast isn't that obvious. Here's what you would do:

// this function belongs to the Page class
function SecondLast(){
	return $this->Pos() == $this->iteratorTotalItems -1;


Community Member, 4 Posts

12 August 2009 at 7:11pm

Hi there,

Thanks for your help mate.

Believe it or not I did do a search first but couldn't seem to find what I wanted (probably wasn't searching for the right keywords). I kind of figured it all out on my own anyway with regards to the functions in the class. I've only been using SilverStripe for about a day and at first it didn't seem to work, but then I realised I'd just gotten the syntax wrong. Now that I've worked that out it's all cool.

Thanks though. :)