Как подключить javascript в footer OpenCart?

Работа сис. админа
3 мин. на чтение

Подключение скриптов в OpenCart происходит через библиотеку Document, которую вы можете найти в system/library/document.php. Для этого достаточно сделать 2 вещи:

  1. В контроллере любого модуля, дополнения или блока вставить $this->document->addScript('path/to/script.php');. Эта строка добавит в многомерный массив новый элемент, который потом можно будет вызвать в цикле.
  2. Вывести через цикл foreach скрипты, например так это делается в header:
<?php foreach ($scripts as $script) { ?>
 <script src="<?php echo $script; ?>" type="text/javascript"></script>
 <?php } ?>

Внимательный читатель обратил внимание, что в п.1 употребляется слово многомерный в контексте массива. Суть в том, что если заглянуть в код библиотеки Document, то можно обратить внимание, что у методов addScript  и getScripts в качестве параметра присутствует postion, который по-умолчанию равен header, этот параметр дает возможность складывать скрипты в отдельные блоки. Нам совершенно ничего не мешает менять его скажем на footer. Тогда, чтобы добавить скрипт в footer сайта, а в последствии вызвать его нужно:

В контроллере модуля написать: $this->document->addScript('path/to/script.php','footer');

В контроллере footer’а проверить, чтобы присутствовала строка получения скриптов и что важно именно в таком виде:

$data['scripts'] = $this->document->getScripts('footer');

Ну и в самой .tpl в удобном вам месте вставить:

<?php foreach ($scripts as $script) { ?>
 <script src="<?php echo $script; ?>" type="text/javascript"></script>
 <?php } ?>

В свежих версиях OpenCart ветки 2.х ошибку в слове position исправили. Я написал так, как было в моей – ocStore 2.3 – postion, чтобы облегчить вам поиск по коду.

Игорь Чишкала
Директор по технологиям в SoftForge. Люблю ИТ, пишу технические статьи в этом блоге или для сайта фриланс-биржи Upwork. Кодю на PHP с использованием фреймворков Laravel или Symfony.
Оцените автора
Авторский блог Игоря Чишкалы
Добавить комментарий

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.

  1. Igor

    Хм, а где бы мог задаваться addScript() до контроллера (к примеру common/header)?

    Ответить
    1. Игорь Чишкала автор

      Igor, а что имеется ввиду до контроллера?

      Ответить
  2. Нумизмат

    отлично, работает!

    Ответить
  3. Сергей

    как бы сделать минимизацию скриптов/стилей с объединением в 1 файл, но так, чтобы это работало с разбивкой на схемы: т.е. на главной у нас нет скрипта быстрого заказа – и в общем скрипте для главной нет лишнего кода. и наоборот, если у нас есть скрипт слайдера – то он есть только в общем файле скриптов для главной страницы.

    Ответить