Как подключить 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

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

      Ответить