Подключение сторонних javascript библиотек в плагине

Суть задачи: плагин в своей работе задействует внешнюю js библиотеку. В моём случае — это Google Maps Api. При добавлении этой библиотеки таким образом:
$this->Viewer_AppendScript('http://maps.google.com/maps/api/js?sensor=true&libraries=drawing,geometry');

гугл посылает далеко и надолго.
Я обнаружил 2 решения проблемы:
1 (корявое). Отключить сжатие js файлов:
Config::Set('compress.js.merge',false);
Config::Set('compress.js.use',false);

Почему корявое, думаю, объяснять не стоит.
2 (приемлемое). Полез в код движка и обнаружил что подключить стороннюю js библиотеку можно без проблем, просто вьюверу указать чтоб не пытался объединить её код с остальным:
$this->Viewer_AppendScript('http://maps.google.com/maps/api/js?sensor=true&libraries=drawing,geometry',array('merge'=>false));

Вуаля! Работает!
Подскажите если есть ещё варианты решения данной проблемы

10 комментариев

avatar
почему я не люблю вышеуказанные варианты — т.к. это нарушение структуры mvc — мы прописываем то, что должно быть шаблоном (в широком смысле этого слова) в коде, т.е. привариваем ЖС в вывод в php, а если нужно будет добавить параметр? правильно — снова лезть в код.
поэтому
Подскажите если есть ещё варианты решения данной проблемы
если будет выводится в шаблоне что-то, то в том же шаблоне прописать

<script type="text/javascript" src="{$oConfig->GetValue("path.root.web")}/plugins/userpanel/templates/skin/default/js/init.js"></script>
avatar
Если я правильно понял, в Вашем случае библиотека Google Maps будет подгружаться на всех страницах сайта. Однако она реально нужна только на одной странице. Потому я и добавил в экшене плагина вызов $this->Viewer_AppendScript(...).
avatar
Если я правильно понял, в Вашем случае библиотека Google Maps будет подгружаться на всех страницах сайта.
нет, просто там где нужно её выводить, например через хуки в нужном месте. но как выводить — это другой уже вопрос, а просто показал как считаю правильным выводить данные (если уже следовать модели mvc)

Однако она реально нужна только на одной странице. Потому я и добавил в экшене плагина вызов $this->Viewer_AppendScript(...).
:) неееет. в таком случае она будет на всех страницах сайта точно :)
avatar
таким способом она подключится ко всем скриптам в head и будет на каждой странице, вот ещё один плюс почему я использую тот метод.
avatar
:) Наверное я не совсем ясно выразился. Я вызываю $this->Viewer_AppendScript(...) в евенте экшена плагина. То есть подключится библиотечка только при запросе mysite.ru/myaction/myevent.
Больше нигде.
avatar
ну тогда да, все верно.
avatar
просто в шаблоне того же эвента можно также подключить этот скрипт как я писал
avatar
Спасибо.
avatar
Потому я и добавил в экшене плагина
в екшене или основном файле плагина?
если именно в екшене — тогда да, но если в pluginABC.class.php тогда так как я написал ниже
avatar
еще можно через хук template_html_head_end
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.