6

Orchard でテーマを作成しようとしていて、レイアウトにいくつかのスクリプト インクルードを追加しました。

Script.Include("//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js").AtHead();
using (Script.Head()) {
    @:<script>window.jQuery || document.write('<script src="scripts/jquery-1.7.1.min.js"><\/script>')</script>
}

Script.Include("plugins.js").AtHead();
Script.Include("script.js").AtHead();

Google CDN から jQuery をロードしたいのですが、CDN バージョンをロードできない場合はローカル フォールバックが必要です。これを実現するために、jQuery スクリプトの直後にスクリプト ブロックを追加しました。ただし、生成されたページ ソースを見ると、次のようになります。

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"  
type="text/javascript"></script>
<script src="/OrchardLocal/Themes/Test/scripts/plugins.js" type="text/javascript">
</script>
<script src="/OrchardLocal/Themes/Test/scripts/script.js" type="text/javascript">  
</script>
<!--[if lt IE 9]>
<script src="/OrchardLocal/Core/Shapes/scripts/html5.js" type="text/javascript">    
</script>
<![endif]-->
<script>window.jQuery || document.write('<script src="js/libs/jquery-1.7.1.min.js"><\/script>')
</script>

問題は、フォールバックが他のすべてのスクリプトの後にあるのに対し、jQuery CDN スクリプト インクルードの直後にしたいことです。

Orchard がインライン スクリプト ブロックをレンダリングする場所を制御する方法はありますか?

4

1 に答える 1

2

Script.Include()現在、またはと混合しているときにスクリプトの順序を制御する方法はないようScript.Head()ですScript.Foot()

ただし、OrchardでCDNを使用する方法があります。しかし、残念ながら、正常に機能しません。Script.Require("jquery").AtHead().UseCdn()ここで実行しようとしていることを処理するように指定できるはずです。これらのメソッドはすでに存在しますが、次の2つの理由で機能していません。

  1. jQueryモジュールは現在CDNURLを指定していません
  2. スクリプトタグを生成するためにメソッドに依存するメソッドは、正常にUseCdn()機能しません

この問題については、すでに報告さOrchard Codeplexれている問題があります。オーチャードチームはステータスを変更したActiveので、うまくいけば、バグはすぐに解決されます。私はこの問題に投票したので、他のいくつかのバグよりも早くこのバグを解決するようにオーチャードチームに合図することができますか。

それまでの間、私と同じことを行うことができます-Document.cshtmlテーマにテンプレートを追加し(からコピーできます/Core/Shapes/Views/Document.cshtml)、次の行を見つけます:(@Display(Model.Head)これはすべてのヘッドスクリプトとスタイルが配置される場所です)そして最後に、その行に次のコードを追加できます。

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script>!window.jQuery && document.write('<script src="@Url.Content("~/Themes/[NAME-OF-YOUR-THEME]/Scripts/jquery-1.7.1.min.js")"><\/script>')</script>

そして[NAME-OF-YOUR-THEME]、テーマのフォルダ名で変更します。

于 2012-11-29T02:49:43.870 に答える