【问题标题】:Can't get to add JS to front via $this->load->view无法通过 $this->load->view 将 JS 添加到前面
【发布时间】:2017-11-22 18:16:10
【问题描述】:

我正在为 OpenCart 3.x 开发一个模块,我正在尝试通过 $this->load->view() 方法将一些 JavaScript 代码插入网站的前端,但由于 JS 代码未出现在 DOM 中,因此无法使其工作.

这是我的代码的摘录:

/catalog/controller/extension/module/mymodule.php

class ControllerExtensionModuleMyModule extends Controller {

    public function index() {

        $this->load->language('extension/module/mymodule');

        $this->load->model('checkout/order');
        $this->load->model('setting/setting');
        $this->load->model('design/layout');
        $this->load->model('catalog/category');
        $this->load->model('catalog/manufacturer');
        $this->load->model('catalog/product');
        $this->load->model('catalog/information');

        $data['js_output'] = "Some JS output"; 

        return $this->load->view('extension/module/mymodule', $data);
    }
}

catalog/view/theme/default/template/extension/module/mymodule.twig

<script type="text/javascript">
console.log('This is working!");
</script>

我错过了什么吗?

【问题讨论】:

    标签: opencart opencart-module opencart-3


    【解决方案1】:

    通过控制器添加外部 javascript 文件,如下所示:

    $this->document->addScript('catalog/view/javascript/my-external-script.js');
    

    但如果是一段 javascript 代码,则无需编辑控制器文件,只需将其添加到视图文件(twig 或 tpl)中即可:

    <script type="text/javascript">
        console.log("This is working!");
    </script>
    

    最后,您可能需要清除缓存(vqmod、ocmod、twig 等...)。

    编辑

    如果您想在控制器中准备 javascript 代码,请按照以下步骤操作:

    控制器

    $data['js_output'] = 
    '<script type="text/javascript">
        console.log("This is working!");
    </script>';
    

    树枝

    {{ js_output }}
    

    【讨论】:

    • 这正是我在帖子中所写的。我已将 JS 添加到 .twig 文件中,但它无法正常工作。
    • 我在您的代码中看不到 addScript。你也清除缓存了吗?
    • 是的,我已经清除了所有的缓存。此外,addScript 方法不适用于我的情况,所以这不是我的选择。
    • 我已经测试了您编辑的答案,但遗憾的是它不起作用:(。
    【解决方案2】:

    我终于解决了这个问题。这是install() 方法无法正确插入和加载设计/布局($this-&gt;model_design_layout-&gt;getLayouts())的问题。

    如果您的模块需要在layout_module 表中插入布局,请确保您具有正确的layout_idcode(必须是您的模块名称)、position(即:'content_bottom ') 和sort_order(通常 > 90)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多