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.


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

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

PHP Inheritance


5 Posts   1383 Views


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


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?



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


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

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.


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


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.