prestashop 1.5 smarty缺少后​​端的默认变量

时间:2012-12-07 17:51:08

标签: smarty prestashop

我正在为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}打印所有变量时

根据The official documentation,我不会像{i}}那样得到变量{img_dir}{shop_name}

我很困惑放置模板的位置,主题所在的位置等等。我只需要后台(后端)页面。我做错了什么?

谢谢

2 个答案:

答案 0 :(得分:2)

Smarty变量具有全局范围。这意味着它们可以在一个文件中分配,并且您可以在脚本的所有生命周期中的任何位置使用它们。这样,当您在前端触发挂钩或使用自己的tpl时,无论您使用哪个控制器,最有可能(尽管可能存在覆盖控制器的异常),方法FrontController::init()将被激活。在此方法中,大多数全局智能变量都已分配(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()不会被占用,而且您需要分配所有这些变量才能在文件中使用它们。

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

答案 1 :(得分:0)

如果您想将扩展配置表单/ html放在Prestashop的Modules选项卡中,那么更好/必要的是没有聪明,而且通常通过某些方法完成,例如displayForm with javascript,html等,以及公共方法getContent()你调用这个函数并返回显示那里所需的html。 Here is a old manual for simple extension for 1.4但你可以从中得到一个想法。

从1.5开始,也可以使用默认字段设置表单,就像在private function initForm()

中的编辑模块中一样

能够在管理面板内部制作更难的内容(使用模板)我认为您需要create your own tab内部现有的create your own

在我所知的所有默认模块中,tpl css js文件(mymodule.tpl)用于显示前端的内容并应放入(这适用于1.5版本,在1.4中这些文件放在模块根文件夹中并且它仍然适用于许多核心模块)

  • /模块/ my_module /视图/模板/ {前|| ||钩管理员} /my_module.tpl

  • /模块/ my_module /视图/模板/ {前|| ||钩管理员} /my_module.css

  • /模块/ my_module /视图/模板/ {前|| ||钩管理员} /my_module.js

    主题的前端功能(但假设对于管理员来说也是如此)应该像prestashop guide Overriding a module's behavior中那样覆盖