Jhtml :: замовлення сценарію - як відкласти до завантаження jQuery?


11

Я використовую JHtml::scriptдля додавання скриптів на свої сторінки в спеціально розроблений модуль. Однак ці сценарії вводяться в голову до того, як J3 додасть у jQuery - наприклад:

<!-- my module js -->
<script src="/modules/mod_tiles/js/jquery.isotope.min.js" type="text/javascript"></script>
<script src="/modules/mod_tiles/js/jquery.hoverintent.min.js" type="text/javascript"></script>
<script src="/modules/mod_tiles/js/mod_tiles.js" type="text/javascript"></script>
<!-- then joomla loads jQuery --->
<script src="/media/jui/js/jquery-noconflict.js" type="text/javascript"></script>
<script src="/media/jui/js/jquery.min.js" type="text/javascript"></script>

Як змусити Joomla завантажити jQuery перед будь-якими іншими сценаріями?

Відповіді:


15

Вам слід зателефонувати

JHtml::_('jquery.framework');

перед іншим сценарієм JHtml :: AFAIK це гарантує, що jQuery спочатку завантажується.


Це єдине рішення, яке працювало для мене - розміщене в mod_tiles.phpцьому вимушеному jQuery, щоб спочатку завантажити. Дякую!
кодування руками


2

якщо я правильно прочитав ваше запитання, ви розробляєте власний модуль.

Спробуйте це, у default.php - перегляд модуля (у "tmpl"):

JHtml::stylesheet('modules/'.$module->module.'/assets/css/yourfile.css');

JHtml::script('modules/'.$module->module.'/assets/js/yourscript.js');

Або це:

JHtml::_('stylesheet', 'modules/'.$module->module.'/assets/css/anotherfile.css');

JHtml::_('script', 'modules/'.$module->module.'/assets/js/othercript.js');

В обох випадках ваші JS-файли повинні бути введені після jQuery, за умови, що ви створили папку "актив", а "css" і "js" папку всередині.

Друге рішення більше відповідає API joomla 3.XX.

Сподіваюся, це допомагає.


Єдина зміна, яку я вніс тут, полягала в тому, щоб додати assetsпапку - вона не відрізняється, і сценарії все ще завантажуються до того, як зробить jQuery. Мені також цікаво, що мудрість вводити такий тип коду у файл шаблонів (особливо, якщо є декілька шаблонів із використанням одних і тих самих сценаріїв, DRY тощо)
codinghands

Хем, ваш коментар дивний -> "введення такого коду у файл шаблону". Я говорив про модуль, розроблений вами та заснований на isotope.js та інших сценаріях JS, і, можливо, це було недостатньо зрозуміло. Мені дуже шкода, якщо я помилився, і ви фактично використовуєте сторонній модуль, який називається mod_tiles. До речі, існують інші способи вставлення скриптів JS в шаблон.
ghazal

Вибачте, я не хотів звучати так суворо ха-ха! Повинен бути занадто рано ... Ви абсолютно праві, це те, що я роблю - це мій модуль. Що я мав на увазі під шаблоновим файлом, було default.phpв tmplпапці (template) модуля. Думаю, сценарії слід завантажувати mod_tiles.php(«контролер»), а не default.php(перегляд).
кодування руками

Розміщення його в tmpl / default.php дозволяє змінити. У mod_tiles.php це неможливо змінити.
sovainfo

2

Я зіткнувся з цією проблемою минулого тижня, і це було пов'язано з тим, куди я дзвонив JHtml :: script. Ви робите це у своєму поданні чи шаблоні подання? Якщо ви спробуєте додати сценарії до самого перегляду (views / yourview / view.html.php), вони будуть вставлені перед власними сценаріями Joomla !, але якщо ви додасте сценарії в шаблон (views / yourview / tmpl / default.php) вони будуть вставлені після сценаріїв Joomla!

Удачі!


Це модуль із лише mod_tiles.php, файлом helper.php та одним шаблоном (default.php) tmpl. Я спробував додати сценарії в обох mod_tiles.php і default.php - обидва завантажуються перед jQuery.
кодування руками

0

Можливо, це пов'язано з методом, який розробник mod_tilesвикористав для імпорту скриптів. Я припускаю, що вони не дотримувались стандартів кодування Joomla в цій ситуації.

У вас є два варіанти (що я можу придумати) hwre:

  1. Якщо сценарії імпортуються з файлу в папці tmpl в модулі, ви можете виконати заміна шаблону та змінити спосіб імпорту скрипта, використовуючи JHtml.
  2. Ви можете завантажити та встановити jQuery Easy, який є плагіном, який імпортує jQuery і розміщує його над усіма іншими сценаріями.

Сподіваюсь, це допомагає


Я розробив модуль - який метод я повинен використовувати? Я запитав це у запитанні ( joomla.stackexchange.com/questions/325/… ), і мені сказали, що JHtml :: script - це шлях вперед.
кодування руками

0

Я хотів додати свої два біти після факту. У мене є кілька сценаріїв та таблиць стилів, які потрібно завантажити для кожного перегляду, який ми маємо в складі компонента, і хотів, щоб це сталося так, щоб переконатися, що вони завантажені в правильній послідовності.

У файлі components\myComponent\mycomponent.php:

defined('_JEXEC') or die;

// Include dependancies
jimport('joomla.application.component.controller');

JHtml::stylesheet('http://maxcdn.bootstrapcdn.com/font-awesome/4.2.0/css/font-awesome.min.css', array(), true);
JHtml::stylesheet('components/com_mycomponent/assets/css/mycomponent.css');

JHtml::_('jquery.framework');   // Make sure jQuery is loaded before component JS
JHtml::script( 'components/mycomponent/assets/js/jquery.cookie.js');

// Execute the task.
$controller = JControllerLegacy::getInstance('Mycomponent');
$controller->execute(JFactory::getApplication()->input->get('task'));
$controller->redirect();

-1

Я знаю, що це стара тема, але ви коли-небудь доходили до цього? Я щойно пережив ту ж проблему. Я визначив ПРИЧИНУ, але не проблему / рішення; У мене підступна підозра, що це БУГ, але міг би це зробити з кимось іншим, хто намагається це випробувати.

Сценарій: Ви створили модуль, що включає сценарій, залежний від jQuery, щоб ви використовували таке у своєму перегляді default.php:

$doc = JFactory::getDocument();
$doc->addScript("media/mod_accordion/js/accordion.js");

Потім ви встановлюєте модуль і надаєте йому положення модуля, скажімо, що "ліворуч". Якщо ви подивитесь на вихідний вихідний код, то все виглядає добре, всі сценарії завантажуються після скриптів, які включені в нього

JHtml::_('bootstrap.framework');

ЗАРАЗ, якщо ви надаєте модулю позицію "акордеон" і використовуєте функцію навантаження Joomla, щоб додати модуль до статті

{loadposition accordion}

потім додається акордон.js перед файлами bootstrap.framework.

Єдиний спосіб, коли я зміг підключити його до роботи, - це додати скрипт як вбудований сценарій, а не включати його в голову.

EDIT: те саме стосується і css; він додається до верхньої частини списку декларування css (перед файлами css-шаблону та завантажувального файлу). Основним завданням цього є додати! Важливо до декларацій css.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.