Jump to content

Recommended Posts

Posted

If we’re using custom page classes, is it acceptable to have a constructor, or does that cause problems by overriding the constructor that should be running in the parent Page class? Should we call the parent class constructor? For example in /site/classes/DefaultPage.php, would this be correct?

class DefaultPage extends Page
{
	function __construct() {
        parent::__construct();

		// … set some class properties for later use …
    }
}

 

Posted

ProcessWire's Page constructor:

https://github.com/processwire/processwire/blob/3cc76cc886a49313b4bfb9a1a904bd88d11b7cb7/wire/core/Page.php#L594

public function __construct(Template $tpl = null) {
        parent::__construct();
        if($tpl !== null) {
            $tpl->wire($this);
            $this->template = $tpl;
        } 
        $this->useFuel(false); // prevent fuel from being in local scope
        $this->parentPrevious = null;
        $this->templatePrevious = null;
        $this->statusPrevious = null;
    }

So in extending custom page calsses I do this:

function __construct(Template $tpl = null) {
    parent::__construct($tpl);
    // my initializations go here...
}

I had no issues with it so far.

  • Like 3
Posted

Great, thanks for that! I’ve implemented a constructor and it seems fine.

I initially made a mistake by including a reference to a page that has no view of its own, but contains some general website settings, like this:

public function __construct(Template $tpl = null)
{
	parent::__construct($tpl);

	$this->siteSettings = pages('/site-settings/');
}

This caused an infinite loop because the site-settings page itself uses the DefaultPage class. To get around this I created an empty class for the site-settings template, like this:

class SiteSettingsPage extends Page { }

I’m not sure if this was the smartest solution, or if the idea of having so much code in DefaultPage is a good idea. I wonder if there are a heap of system pages and other things that I’m not thinking of, which are inheriting from DefaultPage?

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...