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, Ed, biapar, Willr, Ingo

PHP Inheritance

Go to End

5 Posts   1674 Views


Community Member, 94 Posts

18 May 2007 at 12:04pm


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();
return $children;


and then a class

class ArticleHolder_Controller extends Page_Controller { ... }

I use

<% control reverseChildren(Date,DESC) %> in 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?



Forum Moderator, 801 Posts

21 May 2007 at 10:40pm

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 ( 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)".


Community Member, 94 Posts

22 May 2007 at 3:16pm

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.


Community Member, 94 Posts

23 May 2007 at 9:37am

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".


Forum Moderator, 628 Posts

23 May 2007 at 10:40am

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.