opencart php custom page without using the "information" feature

jaget picture jaget · Feb 28, 2012 · Viewed 14.4k times · Source

I want to create a custom page in opencart.

I know I can put a custom page in the information section using the admin area however what I would like is a controller which points to a few other pages.

I dont fully understand how to do this.

In codeigniter you would create a controller and a view and if needed setup some rules in the routes file but I cannot see anything like this.

Would somebody mind explaining or pointing me to some instructions on how to do this please.

Thank you

Answer

Jay Gilford picture Jay Gilford · Feb 28, 2012

It's pretty simple to do to be honest. You need to create a controller for your file, naming based on the folder and filename. For instance common/home.php has

Class ControllerCommonHome extends Controller

This is accessed using index.php?route=common/home and accesses the index() method. If you want to call another method, for instance foo, you would need to define the method as

public function foo() {
    // Code here
}

and would call it using index.php?route=common/home/foo

As for rendering the view, that's a bit trickier. Basically you need to add all of this to the end of your controller method

    if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/common/new_template_file.tpl')) {
        $this->template = $this->config->get('config_template') . '/template/common/new_template_file.tpl';
    } else {
        $this->template = 'default/template/common/new_template_file.tpl';
    }

    $this->children = array(
        'common/column_left',
        'common/column_right',
        'common/content_top',
        'common/content_bottom',
        'common/footer',
        'common/header'
    );

    $this->response->setOutput($this->render());

Which will render /catalog/view/theme/your-theme-name/template/common/new_template_file.tpl If that file doesn't exist, it will attempt to use the same path in the default theme folder

I'd recommend you take a look at a few controllers and templates to get your head around where everything comes from properly, but that's the basic gist of how it works