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.

Archive

Our old forums are still available as a read-only archive.

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

PHP Inheritance


Reply

5 Posts   1383 Views

Avatar
xmedeko

18 May 2007 at 12:04pm Community Member, 94 Posts

Hi,

I have a class

class Page_Controller extends ContentController {

/**
* @returns - sorted children according to the given criteria
*/
public function reverseChildren($field, $direction) {
$children = $this->Children();
$children->sort($field,$direction);
return $children;
}

}

and then a class

class ArticleHolder_Controller extends Page_Controller { ... }

I use

<% control reverseChildren(Date,DESC) %> in ArticleHolder.ss template, but it does nothing. When I move (or copy) the function reverseChildren from the Page_Controller class to the ArticleHolder_Controller class, then it works fine. I have tried to flush DB, flush the page, but still the same weird behaviour. Any clue?

Thanks

Avatar
Ingo

21 May 2007 at 10:40pm Forum Moderator, 801 Posts

i think you've came across a limitation of our template-parser - it doesn't handle two arguments on <% control %>-blocks. as a workaround, you can create alias-methods such as "ChildrenByDate" etc.

btw, our coding conventions state that you should name template-accessors upper camelcase (http://doc.silverstripe.com/doku.php?id=coding-conventions). its a bit hidden, in "Classes->Class Organisation":
"Template data-access methods (methods that will be called by a $MethodName or <% control MethodName %> construct in a template somewhere)".

Avatar
xmedeko

22 May 2007 at 3:16pm Community Member, 94 Posts

Hi,
I do not think this is the problem with two or more arguments. Now I have

class Page_Controller extends ContentController {
function GetBlogTags() {
return DataObject::get("BlogTag",
          $filter = "",
          $sort = "Title ASC",
          $join = "",
          $limit = "");
}
}

I use this code

<% control GetBlogTags %> ... <% end_control %>

in a sidebar included in all my pages. All my pages extends Page_Controller. But the proper result is shown only when I copy this code to all my controller classes.

Avatar
xmedeko

23 May 2007 at 9:37am Community Member, 94 Posts

Oh, I have solved that mysterious problem with inheritance. A couple of days ago I have copied a directory "mysite" to "mysite.orig" and I have continued working in "mysite" directory. The autoload function has loaded a class Page.php from the "mysite.orig" and not from "mysite".

Avatar
Sigurd

23 May 2007 at 10:40am Forum Moderator, 628 Posts

Sweet. As a side-note, we'll be making it easier to disable the folders when not needed, probably by detecting whether or not you have a _config.php in the folder. See my 202 installation ideas I posted a few hours ago.