JHtml:script()と$ doc-> addScriptの違いは何ですか?


10

最近、特定のJSおよびCSSファイルを<head>各ページのに挿入する必要があるモジュールを開発しました。最初は、私は使用しました:

$doc =& JFactory::getDocument();
$doc->addScript(JURI::base(true).'/modules/mod_x/js/mod_x.js');

ただし、キャッシュを有効にすると、サイトがからキャッシュされたバージョン/cacheとキャッシュされていないバージョンの両方をロードし/modules/mod_x/js/、JSエラーが発生することに気付きました。

これを次のように変更した場合:

JHtml::script(Juri::base().'modules/mod_x/js/mod_x.js');

スクリプトは、これらのエラーを解決するために、キャッシュから1回だけロードされました。

はドキュメントaddScriptメソッドがメソッドよりも「低レベル」であったことを読みましたJHtml:scriptが、それを言うだけではありません...

もちろん、上記の[JHtml:scriptメソッド]を使用して自動的に実行されるいくつかの手順(JHtml:scriptが実行する)も手動でコーディングする必要があります([addScriptを使用する場合])。

...これ以上の詳細はありません。

違いは何ですか?JHtml:script最終的にはaddScriptある時点でドキュメントオブジェクトが呼び出されると思いますが、最初に他の中間手順が行われますか?


4
joomlaのドキュメントを少し書き直して、更新してみました。今より意味があるかどうか確認してください。
ジョージウィルソン

1
@GeorgeWilson Joomlaのドキュメントは最近本当に改善されています。ありがとう:)
TryHarder 14

スタイルシートに関する関連質問:joomla.stackexchange.com/q/10062/5239
Flimm

回答:


8

JHtml::script追加のロジックが含まれています。APIリファレンスについては、http://api.joomla.org/cms-3/classes/JHtml.html#method_scriptを参照してください

デフォルトでは、デバッグ設定と使用されているブラウザを検出し、一致するスクリプトをロードします。たとえば、デバッグが有効になっている場合、ファイルの非圧縮バージョンが存在する場合はロードされます。

テンプレートレベルなどでファイルを上書きできるオプションの設定があります。

Michael Babkerは、JHtml::script()オーバーライドを許可するための使用方法に関する優れたガイドを作成しました。http: //www.babdev.com/blog/139-use-the-media-folder-allow-overridable-media

参照用のレポの関数:https : //github.com/joomla/joomla-cms/blob/staging/libraries/cms/html/html.php#L659

現在Georgeによって更新されている公式のドキュメントページ:http : //docs.joomla.org/J3.3 : Adding_JavaScript_and_CSS_to_the_page


2
答えてくれてありがとう。APIリファレンスはかなり簡潔です-detect_browserとdetect_debugの効果のより包括的な説明はありますか。「オプションの設定」や「その他のこと」と言ったとき、これらはどこかに文書化されていますか?
コーディングハンド2014

オーバーライド部分を説明するMichaelの記事へのリンクを追加しました。デバッグとブラウザの部分については、ドキュメントがないと思います。そのためのコードを読む必要があります。
バクアル2014

1
たとえば、非圧縮および圧縮されたjsファイルがあり、デバッグがオンの場合、デバッグがオフの場合、filename-uncompressed.jsとfilename.jsのみがロードされます。ブラウザとき、それはファイル名browser.jsを探し、次にファイル名-ブラウザbrowserversion.jsなどオフデバッグ
ジョージ・ウィルソン

2
これは割れる答えです-@Bakualと@GeorgeWilsonに感謝します!
コーディングハンド2014

1
JHtmlはスクリプトまたはスタイルシートのMD5sumをキャッシュバストに追加できることも忘れないでください。
Flimm

4

2つの言葉で:

  • JHtml::script() -特定のスクリプト(すでにJDocumentにアタッチされているものを除く)をオーバーライドできるようにします。いくつかの要因に依存します(@Bakualの回答を参照)。
  • $doc->addScript() -上書きを確認せずに、スクリプトをドキュメントに直接添付します。

あなたが拡張機能の開発者であるJHtml::script()場合は、スクリプトを追加するときに強く使用することをお勧めします。これにより、ユーザーは必要に応じて、特定のスクリプトを上書きできます。
cssにも同様の方法があります。

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