0

我正在为 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);
    }
}

目录/视图/主题/默认/模板/扩展/模块/mymodule.twig

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

我错过了什么吗?

4

2 回答 2

0

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

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

于 2017-11-22T10:15:29.817 回答
0

通过控制器添加一个外部 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 }}
于 2017-11-22T08:31:52.160 回答