尝试在 prestashop 1.7 管理模块中加载 js 和 css 文件

Posted

技术标签:

【中文标题】尝试在 prestashop 1.7 管理模块中加载 js 和 css 文件【英文标题】:trying to load js and css files in prestashop 1.7 admin module 【发布时间】:2018-01-03 01:45:10 【问题描述】:

我正在学习为 prestashop 1.7 编写模块,目前我正在尝试加载用户尝试配置模块时将使用的 css 和 js 文件。

这是我的模块的代码:

class TuxInModComments extends Module


    function __construct()
    
        $this->name = 'tuxinmodcomments';
        $this->tab = 'quick_bulk_update';
        $this->version = '0.1';
        $this->author = 'Kfir Ozer';
        $this->displayName = 'Tux-In Comments and Ranks';
        $this->description = 'With this module, your costumers will be able to grade and comment your products';
        $this->bootstrap = true;

        parent::__construct();
    

    public function install() 
        parent::install();
        $this->registerHook('actionAdminControllerSetMedia');
        return true;
    

    public function processConfiguration()
    
        if (Tools::isSubmit('mymod_pc_form')) 
            $enable_grades = Tools::getValue('enable_grades');
            $enable_comements = Tools::getValue('enable_comments');
            $csvFile = Tools::getValue('csv_file');
            die(var_export($csvFile));
            Configuration::updateValue('MYMOD_GRADES', $enable_grades);
            Configuration::updateValue('MYMOD_COMMENTS', $enable_comements);
            $this->context->smarty->assign('confirmation', 'ok');
        
    

    public function assignConfiguration()
    
        $enable_grades = Configuration::get('MYMOD_GRADES');
        $enable_comments = Configuration::get('MYMOD_COMMENTS');
        $this->context->smarty->assign('enable_grades', $enable_grades);
        $this->context->smarty->assign('enable_comments', $enable_comments);
    

    public function hookActionAdminControllerSetMedia($params)
        $this->registerStylesheet('module-tuxinmodcomments-css','modules/tuxinmodcomments/js/getcontent.css');
        $this->registerjavascript('module-tuxinmodcomments-js','modules/tuxinmodcomments/js/getcontent.js');
    


    public function getContent() 
        $this->processConfiguration();
        $this->assignConfiguration();
        return $this->display(__FILE__,'getContent.tpl');
    


所以我使用名称actionAdminControllerSetMedia 注册了管理设置媒体挂钩,但它似乎没有设置样式表和 javascript 的功能,因为我得到了相同的错误:Uncaught Symfony\Component\Debug\Exception\UndefinedMethodException: Attempted to call an undefined method named "registerStylesheet" OR "registerJavascript" of class "AdminModulesController"

我对此真的很陌生..我读到我需要在前端控制器中设置它..但这是否意味着它将出现在常规页面而不是配置页面中?

不知道如何解决这个问题并且有点困惑,因此非常感谢任何有关此问题的信息。

【问题讨论】:

【参考方案1】:

要加载 CSS 或 JS,你必须使用这个钩子,用这个 sn-p:

public function hookDisplayBackOfficeHeader()

    $this->context->controller->addCSS($this->_path.'pathtocss/module.css', 'all');
    $this->context->controller->addJS($this->_path.'pathtojs/module.js', 'all');

享受:)

PS: 必须先注册 display backoffice header hook

【讨论】:

【参考方案2】:

由于您需要为后台注册资产,即为AdminController,那么您需要使用addJSaddCSS 方法。因此,正确的示例添加一个通过一个模块类的 JS 和一个 CSS 文件是:

public function hookActionAdminControllerSetMedia($params)
 
    // Adds your's CSS file from a module's directory
    $this->context->controller->addCSS($this->_path . 'views/css/example.css'); 

    // Adds your's JavaScript file from a module's directory
    $this->context->controller->addJS($this->_path . 'views/js/example.js');

这里是详细信息,how to register JavaScript in a back-office (in admin pages).

如果您需要在 PrestaShop 1.7 中为前台注册资产(即FrontController),那么您需要使用registerJavascriptregisterStylesheet 方法:

public function hookHeader($params)

    $this->context->controller->registerJavascript(
        'module-tuxinmodcomments',
        'modules/' . $this->name . '/views/js/getcontent.js'
    );

    $this->context->controller->registerStylesheet(
        'module-tuxinmodcomments',
        'modules/' . $this->name . '/views/css/getcontent.css'
    );

【讨论】:

我的 hookActionAdminControllerSetMedia() 中有确切的代码,它向我显示相同的错误(“AdminModulesController”类的名为“registerStylesheet”的未定义方法)。你的回答不对。同样在您提供的链接中,声明在此挂钩中使用 addJS 方法,而不是 registerJS。 我已经更新了这个答案,我也回复了your question。【参考方案3】:

在 hookHeader 中添加 CSS 和 JS 文件:

public function hookHeader()

    $this->context->controller->addCSS($this->_path . 'views/css/styles.css');
    $this->context->controller->addJS($this->_path . 'views/js/script.js');

注册hookHeader:

public function install()

    return parent::install()
        && $this->registerHook('header');

【讨论】:

以上是关于尝试在 prestashop 1.7 管理模块中加载 js 和 css 文件的主要内容,如果未能解决你的问题,请参考以下文章

在Prestashop 1.7中,如何在主菜单模块中显示类别拇指

错误:“错误太多重定向” Prestashop 1.7

Prestashop 1.7 调试栏

如何在 prestashop 1.7 中向 cms 页面添加挂钩

Prestashop 1.7 中的自定义钩子

Prestashop 1.7 模块目录数据未找到