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.phptmpl(템플릿) 폴더에있었습니다. 스크립트가 (보기) 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.