Не удается добавить JS на передний план через $this-›load-›view

Я разрабатываю модуль для OpenCart 3.x и пытаюсь вставить некоторый код JavaScript на переднюю часть веб-сайта с помощью метода $this->load->view(), но не могу заставить его работать, так как код 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>

Я что-то пропустил?


person Carol-Theodor Pelu    schedule 22.11.2017    source источник


Ответы (2)


Добавьте внешний файл 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 }}
person DigitCart    schedule 22.11.2017
comment
Именно это я и написал в посте. Я добавил JS в файл .twig, и он не работает. - person Carol-Theodor Pelu; 22.11.2017
comment
Я не вижу addScript в вашем коде. а ты кеши чистил? - person DigitCart; 22.11.2017
comment
Да, я очистил весь кеш. Кроме того, метод addScript не будет работать в моем случае, так что это не вариант для меня. - person Carol-Theodor Pelu; 22.11.2017
comment
Я проверил ваш отредактированный ответ, но, к сожалению, он не работает :(. - person Carol-Theodor Pelu; 22.11.2017

Я наконец исправил проблему. Проблема заключалась в том, что метод install() неправильно вставлял и загружал дизайн/макет ($this->model_design_layout->getLayouts()).

Если вашему модулю необходимо вставить макет в таблицу layout_module, убедитесь, что у вас есть правильные layout_id, code (это должно быть имя вашего модуля), position (то есть: «content_bottom») и sort_order (что часто > 90).

person Carol-Theodor Pelu    schedule 22.11.2017