開発者向けのオーチャードCMS-パート2

画像

オープンソースCMSオーチャードの開発に関する記事の続きでは、ページへのコンテンツの出力、モジュールの更新、ウィジェットの概念について検討します。 そして、ピン留めされたInternet Explorer 9サイトのクイックジャンプポイントのリストをオーチャードサイトに追加できるモジュールを終了します。

開始する



したがって、Orchard CMSのIE9Pinsモジュールの作業を継続します。 前回、私たちは管理部分で終わりました-IE9クイックジャンプリストからアイテムを作成、編集、削除する機能を追加しました。 実際、ジャンプリストアイテムデータを格納するための単一の部分を含むコンテンツタイプにCRUDを実装しました。

ジャンプリスト-アプローチ



ここで、管理部分からサイト自体にデータを追加し、IE9の機能する遷移リストに変換します。 ご存知のように、MSDNの記事またはKonstantin Kichinskyのブログからクイックジャンプリストを登録する(そして固定サイトの動作を一般的に制御する)ことを既に知っています。メタタグまたはJavaScriptを介した2つのアプローチがあります。 概して、両方のオプションには1つのことが必要です。サイトページをレンダリングするときは、ページのヘッドにメタタグを追加するか、スクリプトを実行して読み込みを完了します。

ウィジェット



どちらのアプローチを選択する場合でも、最初にすべきことは、Orchardがサイトの機能を拡張するために提供するツールを見つけることです。 投げたり検索したりすることをスキップし、すぐに答えを提供します-これらはウィジェットです。 概して、これは、ウィジェットとして任意のページに追加できることを作成時にのみマークされる別のタイプのコンテンツです。 また、これがコンテンツのタイプである場合、HTMLでのレンダリングを決定する独自のドライバーがあります。したがって、JavaScriptを生成したりメタタグ値を設定したりするためのコードを追加できます。 それだけでなく、ウィジェットはすべてのページに一度に追加できるだけでなく、個別に追加することもできます。つまり、サイト内のすべてのページの動作を制御することができます。

それでは、プロジェクトにウィジェットを追加します。 頭に浮かぶ最初の解決策は、ウィジェットがコンテンツタイプの場合、既存のJumpListItemを使用するだけではどうですか? 幸いなことに、彼のドライバーでは、Displayメソッドを処理しませんでした。 問題は、ページに追加すると、ウィジェットが独自のフィールドと編集可能なパーツのセットを表示することです。 新しいJumpList要素のフィールドが表示され、さらにウィジェットを追加する段階で[保存]をクリックすると、作成されたコンテンツが一般リストに追加されます。 もちろん、そのような種類のものは必要ありません-それだけでなく、ウィジェットと設定には、標準のものを除き、どのページとどのブロックに表示するかがありません。 つまり プロパティやパーツなしでコンテンツタイプを使用し、データベース内のデータにも添付しません(つまり、レコードは不要です)。 それから、書かれたDisplayメソッドと、必要なコンテンツをレンダリングする別のビューを持つ、作成されたドライバーのみが必要になります。

コンテンツ部



ウィジェットには、JumpListPart(JumpListItemPartと混同しないでください)という単純なコンテンツが必要です。 コードは非常に簡単です:

public class JumpListPart : ContentPart<br> {<br> }<br> <br> * This source code was highlighted with Source Code Highlighter .





この部分のドライバーで、Displayメソッドを定義します。

public class JumpListPartDriver : ContentPartDriver<Models.JumpListPart><br> {<br> IContentManager contentManager;<br> IJumpListService jumpListService;<br> public JumpListPartDriver(IContentManager contentManager, IJumpListService jumpListService)<br> {<br> this .contentManager = contentManager;<br> this .jumpListService = jumpListService;<br> }<br> <br> <br> protected override DriverResult Display(Models.JumpListPart part, string displayType, dynamic shapeHelper)<br> {<br> return ContentShape( "Parts_JumpList" , () => shapeHelper.Parts_JumpList(<br> AllItems: jumpListService.Get()));<br> }<br> }<br> <br> * This source code was highlighted with Source Code Highlighter .





そして最後に、すべてが開始されたものを追加します。Viewは、固定サイトのジャンプリストにアイテムを追加します。 まず、ページヘッドのメタタグを使用してViewでできることを見てみましょう。SetMetaメソッドは非常に適しています。 しかし、残念なことに、詳細な調査を行った結果、機能しないことが明らかになりました。 すべてのメニュー項目には同じキーがありますが、値は異なります。SetMetaを複数回呼び出した場合、最後の項目には1つの値しか取得できません-適合しません。 問題ではありません。簡単なJavaScriptコードを作成します(実行もしませんが、 記事からkichik取得ます 。これはまさに必要なものです)。 ここでのみ、サーバー側でソース配列を生成し、プレゼンテーション用にモデルに渡します。必要なものを正確に取得します。 配列の生成は次のとおりです。

string items = string .Empty;<br> var itemsArray = (jumpListService.Get() as IEnumerable <JumpListItemPart>).ToArray();<br>items = "[" + string .Join( "," , itemsArray.Select(i => "{name: '" + i.Name + "',url: '" + i.Url + "', iconUrl: '" + i.IconUrl + "'}" )) + "]" ; <br> <br> * This source code was highlighted with Source Code Highlighter .



そして実際、ビューでこの配列のリスト要素を作成します:

<script type= "text/javascript" ><br> var items = @( new MvcHtmlString(Model.JsArray))<br> var isPinnedSiteMode = window.external && "msIsSiteMode" in window.external<br> && window.external.msIsSiteMode(); <br> if (isPinnedSiteMode) {<br> window.external.msSiteModeCreateJumplist( 'Tasks' );<br> window.external.msSiteModeClearJumplist();<br> for (i = items.length - 1; i >= 0; i--) {<br> window.external.msSiteModeAddJumpListItem(items[i].name,<br> items[i].url, items[i].iconUrl);<br> }<br> window.external.msSiteModeShowJumplist();<br> }<br></script> <br><br> * This source code was highlighted with Source Code Highlighter .







移行



これで、ウィジェットの基礎が作成されました。新しいタイプのコンテンツの作成を開始します。 通常どおり、Migration.csで発生します。 ただし、今回は、Createメソッドにコードを追加しても意味がありません;モジュールが最初にアクティブ化されたときにのみ機能します。 そして、実際に移行がどのように機能し、適用されるかを見ていきます。 したがって、ご覧のとおり、Createメソッドはint値1を返します-これはバージョン番号です。 なぜなら モジュールがインストールされたばかりなので、現在のバージョンは1になります。非常に簡単なコードを追加します。

public int UpdateFrom1()<br> {<br> ContentDefinitionManager.AlterTypeDefinition( "InternetExplorerPins" , cfg => cfg<br> .WithPart( "JumpListPart" )<br> .WithPart( "WidgetPart" )<br> .WithPart( "CommonPart" )<br> .WithSetting( "Stereotype" , "Widget" ));<br> <br> return 2;<br> }<br> <br> * This source code was highlighted with Source Code Highlighter .



UpdateFrom1-これは、バージョン1から更新するための指示です。戻り値2-移行後に設定する必要があるバージョン値。 コンテンツタイプ自体の説明は単純です-コンテンツの一部を追加しますJumpListPart、WidgetPart-これはウィジェットにページおよびブロック内での位置を構成する機能を追加し、重要なポイントは設定WithSetting(「ステレオタイプ」、「ウィジェット」)です-このコンテンツタイプはリストに表示されます利用可能なウィジェット。

モジュールの更新

すべて準備完了-すべてを成功裏に構築します。 次に、サイト管理パネルを開きます。Orchardは、IE9Pinsモジュールの更新が利用可能になったことを通知します。





モジュールに移動します。



もちろん、[更新]を選択します。数秒待ってから、すべてが正常に更新されたことを示すメッセージが表示されます。



ウィジェットの配置



ただし、ウィジェットはシステムに登録されているだけですが、まだページに追加されていません。 管理パネルで、ウィジェット項目に移動し、新しいものを追加します-ここにあるのがInternetExplorerPinsです。



[ゾーンに追加]を選択します。



ゾーンとして、フッターとレイヤー(レイヤー)-デフォルトを指定します。 このタイプの配置は、ページの最後-フッター-に各ページに追加されます。 デフォルトレイヤーが選択されています。 HomePageレイヤーを選択できます-たとえば、ホームページにのみ配置します。

そして、最もエキサイティングな瞬間は、確認のためにリストにいくつかのアイテムを追加し、サイトのメインページを開くことです。 それをタスクバーにドラッグします...そして最後に作業の結果を確認します。







参照資料



1)記事の最初の部分 (多くの便利なリンクがあります)

2) BitBucketソースコード



All Articles