Search code examples
prestashopprestashop-1.7

Prestashop custom page with own template


I am running my own prestashop theme and want to add a new page without the css. Therefore I added the three files php, controller and template. I placed the php in the root directory of my prestashop, added the controller to root/controllers/front and placed the template in root/themes/my-theme.
If I call http://localhost/prestashop/?page=custom-page, I see the index start page, If I call localhost/prestashop/custom-page, I get a HTTP 404.
Can someone help me to get my page displayed?

PHP:

<?php
  include(dirname(__FILE__).'/config/config.inc.php');
  Tools::displayFileAsDeprecated();

  include(dirname(__FILE__).'/header.php');

  $smarty->display(_PS_THEME_DIR_.'custom-page.tpl');

  include(dirname(__FILE__).'/footer.php');

Controller:

public function init(){
  parent::init();
}

public function initContent(){
  parent::initContent();
  $this->setTemplate(_PS_THEME_DIR_.'custom-page.tpl');
}


//public function setMedia(){
  //parent::setMedia();
  //$this->addCSS(_THEME_CSS_DIR_.'custom-page.css');
  //$this->addJS(_THEME_JS_DIR_.'custom-page.js');
//}

}

Template:

<div>
 HELLO PAGE
</div>

{literal}
  <style type="text/css">
  </style>
{/literal}

<script type="text/javascript">
  {literal}
  {/literal}
</script>

Solution

  • For PS 1.7, create a new page following the next steps:

    Create the controller: /controllers/front/MyPageController.php

    <?php
    
    class MyPageControllerCore extends FrontController
    {
        public $php_self = 'mypage';
        public $ssl = true;
    
        public function initContent()
        {
            parent::initContent();
    
            $this->setTemplate('mypage');
        }
    }
    

    Create the tpl file in your theme: /themes/YOUR_THEME/templates/mypage.tpl

    {extends file='page.tpl'}
    
    {block name='page_header_container'}{/block}
    
    {block name='page_content'}
      PAGE CONTENT HERE
    {/block}
    

    Delete the class index files: /var/cache/dev/class_index.php and /var/cache/prod/class_index.php

    How to access it: http://your-site.com/index.php?controller=mypage

    Finally:
    If you want to handle a friendly URL for this page, just add the page in Shop Parameters > Traffic & SEO.