Prestashop 1.6.1.0 backoffice - Uncaught ReferenceError:未定义jQuery

时间:2015-11-06 09:47:16

标签: javascript php jquery prestashop prestashop-1.6

我对prestashop 1.6.1.0有疑问。在我打开开发者控制台的后台,它给了我以下错误Uncaught ReferenceError: jQuery is not defined。我知道这种情况正在发生,因为admin.jsjQuery之前加载。

我花了一些时间来更改Prestashop Backofffice上的脚本层次结构,但我找不到脚本文件位于文档底部的末尾。

以下是我的javascript hierarachy的截图;

enter image description here

有谁知道我可以在哪里更改scripts 层次结构?

提前谢谢。

### EDIT&更新###

在@Sergii P的回答和评论之后,我开始在我的新主题模块中搜索解决方案。我的主题为modules添加了一些新的backoffice。所以我在主题override method中找到了controller;

public function hookDisplayBackOfficeHeader() {
        if (Tools::getValue('configure') == $this->name){
            $this->context->controller->addJquery();
        }
        $this->context->controller->addCSS($this->_path.'assets/css/admin.css');
        $this->context->controller->addJS($this->_path.'assets/js/admin.js');
    }

我该如何更改此方法?

这是backoffice的header.tpl;

{if isset($css_files)}
{foreach from=$css_files key=css_uri item=media}
    <link href="{$css_uri|escape:'html':'UTF-8'}" rel="stylesheet" type="text/css"/>
{/foreach}
{/if}
    {if (isset($js_def) && count($js_def) || isset($js_files) && count($js_files))}
        {include file=$smarty.const._PS_ALL_THEMES_DIR_|cat:"javascript.tpl"}
    {/if}

    {if isset($displayBackOfficeHeader)}
        {$displayBackOfficeHeader}
    {/if}
    {if isset($brightness)}
    <!--
        // @todo: multishop color
        <style type="text/css">
            div#header_infos, div#header_infos a#header_shopname, div#header_infos a#header_logout, div#header_infos a#header_foaccess {ldelim}color:{$brightness}{rdelim}
        </style>
    -->
    {/if}

2 个答案:

答案 0 :(得分:0)

默认情况下jQuery总是先加载, 加载后台和后台脚本可以在classes/controller/AdminController.php方法setMedia中找到,并且有:

        $this->addJquery();
        $this->addjQueryPlugin(array('scrollTo', 'alerts', 'chosen', 'autosize', 'fancybox' ));
        $this->addjQueryPlugin('growl', null, false);
        $this->addJqueryUI(array('ui.slider', 'ui.datepicker'));

        Media::addJsDef(array('host_mode' => (defined('_PS_HOST_MODE_') && _PS_HOST_MODE_)));

        $this->addJS(array(
            _PS_JS_DIR_.'admin.js',
            _PS_JS_DIR_.'tools.js',
            _PS_JS_DIR_.'jquery/plugins/timepicker/jquery-ui-timepicker-addon.js'
        ));

答案 1 :(得分:0)

首先运行Controler :: init()并在运行setMedia()之后调用hookDisplayBackOfficeHeader();在哪里添加jq。

你需要调用addJquery();在hookDisplayBackOfficeHeader(),

    public function hookDisplayBackOfficeHeader()
{
    $this->context->controller->addJquery(); //add jquery
    $this->context->controller->addJs($this->_path.'views/js/js.js'); //add js
}