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 &gt; Traffic &amp; SEO

【讨论】:

在 PS 1.6 / 1.5 中通常位于主题的根目录中。在 PS 1.7 中,其中一些位于根目录中,而另一些位于子文件夹中。在/controller/front/ControllerName.php 中可以看到属性$this-&gt;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 请求

如何使用 prestashop 1.7 上的模块在前台创建自定义页面

Prestashop 1.7在管理产品页面上添加自定义字段

Prestashop 产品自定义 - 保存到购物车

Prestashop 1.7 中的自定义钩子

自定义模块翻译prestashop 1.7.8.1的问题