Как подключить 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 файл, но так, чтобы это работало с разбивкой на схемы: т.е. на главной у нас нет скрипта быстрого заказа – и в общем скрипте для главной нет лишнего кода. и наоборот, если у нас есть скрипт слайдера – то он есть только в общем файле скриптов для главной страницы.

    Ответить
  4. Андрей Кузнецов

    А в 3-ке снова $postion. Тьху!

    Вообще, пришел туда в поисках скриптов, которые загружаются по http вместо https после того, как увидел, что у меня на сайте пытается загрузиться какой-то левый скрипт от ОпСоСа Еле2 http://p.tlrtb.com/ad/base.js (переходить безопасно, есличё).
    Выяснилось, что два скрипта грузятся по http, и оба связаны с бурговским эквайрингом. Все остальное грузится локально. Так вот, либо я неправ, либо теле2 подменяют скрипт Кларны http://cdn.klarna.com/public/kitt/toc/v1.0/js/klarna.terms.min.js. Как они вообще до этого додумались? У них в логах так много запросов на этот скрипт?

    Короче, к чему это всё. Если вы живете в стране железного занавеса, проверьте, чтобы все cdn были подключены по https. И не доверяйте вслепую ссылкам без указания протокола, типа //cdn.klarna.com/public/kitt/toc/v1.0/js/klarna.terms.min.js – если перейдете, то увидите, что включается тот же http, хотя поддержка https по этому урлу есть.

    Ответить
    1. Awakum

      А, и еще. Спасибо, Игорь, за подкасты, ништяк

      Ответить