带有自己模板的 Prestashop 自定义页面
Prestashop custom page with own template
我是 运行 我自己的 prestashop 主题,想添加一个没有 css 的新页面。
因此我添加了三个文件php、控制器和模板。我将 php 放在我的 prestashop 的根目录中,将控制器添加到 root/controllers/front 并将模板放在 root/themes/my-theme.
如果我调用 http://localhost/prestashop/?page=custom-page,我会看到索引起始页,如果我调用 localhost/prestashop/custom-page,我会收到 HTTP 404。
有人可以帮我显示我的页面吗?
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');
控制器:
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');
//}
}
模板:
<div>
HELLO PAGE
</div>
{literal}
<style type="text/css">
</style>
{/literal}
<script type="text/javascript">
{literal}
{/literal}
</script>
对于 PS 1.7,按照以下步骤创建一个新页面:
创建控制器:/controllers/front/MyPageController.php
<?php
class MyPageControllerCore extends FrontController
{
public $php_self = 'mypage';
public $ssl = true;
public function initContent()
{
parent::initContent();
$this->setTemplate('mypage');
}
}
在您的主题中创建 tpl 文件:/themes/YOUR_THEME/templates/mypage.tpl
{extends file='page.tpl'}
{block name='page_header_container'}{/block}
{block name='page_content'}
PAGE CONTENT HERE
{/block}
删除 class 索引文件:/var/cache/dev/class_index.php
和 /var/cache/prod/class_index.php
如何访问它: http://your-site.com/index.php?controller=mypage
最后:
如果你想为这个页面处理一个友好的URL,只需将页面添加到Shop Parameters > Traffic & SEO
。
我认为最佳做法是使用您的自定义页面创建一个模块。因为使用您的方法,您可能会在 prestashop 更新后遇到麻烦,而且您的商店的行为可能因不同的属性而无法预测。
这里有一些关于如何在模块中创建自己的页面的信息https://belvg.com/blog/creating-frontcontroller-in-the-module-and-customization-of-displaying-page-in-prestashop.html and https://belvg.com/blog/how-to-implement-a-controller.html
我是 运行 我自己的 prestashop 主题,想添加一个没有 css 的新页面。
因此我添加了三个文件php、控制器和模板。我将 php 放在我的 prestashop 的根目录中,将控制器添加到 root/controllers/front 并将模板放在 root/themes/my-theme.
如果我调用 http://localhost/prestashop/?page=custom-page,我会看到索引起始页,如果我调用 localhost/prestashop/custom-page,我会收到 HTTP 404。
有人可以帮我显示我的页面吗?
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');
控制器:
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');
//}
}
模板:
<div>
HELLO PAGE
</div>
{literal}
<style type="text/css">
</style>
{/literal}
<script type="text/javascript">
{literal}
{/literal}
</script>
对于 PS 1.7,按照以下步骤创建一个新页面:
创建控制器:/controllers/front/MyPageController.php
<?php
class MyPageControllerCore extends FrontController
{
public $php_self = 'mypage';
public $ssl = true;
public function initContent()
{
parent::initContent();
$this->setTemplate('mypage');
}
}
在您的主题中创建 tpl 文件:/themes/YOUR_THEME/templates/mypage.tpl
{extends file='page.tpl'}
{block name='page_header_container'}{/block}
{block name='page_content'}
PAGE CONTENT HERE
{/block}
删除 class 索引文件:/var/cache/dev/class_index.php
和 /var/cache/prod/class_index.php
如何访问它: http://your-site.com/index.php?controller=mypage
最后:
如果你想为这个页面处理一个友好的URL,只需将页面添加到Shop Parameters > Traffic & SEO
。
我认为最佳做法是使用您的自定义页面创建一个模块。因为使用您的方法,您可能会在 prestashop 更新后遇到麻烦,而且您的商店的行为可能因不同的属性而无法预测。
这里有一些关于如何在模块中创建自己的页面的信息https://belvg.com/blog/creating-frontcontroller-in-the-module-and-customization-of-displaying-page-in-prestashop.html and https://belvg.com/blog/how-to-implement-a-controller.html