1

我正在为 PrestaShop 1.5开发一个模块Abc这是我的目录

23/10/2012  18:23             1.307 index.php
07/12/2012  18:27    <DIR>          tpl
               -> tpl dir:
               07/12/2012  18:27    <DIR>          .
               07/12/2012  18:27    <DIR>          ..
               07/12/2012  18:39               543 form.tpl
07/12/2012  18:36             4.507 abc.php

这是我使用的代码:

class Abc extends Module
{
    public function getContent()
    {
             return $this->display(dirname(__FILE__), 'tpl/form.tpl');
        }
...
}

但是,当我使用 smarty{debug}打印所有变量时

根据官方文档,我没有得到变量{img_dir}{shop_name}我应该得到的变量。

我对放置模板的位置、主题的位置等感到困惑。我只需要后台(后端)页面。我究竟做错了什么?

谢谢

4

2 回答 2

2

Smarty 变量具有全局范围。这意味着它们可以分配在一个文件中,您将能够在脚本的所有生命周期中的任何地方使用。这样,当您在前端触发 hook 或使用自己的 tpl 时,无论您使用哪个控制器,最有可能(尽管可能有覆盖控制器的例外)方法FrontController::init()都会被执行。在这种方法中,大多数这些全局 smarty 变量都被分配(http://doc.prestashop.com/display/PS15/Creating+a+PrestaShop+module#CreatingaPrestaShopmodule-UsingSmarty):

$assign_array = array(
    'img_ps_dir' => _PS_IMG_,
    'img_cat_dir' => _THEME_CAT_DIR_,
    'img_lang_dir' => _THEME_LANG_DIR_,
    'img_prod_dir' => _THEME_PROD_DIR_,
    'img_manu_dir' => _THEME_MANU_DIR_,
    'img_sup_dir' => _THEME_SUP_DIR_,
    'img_ship_dir' => _THEME_SHIP_DIR_,
    'img_store_dir' => _THEME_STORE_DIR_,
    'img_col_dir' => _THEME_COL_DIR_,
    'img_dir' => _THEME_IMG_DIR_,
    'css_dir' => _THEME_CSS_DIR_,
    'js_dir' => _THEME_JS_DIR_,
    'pic_dir' => _THEME_PROD_PIC_DIR_
); 

在管理面板中使用钩子FrontController::init()不会被执行,这就是您需要分配所有这些变量以便在文件中使用它们的方式。

但是在管理面板的任何地方,您都可以使用在 method 中分配的 module_dir 和 module_template_dir Module::display()

于 2012-12-11T15:51:36.133 回答
0

如果您想将扩展配置表单/html 放在 Prestashop 的 Modules 选项卡中,最好/有必要不使用 smarty,它通常通过诸如带有 javascript、html 等的 displayForm 和公共方法 getContent() 来完成,您称之为函数并返回在此处显示所需的 html。这是 1.4 的简单扩展的旧手册,但您可以从中得到一个想法。

从 1.5 开始,还可以使用默认字段设置表单,就像在私有函数 initForm()的编辑模块中所做的那样

为了能够在管理面板(使用模板)中使事情变得更加困难,我认为您需要在现有选项卡中创建自己的选项卡或创建自己的选项卡

据我所知,在所有默认模块中,tpl css js 文件(mymodule.tpl)用于在前端显示内容并应放置在其中(对于 1.5 版本是这样,在 1.4 中,这些文件被放置在模块根文件夹中,它仍然是对于很多核心模块都是如此)

  • /modules/my_module/views/templates/{front||hook||admin}/my_module.tpl

  • /modules/my_module/views/templates/{front||hook||admin}/my_module.css

  • /modules/my_module/views/templates/{front||hook||admin}/my_module.js

    主题的前端功能(但假设它也适用于管理员)应该像prestashop 指南中一样被覆盖覆盖模块的行为

于 2012-12-11T06:40:55.650 回答