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.

Data Model Questions /

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

Accessing Parents Parent information


Go to End
Reply


4 Posts   5509 Views

Avatar
obj63mc

Community Member, 25 Posts

6 January 2010 at 6:48am

Hi All,

I am trying to access an objects parent parent. For example. I have a homepage that has a featured article. The article is in a structure of Category >> Sub Cat >> Article. So I can access the parent of the article to get the sub category - $FeaturedArticle.Parent.Link

When I try $FeaturedArticle.Parent.Parent.Link though this will then simply return an error stating the forTemplate method is not available for category to render. Because of this I added the forTemplate method but then nothing returns at all when I call it. No errors, nothing. My forTemplate function is below, any idea when I then call $FeaturedArticle.Parent.Parent nothing displays on my .ss template? Also does anyone know a better way to access this data from the $FeaturedArticle variable that I have.

function forTemplate() {
		$whereStatement = "CategoryPage_Live.ID = " . $this->ID;    // Select the current category
        $orderBy = null;
        $limit = null;
        $join = null;
        
        //$whereStatement = "ParentID = ".$this->ParentID." AND ID <> ".$this->ID;
        $cat = DataObject::get("CategoryPage", $whereStatement, $orderBy, $join, $limit);
		
		$string = '<a href="'.$cat->Link.'">'.$cat->Title.'</a>';
		return $string;
	}

Avatar
Willr

Forum Moderator, 5517 Posts

6 January 2010 at 9:21am

Not sure the template parser supports that level of nested commands (Parent.Parent). You probably have to wrap it in a control

<% control FeaturedArticle %>
<% control Parent %>
$Parent.Link
<% end_control %>
<% end_control %>

Avatar
wee-man

Community Member, 21 Posts

8 January 2010 at 11:01am

I think Willr is right.
But it makes the templates "ugly" ;)

If i have such a situation i use delegate-methods to avoid control..control..control blocks in the templates.
For example FeaturedArticle

function Category() {
 return $this->Parent()->Parent();
}

Now the template looks like this

$Category.Link

Avatar
obj63mc

Community Member, 25 Posts

8 January 2010 at 11:19am

Thanks all, these solutions work perfectly.