Jhtml :: script順序-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の前。これは、jQueryが最初にロードされることを確認しています。


これは私にとって有効な唯一のソリューションでした- mod_tiles.phpこの強制jQueryに最初にロードされました。ありがとうございました!
codinghands


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');

どちらの場合も、「asset」フォルダー、および「css」と「js」フォルダーを内部に作成した場合、JSファイルはjQueryの後に挿入する必要があります。

2番目のソリューションは、joomla 3.XX APIに準拠しています。

それが役に立てば幸い。


ここで行った唯一の変更はassetsフォルダーを追加することでした-これは違いはなく、スクリプトはjQueryが実行する前にロードされます。私はまた、(DRYなどなど、同じスクリプトを使用して複数のテンプレートがある場合は特に)、テンプレートファイルにこの種のコードを置くことに知恵についての疑問
codinghands

ヘム、あなたのコメントは奇妙です->「この種のコードをテンプレートファイルに置く」。私は、あなたが開発し、isotope.jsや他のJSスクリプトに基づいて開発したモジュールについて話していましたが、十分に明確ではなかったかもしれません。私が間違っていて、実際にmod_tilesと呼ばれるサードパーティのモジュールを使用している場合は、非常に残念です。ところで、JSスクリプトをテンプレートに挿入する方法は他にもあります。
ghazal 2014年

申し訳ありません、私はそれほど厳しい音を鳴らすつもりはありませんでした!早すぎる必要があります...あなたは正解です。それが私がやっていることです-それは私のモジュールです。私はテンプレートファイルによって意味することだったdefault.phptmplモジュールの(テンプレート)フォルダ。スクリプトは(ビュー)mod_tiles.phpではなくdefault.php(「コントローラー」)にロードする必要があると思います。
コーディングハンド2014年

これをtmpl / default.phpに配置すると、オーバーライドが許可されます。mod_tiles.phpでは、オーバーライドできません。
sovainfo 2014

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の前にロードされます。
codinghands

0

これはおそらく、開発者がmod_tilesスクリプトのインポートに使用した方法が原因です。この状況では、彼らはJoomlaコーディング標準に固執していないと思います。

あなたには2つのオプションがあります(私が考えることができます)hwre:

  1. スクリプトがモジュール内のtmplフォルダー内のファイルからインポートされている場合、を使用して、テンプレートのオーバーライドを実行し、スクリプトのインポート方法を変更できますJHtml
  2. jQuery Easyをダウンロードしてインストールできます。これは、jQueryをインポートして他のすべてのスクリプトの上に配置するプラグインです。

お役に立てれば


モジュールを開発しました-どの方法を使用すればよいですか?私はこれを質問(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

私はこれが古いトピックであることを知っていますが、あなたはこれの底に到達したことがありますか?同じ問題が発生しました。原因を特定しましたが、問題/解決策は特定していません。私はそれがバグであるという卑劣な疑いを持っていますが、誰か他の人がそれを試してみる可能性があります。

シナリオ:jQuery依存スクリプトを含むモジュールを作成したので、default.phpビューで以下を使用します。

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

次に、モジュールをインストールしてモジュールの位置を指定します。「左」と言います。フロントエンドのソースコードを確認すると、すべてが適切に表示され、すべてのスクリプトは、

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

ただし、モジュールに「アコーディオン」の位置を指定し、joomla loadposition機能を使用してモジュールを記事に追加する場合

{loadposition accordion}

その後、accordion.jsがbootstrap.frameworkファイルの前に追加されます。

私がそれを機能させることができた唯一の方法は、スクリプトをヘッドに含めるのではなく、インラインスクリプトとして追加することです。

編集:CSSを含める場合も同様です。css宣言のリストの一番上に追加されます(テンプレートとブートストラップcssファイルの前)。これを回避するには、css宣言に!importantを追加します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.