Prestashop 自定义页面与自己的模板
Posted
技术标签:
【中文标题】Prestashop 自定义页面与自己的模板【英文标题】:Prestashop custom page with own template 【发布时间】:2019-02-16 03:00:53 【问题描述】:我正在运行我自己的 prestashop 主题,并想添加一个没有 css 的新页面。 因此我添加了三个文件 php、controller 和 template。我将 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>
【问题讨论】:
【参考方案1】:对于 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
删除类索引文件:/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
。
【讨论】:
在 PS 1.6 / 1.5 中通常位于主题的根目录中。在 PS 1.7 中,其中一些位于根目录中,而另一些位于子文件夹中。在/controller/front/ControllerName.php
中可以看到属性$this->setTemplate('path/here');
中的路径
你能先告诉我你用的是哪个PS版本吗?
@ItFreak 我已经更新了我的答案以逐步说明要遵循的过程,现在我认为应该更清楚了。
@ItFreak 我真的不明白你的问题,但如果这不是关于这个问题,请创建一个新问题。
内容应该在page_content
块内,而不是在它之外,例如我的例子。【参考方案2】:
我认为最佳做法是使用您的自定义页面创建一个模块。因为使用您的方法,您可能会在 prestashop 更新后遇到麻烦,而且您的商店的行为可能因不同的属性而无法预测。
这里有一些关于如何在模块https://belvg.com/blog/creating-frontcontroller-in-the-module-and-customization-of-displaying-page-in-prestashop.html和https://belvg.com/blog/how-to-implement-a-controller.html中创建自己的页面的信息
【讨论】:
谢谢,我按照这个博客的另一个教程来创建这些文件。现在我在 SEO 下添加了它(所以我认为 prestashop 知道它在“那里”),我该如何调用该页面? 使用 $link = new Link(); $link->getModuleLink('your_module', 'controller', $params);用于模块或 $link->getPageLink('controller') 用于具有您尝试过的自定义页面装箱的该方法。如果你已经正确实现了一切,它应该可以工作 我在哪里可以看到这个链接? 如果您使用的是模块,您可以定义一个变量并将其传递给您的前端。像 $customPage = $link->getModuleLink('your_module', 'controller', $params);并在您的 tpl 中使用它,例如 。或者,如果您使用自定义页面变体,则需要将其添加到 classes/controller/FrontController.php 到数组 $p(包含页面名称)中的方法 getTemplateVarUrls 中,并在模板中使用它,例如 $urls.pages.custom_page以上是关于Prestashop 自定义页面与自己的模板的主要内容,如果未能解决你的问题,请参考以下文章
如何在 prestashop 1.7 中对自定义页面进行 ajax 请求