jhtml :: script order-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 :: script 앞에. 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');

두 경우 모두 jQuery 다음에 JS 파일을 삽입하여 "자산"폴더와 내부에 "css"및 "js"폴더를 생성해야합니다.

두 번째 솔루션은 joomla 3.XX API에 더 적합합니다.

도움이 되길 바랍니다.


내가 여기에서 한 유일한 변경은 assets폴더 를 추가하는 것이 었습니다. 이것은 달라지지 않았으며 jQuery보다 스크립트가 여전히로드됩니다. 나는 또한 템플릿 파일에 이러한 종류의 코드를 넣어의 지혜에 대해 궁금합니다 (같은 스크립트를 사용하여 여러 템플릿이 경우 특히, DRY 등 등)
— codinghands

흠, 귀하의 의견은 이상합니다-> "이런 종류의 코드를 템플릿 파일에 넣는 중". 나는 당신이 개발하고 isotope.js 및 기타 JS 스크립트를 기반으로 한 모듈에 대해 이야기하는 것이 충분하지 않을 수도 있습니다. 내가 틀렸다면 정말 죄송합니다. mod_tiles라는 타사 모듈을 실제로 사용하고 있습니다. BTW에는 템플릿에 JS 스크립트를 삽입하는 다른 방법이 있습니다.
— ghazal

죄송합니다. 너무 혹독한 하하라는 말은 아니 었습니다! 너무 일찍 일어 났어 야했는데 ... 당신은 정확히 맞습니다. 그것이 제가하고있는 일입니다-그것은 내 모듈입니다. 템플릿 파일의 의미 는 모듈 default.php의 tmpl(템플릿) 폴더에있었습니다. 스크립트가 (보기) mod_tiles.php가 아닌 default.php( '제어기')에 로드되어야한다고 생각했습니다 .
— codinghands

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. jQuery 전에로드 된 mod_tiles.php와 default.php에 스크립트를 추가하려고했습니다.
— 코딩 핸드 :

0

아마도 개발자가 mod_tiles스크립트를 가져 오기 위해 사용한 방법 때문일 수 있습니다. 나는이 상황에서 Joomla 코딩 표준을 고수하지 않았다고 가정합니다.

hwre에는 두 가지 옵션이 있습니다.

  1. 모듈 내 tmpl 폴더 내의 파일에서 스크립트를 가져 오는 경우 템플릿 재정의를 수행 하고을 사용하여 스크립트를 가져 오는 방법을 변경할 수 있습니다 JHtml.
  2. jQuery 를 가져 와서 다른 모든 스크립트 위에 배치하는 플러그인 인 jQuery Easy 를 다운로드하여 설치할 수 있습니다 .

도움이 되었기를 바랍니다


모듈을 개발했습니다. 어떤 방법을 사용해야합니까? 나는 이것을 질문 ( joomla.stackexchange.com/questions/325/… )으로 물었고 JHtml :: script가 앞으로 나아 갔다고 들었습니다.
— codinghands

0

사실 후에 2 비트를 추가하고 싶었습니다. 구성 요소에있는 모든 뷰에 대해로드해야하는 몇 가지 스크립트 및 스타일 시트가 있으며, 올바른 순서로로드되도록 단일 포인트를 원했습니다.

파일에서 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

나는 이것이 오래된 주제라는 것을 알고 있지만 당신은 이것의 맨 아래에 도달 했습니까? 방금 같은 문제가 발생했습니다. 원인을 확인했지만 문제 / 해결책은 아닙니다. 나는 그것이 BUG라는 음흉한 의심을 가지고 있지만 그것을 시도하는 다른 사람과 할 수 있습니다.

시나리오 : jQuery 종속 스크립트를 포함하는 모듈을 작성하여 default.php보기에서 다음을 사용하십시오.

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

그런 다음 모듈을 설치하고 모듈 위치를 지정하고 '왼쪽'이라고 말합니다. 프론트 엔드 소스 코드를 보면 모든 것이 좋아 보인다. 모든 스크립트는 포함 된 스크립트 다음에로드된다

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

그러나 모듈에 '아코디언'위치를 지정하고 줌라로드 위치 기능을 사용하여 모듈을 기사에 추가하는 경우

{loadposition accordion}

bootstrap.framework 파일 전에 accordion.js가 추가됩니다.

내가 그것을 작동시킬 수있는 유일한 방법은 스크립트를 헤드에 포함시키지 않고 인라인 스크립트로 추가하는 것입니다.

편집 : CSS를 포함하여 동일합니다. 템플릿 및 부트 스트랩 CSS 파일 전에 CSS 선언 목록 맨 위에 추가됩니다. 이에 대한보고는 CSS 선언에! important를 추가하는 것입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.