Форум русской поддержки Joomla!® CMS
04.12.2016, 10:09:42 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
   
   Начало   Поиск Joomla 3.0 FAQ Joomla 2.5 FAQ Joomla 1.5 FAQ Правила форума Новости Joomla Реклама Войти Регистрация Помощь  
Страниц: [1] 2  Все   Вниз
  Добавить закладку  |  Печать  
Автор

Порядок загрузки скриптов

 (Прочитано 9184 раз)
0 Пользователей и 1 Гость смотрят эту тему.
wertex
Новичок
*

Репутация: +6/-0
Offline Offline

Сообщений: 9



« : 13.03.2014, 01:59:19 »

Библиотека jquery подключенная в шаблоне грузится позже остальных скриптов подключенных в модулях, что приводит к конфликту и неработоспособности последних.

К примеру порядок загрузки скриптов в HEAD сейчас:
Код
<script src="/modules/mod_chat/js/ajax.js" type="text/javascript"></script>
<script src="/modules/mod_fantasy/js/script.js" type="text/javascript"></script>
<script src="/templates/roadstar/js/jquery-1.7.1.min.js" type="text/javascript"></script>
а нужно:
Код
<script src="/templates/the_eight/js/jquery-1.7.1.min.js" type="text/javascript"></script>
<script src="/modules/mod_chat/js/ajax.js" type="text/javascript"></script>
<script src="/modules/mod_fantasy/js/script.js" type="text/javascript"></script>

Вопрос! Как заставить скрипты шаблона грузится раньше скриптов модулей?
Записан
 
Очередной вебмастер
Завсегдатай
*****

Репутация: +54/-0
Offline Offline

Пол: Мужской
Сообщений: 790


лысый умный дядя


« Ответ #1 : 13.03.2014, 08:39:39 »

http://docs.joomla.org/JDocument/addStyleSheet  -не?
Записан
wertex
Новичок
*

Репутация: +6/-0
Offline Offline

Сообщений: 9



« Ответ #2 : 14.03.2014, 12:02:36 »

addStyleSheet - вызов стилей  Smiley, ну да ладно.

Попытаюсь сформулировать вопрос по другому.
В шаблоне подключаю библиотеку jquery основную для всего сайта, делаю это так:

Код
$this->addScript($this->baseurl.'/templates/'.$this->template.'/js/jquery-1.7.1.min.js');

В модуле подключаю скрипт, к примеру:

Код
$doc = & JFactory::getDocument();
$doc->addScript( JURI::root(true)."/modules/mod_fantasy/js/script.js" );
 

Библиотека jquery расположенная в шаблоне подключается позже скрипта прописанного в модуле, что приводит к неработоспособности скрипта модуля. То есть в шапке документа это выглядит так, как было указано в первом посте.
Подключать еще раз jquery внутри модуля, как-то нелогично.

Вопрос!
Как правильно прописать подключение jquery или каким методом вызвать, чтобы скрипт (скрипты) шаблона грузился раньше скрипта (скриптов) модулей?

Заранее спасибо!
Записан
fsv
Практически профи
*******

Репутация: +330/-2
Offline Offline

Пол: Мужской
Сообщений: 2235


« Ответ #3 : 14.03.2014, 14:45:33 »

В шаблоне подключаю библиотеку jquery основную для всего сайта
Где? Предполагаю, что до DOCTYPE .
Подключите в <head> ДО <jdoc:include type="head" /> .
Записан
wertex
Новичок
*

Репутация: +6/-0
Offline Offline

Сообщений: 9



« Ответ #4 : 15.03.2014, 03:00:28 »

Где? Предполагаю, что до DOCTYPE .
Подключите в <head> ДО <jdoc:include type="head" /> .

fsv спасибо Вам за ответ! Но в меня так и прописано внутри index.php

Код
<head>
<?php
$this->addScript($this->baseurl.'/templates/'.$this->template.'/js/jquery-1.7.1.min.js');
$this->addScript('/templates/'.$this->template.'/js/personal.js');
?>
<jdoc:include type="head" />  
</head>

Вот так выглядит при просмотре кода:
Код
<head>
 <base href="http://opa.in.europa" />
 <meta http-equiv="content-type" content="text/html; charset=utf-8" />
 <meta name="keywords" content="ключевые слова" />
 <meta name="description" content="описание" />
 <meta name="generator" content="Joomla! - Open Source Content Management" />
 <title>Тестовая страница</title>
 <link href="/templates/roadstar/favicon.ico" rel="shortcut icon" type="image/vnd.microsoft.icon" />
 <link rel="stylesheet" href="/modules/mod_fantasy2/assets/style.css" type="text/css" />
 <link rel="stylesheet" href="/templates/roadstar/css/customs.css" type="text/css" />
 <link rel="stylesheet" href="/templates/roadstar/css/reset.css" type="text/css" />
 <link rel="stylesheet" href="/templates/roadstar/css/layout.css" type="text/css" />
 <link rel="stylesheet" href="/templates/roadstar/css/modules.css" type="text/css" />
 <script src="/media/system/js/mootools-core.js" type="text/javascript"></script>
 <script src="/media/system/js/core.js" type="text/javascript"></script>
 <script src="/media/system/js/caption.js" type="text/javascript"></script>
 <script src="/modules/mod_fantasy2/js/ajaxs.js" type="text/javascript"></script>
 <script src="/templates/roadstar/js/jquery-1.7.1.min.js" type="text/javascript"></script>
 ...

Но если прописать:

Код
<head>
<script type="text/javascript" src="<?php echo $this->baseurl ?>/templates/<?php echo $this->template; ?>/js/jquery-1.7.1.min.js"></script>
<?php
$this->addScript('/templates/'.$this->template.'/js/personal.js');
?>
<jdoc:include type="head" />  
</head>
 

библиотека замечательно подгружается первой, выше всех скриптов, meta описаний и title то есть в самое начало HEAD, что как бы не нормально, да и подгруздка методом addScript более правильнее.

В общем это выглядит так:

Код
<head>
<script type="text/javascript" src="/templates/roadstar/js/jquery-1.7.1.min.js"></script>
 <base href="http://opa.in.europa" />
 <meta http-equiv="content-type" content="text/html; charset=utf-8" />
 <meta name="keywords" content="ключевые слова" />
 <meta name="description" content="описание" />
 <meta name="generator" content="Joomla! - Open Source Content Management" />
 <title>Тестовая страница</title>
 <link href="/templates/roadstar/favicon.ico" rel="shortcut icon" type="image/vnd.microsoft.icon" />
 <link rel="stylesheet" href="/modules/mod_fantasy2/assets/style.css" type="text/css" />
 <link rel="stylesheet" href="/templates/roadstar/css/customs.css" type="text/css" />
 <link rel="stylesheet" href="/templates/roadstar/css/reset.css" type="text/css" />
 <link rel="stylesheet" href="/templates/roadstar/css/layout.css" type="text/css" />
 <link rel="stylesheet" href="/templates/roadstar/css/modules.css" type="text/css" />
 <script src="/media/system/js/mootools-core.js" type="text/javascript"></script>
 <script src="/media/system/js/core.js" type="text/javascript"></script>
 <script src="/media/system/js/caption.js" type="text/javascript"></script>
 <script src="/modules/mod_fantasy2/js/ajaxs.js" type="text/javascript"></script>
 ...

В общем мозги начинают по понемногу закипать. Есть еще идеи?
Записан
newjus
Осваиваюсь на форуме
***

Репутация: +1/-0
Offline Offline

Сообщений: 53


« Ответ #5 : 30.05.2014, 00:48:38 »

wertex, решили как-то вопрос? Неужели ни у кого больше он не возник?
Записан
Fedor Vlasenko
Профи
********

Репутация: +696/-5
Offline Offline

Пол: Мужской
Сообщений: 3820


Все начинается с Value


« Ответ #6 : 30.05.2014, 01:10:36 »

пропишите прямо в
<head><script src="/templates/roadstar/js/jquery-1.7.1.min.js" type="text/javascript"></script></head>
без использования api
Записан
newjus
Осваиваюсь на форуме
***

Репутация: +1/-0
Offline Offline

Сообщений: 53


« Ответ #7 : 30.05.2014, 22:41:13 »

А кто знает как именно ПОМЕНЯТЬ порядок загрузки? Где то "нечто", которое отвечает за это порядок? Неужели никто из столь большого количества пользователей не знает?!

Вот как его изменить, чтобы jquery-1.8.3.min.js грузился первым?

Код:
<script src="/media/system/js/mootools-core.js" type="text/javascript"></script>
  <script src="/media/system/js/core.js" type="text/javascript"></script>
  <script src="/components/com_k2/js/k2.js?v2.6.7&amp;sitepath=/" type="text/javascript"></script>
  <script src="/media/system/js/caption.js" type="text/javascript"></script>
  <script src="/plugins/system/t3/base/js/jquery-1.8.3.min.js" type="text/javascript"></script>
  <script src="/plugins/system/t3/base/js/jquery.noconflict.js" type="text/javascript"></script>
  <script src="/plugins/system/t3/base/bootstrap/js/bootstrap.js" type="text/javascript"></script>
  <script src="/plugins/system/t3/base/js/script.js" type="text/javascript"></script>
  <script src="/plugins/system/t3/base/js/menu.js" type="text/javascript"></script>
  <script src="/plugins/system/t3/base/js/responsive.js" type="text/javascript"></script>
  <script src="/media/com_acymailing/js/acymailing_module.js?v=462" type="text/javascript"></script>
  <script src="http://joomla/modules/mod_bt_contentshowcase/assets/js/jcarousel.js" type="text/javascript"></script>
  <script src="http://joomla/modules/mod_bt_contentshowcase/assets/js/hammer.js" type="text/javascript"></script>
  <script src="http://joomla/templates/bt_shopping_t3v3_v1/html/mod_bt_contentshowcase/themes/responsive/js/default.js" type="text/javascript"></script>
  <script src="http://joomla/modules/mod_bt_productslider/assets/js/jcarousel.js" type="text/javascript"></script>
  <script src="http://joomla/templates/bt_shopping_t3v3_v1/html/mod_bt_productslider/themes/shopping/js/default.js" type="text/javascript"></script>
  <script src="http://joomla/modules/mod_bt_backgroundslideshow/tmpl/js/default.js" type="text/javascript"></script>
  <script src="http://joomla/modules/mod_bt_smartsearch/tmpl/js/chosen.jquery.min.js" type="text/javascript"></script>
  <script src="/media/com_finder/js/autocompleter.js" type="text/javascript"></script>
  <script src="http://joomla/modules/mod_bt_sociallogin/tmpl/js/jquery.jscrollpane.min.js" type="text/javascript"></script>
  <script src="http://joomla/modules/mod_bt_sociallogin/tmpl/js/jquery.simplemodal.js" type="text/javascript"></script>
  <script src="http://joomla/modules/mod_bt_sociallogin/tmpl/js/default.js" type="text/javascript"></script>
  <script src="/media/system/js/mootools-more.js" type="text/javascript"></script>
  <script src="/media/system/js/validate.js" type="text/javascript"></script>
  <script type="text/javascript">
Записан
SmokerMan
Профи
********

Репутация: +692/-25
Offline Offline

Пол: Мужской
Сообщений: 5215



« Ответ #8 : 31.05.2014, 00:58:45 »

Код:
//получаем массив скриптов
$doc = JFactory::getDocument();
$scripts = $doc->_scripts;

//чего-то там  делаем
if (is_array($scripts) && !empty($scripts)) {
    $first_scripts = array();
foreach ($scripts as $key => $script) {
if (strpos($key, 'caption.js')!== false) {
    $first_scripts[$key] = $script;
unset($scripts[$key]);
}
}

if (!empty($first_scripts)) {
$scripts = $first_scripts + $scripts;
}
}
//устанавливаем обратно
$doc->_scripts = $scripts;
Записан
flyingspook
Профи
********

Репутация: +226/-9
Offline Offline

Сообщений: 3525


« Ответ #9 : 31.05.2014, 11:56:09 »

Не будет правильно если скрипты из модулей в шаблон вставить и еще и с условиями на работу самого модуля, думаю ни чего не изменяется как было так, есть и будет, коробочка и дополнительные расширения для "...", а если сами делаете и вы не "...", то оптимизация и заключается выведением скриптов и стилей из расширений в шаблон, не за это ли все не понимают почему сделать сайт не так просто, а думают что поставил cms накидал на неё расширений всяких разных и "радуйся"
Записан
zomby6888
Живу я здесь
******

Репутация: +168/-3
Offline Offline

Пол: Мужской
Сообщений: 1538


« Ответ #10 : 31.05.2014, 14:34:33 »

smokerman, вам не кажется что это офигеть какие костыли?

Метод addscript подключает скрипты в том порядке в каком ему вздумается(хотя я подозреваю что все дело в том что он сначало рендерит модули а потом из буфера выводит его в шаблон, поэтому скрипты из модуля попадают в head раньше). А метод addScriptDeclaration вобще добавляет кусок из мутулса в скрипт который добавляет в head( по крайней мере в версии 2,5), так что если в шаблоне отключен мутулс, начинаются глюки скриптов. Поэтому в некоторых случаях проще отказаться от этих методов пока их не допилят а подключать скрипты вручную.
Записан
SmokerMan
Профи
********

Репутация: +692/-25
Offline Offline

Пол: Мужской
Сообщений: 5215



« Ответ #11 : 31.05.2014, 15:32:46 »

smokerman, вам не кажется что это офигеть какие костыли?
Я ничего не думаю) был конкретный вопрос, я дал ответ

Метод addscript подключает скрипты в том порядке в каком ему вздумается(хотя я подозреваю что все дело в том что он сначало рендерит модули а потом из буфера выводит его в шаблон, поэтому скрипты из модуля попадают в head раньше). А метод addScriptDeclaration вобще добавляет кусок из мутулса в скрипт который добавляет в head( по крайней мере в версии 2,5), так что если в шаблоне отключен мутулс, начинаются глюки скриптов. Поэтому в некоторых случаях проще отказаться от этих методов пока их не допилят а подключать скрипты вручную.
Данный метод ничего не добавляет, добавляется только то, что ему передается.
По поводу скриптов от мутулз есть такое дело. Обсуждалось не раз как от них избавиться. Даже по моему был плагин на JED, которой позволяет отключить му на фронте.
Да и в общем все это дело лучше, конечно, делать через плагин (есть даже специальное событие onBeforeCompileHead), а не искать где и когда что подключается


Записан
zomby6888
Живу я здесь
******

Репутация: +168/-3
Offline Offline

Пол: Мужской
Сообщений: 1538


« Ответ #12 : 31.05.2014, 17:21:38 »

вот эту бяку он мне добавляет если в модулях подключить скрипты через addScriptDeclartion():
Код
window.addEvent('load', function() {
new JCaption('img.caption');
})
 
Причем я смотрел это из какой то встроенной библиотеки кусок . С отключенным мутулс послее этого не работает не один скрипт, а отключение мутулс типа unset($this->_scripts... ) я вижу все чаще и чаще в шаблонах.

Кстатии  если вызывать addScriptDeclartion() из компонента то он ничего не добавляет, но если делать unset($this->_script['text/javascript']) То он уберет все скрипты подключенные таким образом из компонента, но оставит те которые подключены в модуле.  Вот уж действительно магия)

Считаю что разработчик должен решать какие библиотеки и в каком порядке подключать в ядре, так как сейчас это реализовано, это конечно не комильфо (мутулс так вобще уже мало кто использует).
Да и в общем все это дело лучше, конечно, делать через плагин (есть даже специальное событие onBeforeCompileHead)
Ну хоть тут есть лазейка. Может быть подскажете какой-нибудь плагин с минимальным функционалом, чтобы можно было подпилить при желании?
Записан
mark1
Давно я тут
****

Репутация: +38/-2
Offline Offline

Сообщений: 385



« Ответ #13 : 01.06.2014, 15:30:41 »

smokerman, вам не кажется что это офигеть какие костыли?
мне лично - да, кажется. Не в упрек SmokerMan, имхо это проблема Joomla .
Я так и не знаю иного способа повлиять на очередность загрузки. Sad CMS по-моему должна иметь опцию "я знаю что делаю, дайте мне выставить очередность скриптов".

Может быть подскажете какой-нибудь плагин с минимальным функционалом, чтобы можно было подпилить при желании?
Подскажу, но с максимальным функционалом: Jbetolo, бесплатен. http://jproven.com/extensions/jbetolo
C ним нужно терпение, так как при огромном выборе опций прилагается еще и ряд багов. Но если их знать - вопрос решает чудно, можно полностью порулить очередностью скриптов и стилей, + минификация и сжатие. Принцип вкратце: в опциях впишете одну большую очередность скриптов, с учетом всех страниц сайта.
Пример: есть страница (1) со скриптами в очередности a,c и b.
И страница (2) со скриптами в очередности b, с и d.
Вы укажете очередность: a,b,c,d. Чтобы она подошла к любой странице, и к (1) и к (2).
Ну и +учтете очередность Mootools/jQuery (классика жанра). Cо стилями - то же самое.

Я уже пяток сайтов на Jbetolo держу. Есть такие, что набирают более 90 из 100 балов по Google Page speed.
« Последнее редактирование: 01.06.2014, 16:01:15 от mark1 » Записан
Sven
Осваиваюсь на форуме
***

Репутация: +6/-5
Offline Offline

Сообщений: 119


« Ответ #14 : 18.08.2014, 00:26:27 »

Тоже поделюсь своим решением проблемы для Joomla3, может кому-то время сэкономит:

1. Устанавливаем этот плагин http://joomlaforum.ru/index.php/topic,253684.msg1295681.html#msg1295681
В опциях плагина отключаем всё - все три галочки ставим в положение Да. Потому что, даже если отключить например только Mootools и Bootstrap, то Jquery все-равно почему-то тоже отключается. Поэтому чтобы не было глюков, на всякий случай отключаем все начисто.

2. Подключаем Jquery с помощью этого плагина http://eorisis.com/software/joomla-extensions/jquery-system-plugin
Так Jquery всегда будет выше остальных скриптов.

3. Bootstrap3 и остальные скрипты подключаем вручную в шаблоне.
Выше <!DOCTYPE html> между тегами <?php ... ?> пишем такую строчку $doc->addScript('templates/' . $this->template . '/js/bootstrap.min.js');
перед этой строкой обязательно должна быть строка $doc = JFactory::getDocument(); обычно она уже есть в шаблоне, если у вас ее нет, то добавьте и ее. В некоторых шаблонах вместо $doc пишут $document, соответственно так же сделайте и у себя в обоих строках.

Конечно для профи мой совет покажется элементарным, но многим новичкам думаю поможет  Smiley
Записан
shurakana
Живу я здесь
******

Репутация: +48/-6
Offline Offline

Сообщений: 859



« Ответ #15 : 18.08.2014, 10:45:30 »

Правильно — чтобы сначала загружались все CSS, а потом javascript, в head.php есть две разных ветки-функции, одна подключает все javascript'ы другая CSS, вставь подгрузку jquery раньше всех в javascript ветку.
Записан
Sven
Осваиваюсь на форуме
***

Репутация: +6/-5
Offline Offline

Сообщений: 119


« Ответ #16 : 18.08.2014, 15:59:37 »

... вставь подгрузку jquery раньше всех в javascript ветку.

А как это сделать? Можно поподробнее?
Если я так же как автор этого топика подключаю Jquery в шаблоне, то у меня например Jquery подгружается после всех скриптов, которые подгружает компонент интернет-магазина JoomShopping. И в результате не работает Lightbox и все остальное.
Записан
shurakana
Живу я здесь
******

Репутация: +48/-6
Offline Offline

Сообщений: 859



« Ответ #17 : 18.08.2014, 16:27:08 »

1) Сначало во всех компонентах отключи подгрузку всяких скриптов и пр.
2) в файле сайт\libraries\joomla\document\html\renderer\head.php перед строчкой // Generate script file links
вставляешь нужную библиотеку:
Код:
$buffer .= $tab . '<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>' . $lnEnd;
3) Далее у меня почему то закомментированы строчки (не помню для чего):
Код:
// Generate script language declarations.
// Удаляет какуюто херь внизу head
# if (count(JText::script()))
# {
# $buffer .= $tab . '<script type="text/javascript">' . $lnEnd;
# $buffer .= $tab . $tab . '(function() {' . $lnEnd;
# $buffer .= $tab . $tab . $tab . 'var strings = ' . json_encode(JText::script()). ';' . $lnEnd;
# $buffer .= $tab . $tab . $tab . 'if (typeof Joomla == \'undefined\') {' . $lnEnd;
# $buffer .= $tab . $tab . $tab . $tab . 'Joomla = {};' . $lnEnd;
# $buffer .= $tab . $tab . $tab . $tab . 'Joomla.JText = strings;' . $lnEnd;
# $buffer .= $tab . $tab . $tab . '}' . $lnEnd;
# $buffer .= $tab . $tab . $tab . 'else {' . $lnEnd;
# $buffer .= $tab . $tab . $tab . $tab . 'Joomla.JText.load(strings);' . $lnEnd;
# $buffer .= $tab . $tab . $tab . '}' . $lnEnd;
# $buffer .= $tab . $tab . '})();' . $lnEnd;
# $buffer .= $tab . '</script>' . $lnEnd;
# }
4) jshopping сам по себе правильно все файлы группирует(удивительно).. с ним ничего делать не надо...
5) предпоследний JS в "три строки" создает конфликты, помню что то про тултипы - .addTooltip или что то в этом духе..
Как убирал не помню, bootstrap.php, там вроде..
Если шаблон Joomla какой то "расфуфыренный" то в настройках тоже по отключай все, но могут перестать работать расфуфырки...)))
Записан
Sven
Осваиваюсь на форуме
***

Репутация: +6/-5
Offline Offline

Сообщений: 119


« Ответ #18 : 18.08.2014, 18:11:27 »

Да, все работает, спасибо. Наверно Jquery лучше так и подключать без всяких плагинов.
А как там локальные js файлы подключать? Можно ли путь до них не жестко с адресом прописывать, а как-то универсально? Например если bootstrap.min.js лежит в папке js шаблона.
Записан
shurakana
Живу я здесь
******

Репутация: +48/-6
Offline Offline

Сообщений: 859



« Ответ #19 : 18.08.2014, 18:27:33 »

Подключай прям следом за jquery  $buffer .= $tab . '<script src="js/твойскрипт.js"></script>' . $lnEnd;
в корне сайта у меня папка js...

Можно ли путь до них не жестко с адресом прописывать, а как-то универсально?

Я напрямую прописываю..
« Последнее редактирование: 18.08.2014, 18:32:11 от shurakana » Записан
taurus
Осваиваюсь на форуме
***

Репутация: +4/-0
Offline Offline

Сообщений: 134


Bolden.Ru


« Ответ #20 : 27.02.2015, 16:40:26 »


2. Подключаем Jquery с помощью этого плагина http://eorisis.com/software/joomla-extensions/jquery-system-plugin
Так Jquery всегда будет выше остальных скриптов.


Спасибо за подсказку.
После перехода на Joomla 3.4 очерёдность загрузки jQuery стала непредсказуемой, поэтому на некоторых страницах переставали работать расширения на этом фреймворке. Плагин полностью решил проблему.
Записан
jitendra
Новичок
*

Репутация: +1/-0
Offline Offline

Сообщений: 1


« Ответ #21 : 02.04.2015, 20:15:36 »

Столкнулся с проблемой порядка загрузки скриптов в 3.4.1

Проблему решил следующим образом:

1. JHtml::_('jquery.framework');
2. $document->addScript(JURI::base().'components'.DS.'com_componentname'.DS.'assets'.DS.'js'.DS.'jquery.jqGrid.js');

Строчка №1 решила проблему, теперь jquery грузится первым
Записан
Fedor Vlasenko
Профи
********

Репутация: +696/-5
Offline Offline

Пол: Мужской
Сообщений: 3820


Все начинается с Value


« Ответ #22 : 02.04.2015, 22:03:02 »

Напишу решение данной задачи и прикреплю тему
Пишем в шаблоне нашего сайта
Код
$this->myScripts = isset($this->myScripts)? $this->myScripts: array();
$this->myScripts = isset($this->myStyles)? $this->myStyles: array();
foreach($this->myScripts as $scr) $this->addScript($scr);
foreach($this->myStyles as $style) $this->addStyleSheet($style);
 
Теперь если скрипт  или стиль не в том порядке выводится пишем в месте подключения
Код
$doc = JFactory::getDocument();
$doc->myScripts[] = 'myPath/myScripts.js';
$doc->myStyles[] = 'myPath/myStyles.css';
/*
$doc->myScripts[] = 'myPath/myScripts1.js';
$doc->myStyles[] = 'myPath/myStyles1.css';
*/

 

« Последнее редактирование: 25.04.2015, 19:55:45 от Fedor Vlasenko » Записан
saharin88
Давно я тут
****

Репутация: +15/-1
Offline Offline

Пол: Мужской
Сообщений: 248


joom.work


« Ответ #23 : 20.08.2015, 16:08:29 »

defined('JPATH_BASE') or die;

jimport('joomla.plugin.plugin');


class plgSystemJquery_top extends JPlugin
{

    protected $scripts = array();

    public function onBeforeCompileHead()
    {

        $document = JFactory::getDocument();
        $scripts = $document->_scripts;
        $new = array();

        $a_jquery = array('/media/jui/js/jquery-migrate.min.js', '/media/jui/js/jquery-noconflict.js', '/media/jui/js/jquery.min.js');

        foreach ($scripts as $k=>$v) {
            if(in_array($k, $a_jquery)) {
                $new[$k] = $scripts[$v];
                unset($scripts[$k]);
            }
        }

        if(count($new) > 0) {
            foreach ($new as $k=>$v) {
                $scripts[$k] = $v;
            }
        }

        $scripts = array_reverse($scripts);

        $document->_scripts = $scripts;


        return true;
    }

}
« Последнее редактирование: 20.08.2015, 23:00:39 от saharin88 » Записан
zomby6888
Живу я здесь
******

Репутация: +168/-3
Offline Offline

Пол: Мужской
Сообщений: 1538


« Ответ #24 : 20.08.2015, 16:14:50 »

Просто "правильно" надо подключать скрипты в модулях, и тогда не будет с ними проблем.
Записан
saharin88
Давно я тут
****

Репутация: +15/-1
Offline Offline

Пол: Мужской
Сообщений: 248


joom.work


« Ответ #25 : 20.08.2015, 16:54:16 »

Просто "правильно" надо подключать скрипты в модулях, и тогда не будет с ними проблем.

та ну, бывают люди ставят различные модули, в которых подключаются скрипты, и этот модуль нужен, что ж теперь лазать по всем модулям и смотреть где что подключено?

это по истине косяк в Joomla, больше никак не назовешь, потому хочется решения (в идеале расширения с возможностью перемещать подключаемые скрипты)
Записан
zomby6888
Живу я здесь
******

Репутация: +168/-3
Offline Offline

Пол: Мужской
Сообщений: 1538


« Ответ #26 : 20.08.2015, 17:09:27 »

Если модуль написан криво то причем тут система? Если бы скрипты в модуле подключались посредством добавления в head через массив scripts, то проблем бы не было, всегда их можно было бы поменять местами в плагине. Если разработчик модуля прописывает скрипты в body, почему разработчики Joomla должны за это отвечать? Меньше ставьте всякие модули кривые, вместо того чтобы жаловаться на бесплатный продукт.

Единственную проблему я вижу в том что проблематично отключить встроенные в систему скрипты, давно пора выпилить mootools из системы. Но по крайней мере есть функционал плагинов, который все же позволяет это сделать. Во многих фреймворках есть возможность указать куда подключать скрипты в body, в head, на domready. Вот этот механизм неплохо было бы тоже реализовать.
« Последнее редактирование: 20.08.2015, 17:19:21 от zomby6888 » Записан
saharin88
Давно я тут
****

Репутация: +15/-1
Offline Offline

Пол: Мужской
Сообщений: 248


joom.work


« Ответ #27 : 20.08.2015, 17:23:07 »

Если модуль написан криво то причем тут система? Если бы скрипты в модуле подключались посредством добавления в head через массив scripts, то проблем бы не было, всегда их можно было бы поменять местами в плагине. Если разработчик модуля прописывает скрипты в body, почему разработчики Joomla должны за это отвечать? Меньше ставьте всякие модули кривые, вместо того чтобы жаловаться на бесплатный продукт.

Единственную проблему я вижу в том что проблематично отключить встроенные в систему скрипты, давно пора выпилить mootools из системы. Но по крайней мере есть функционал плагинов, который все же позволяет это сделать. Во многих фреймворках есть возможность указать куда подключать скрипты в body, в head, на domready. Вот этот механизм неплохо было бы тоже реализовать.

в теме речь идет о подключении скриптов через
Код:
JFactory::getDocument()->addScript('myscrip.js');
JHtml::script('myscrip.js');


Если бы скрипты в модуле подключались посредством добавления в head через массив scripts, то проблем бы не было


вот при таком раскладе, бутстрап подключится первым (это кусок кода из модуля):


Код:
JHtml::_('bootstrap.framework');

$document = JFactory::getDocument();

$scripts = $document->_scripts;
$new = array();

$a_jquery = array('/media/jui/js/bootstrap.min.js', '/media/jui/js/jquery-migrate.min.js', '/media/jui/js/jquery-noconflict.js', '/media/jui/js/jquery.min.js');

foreach ($scripts as $k=>$v) {
    if(isset($a_jquery[$k])) {
        $new[$k] = $scripts[$v];
        unset($scripts[$k]);
    }
}

if(count($new) > 0) {
    foreach ($new as $k=>$v) {
        $scripts[$k] = $v;
    }
}

$scripts = array_reverse($scripts);

$document->_scripts = $scripts;
« Последнее редактирование: 20.08.2015, 22:24:38 от ELLE » Записан
zomby6888
Живу я здесь
******

Репутация: +168/-3
Offline Offline

Пол: Мужской
Сообщений: 1538


« Ответ #28 : 20.08.2015, 17:38:03 »

Это кусок из модуля или из плагина? До этого вы тоже самое приводили в плагине. Вы не можете толком объяснить даже чего хотите..Я вам говорю еще раз,  если в модулях скрипт подключен через addScript то в плагине его порядок  можно будет менять как угодно на событии onBeforeCompileHead.
Записан
saharin88
Давно я тут
****

Репутация: +15/-1
Offline Offline

Пол: Мужской
Сообщений: 248


joom.work


« Ответ #29 : 20.08.2015, 19:56:40 »

Плагин с настройками http://joomlaforum.ru/index.php/topic,317298.msg1579355.html#msg1579355
Записан
Страниц: [1] 2  Все   Вверх
  Добавить закладку  |  Печать  
 
Перейти в:  

Powered by SMF 1.1.21 | SMF © 2006, Simple Machines

Joomlaforum.ru is not affiliated with or endorsed by the Joomla! Project or Open Source Matters.
The Joomla! name and logo is used under a limited license granted by Open Source Matters
the trademark holder in the United States and other countries.

LiveInternet