ダウンロード ソースコード (310.6 KB)
全ページで利用するカスタムベースクラス:TheseusPage
Theseusフレームワークの基本となるクラスはTheseusClassです。このクラスはLoadSectionMenuやLoadSideMenuなどのメソッドを定義しており、TopMenus.ascxユーザーコントロールとSideMenu.ascxユーザーコントロールでそれぞれのナビゲーションユーザーインターフェース要素にデータをロードするために使われます。このクラスはWebサイトのすべてのページで使われるので、TheseusPageというカスタムベースページクラスを用意し、TheseusというプロパティでTheseusClassクラスのインスタンスを返すようにしました。従って、Theseusフレームワークを利用するASP.NET Webページはすべて、このカスタムベースクラスから継承して作成する必要があります。
マークアップとコードが同一ファイルにあるASP.NETページを作成する場合、Web.configファイルで<pages>セクションのpageBaseType属性を使って、TheseusPageをすべてのページのベースクラスにできます。
<pages pageBaseType="Wingspan.Web.Core.TheseusPage">
ASP.NETページのマークアップとコードを2つのファイルに分ける場合は、それぞれの分離コードファイルで、各ページの継承元ベースクラスをSystem.Web.UI.PageからWingspan.Web.Core.TheseusPage(または自分で定義したカスタムベースクラス)に変更する必要があります。
public partial class MyPage : Wingspan.Web.Core.TheseusPage
{
...
}
カスタムベースページクラスの使い方と利点の詳細については、「Using a Custom Base Class for your ASP.NET Pages' Code-Behind Classes」を参照ください。
Theseusのエンジン:TheseusClass
Theseusフレームワークの基本となるクラスTheseusClassは、次の2つの重要なタスクを行います。
- 表示するページに応じて、サイトタブ、セクションメニュー、およびサイドメニューにサイトマップのどの項目を表示するかを判別します。
- 現在位置情報を把握して、ナビゲーションUIのどの項目を強調表示するかを判別します。
これらのタスクは、ASP.NETのSiteMapクラスを利用して実現できます。SiteMapクラスはASP.NETフレームワークのクラスで、「サイトのナビゲーション構造のインメモリ表現であり、1つ以上のサイトマッププロバイダにより提供されます」。
SiteMapクラスで最も重要なプロパティはCurrentNodeです。このプロパティは、サイトマップ構造内の、現在要求されているページに対応するSiteMapNodeオブジェクトを表します。
SiteMapNode cn = SiteMap.CurrentNode;
要求されたページがWeb.sitemap内のノードで表現されていない場合には、CurrentNodeはnullを返します。この場合にはTheseusは「非アクティブ」状態になり、いずれのタブも強調表示されていないサイトメニューだけが表示されます。
SiteMapクラスのもう1つの重要なプロパティはRootNodeです。このプロパティは、サイトマップの階層構造のルートを表すSiteMapNodeを返します。CurrentNodeプロパティとRootNodeプロパティを使うと、現在位置情報を特定できます。当然のことながら、現在位置情報は、現在のノードとルートノードの間のパスとなります。
SiteMapExtensionsクラス
Theseusでは、現在位置情報をSiteMapNodeオブジェクトのListとして計算する必要があります。MicrosoftがSiteMap.CurrentBranchのようなプロパティを用意してくれていたらよかったのですが、これはありません。幸い、このListは数行のコードで計算できます。現在位置情報のListの計算以外にも、Theseusで実行する必要があって、SiteMapクラスに実装されていないタスクがあるので、それに対応するメソッドやプロパティをSiteMapExtensionsというクラスにまとめました。このクラスはTheseusClassクラスから参照され、そこではSiteMapExtensionsタイプのメンバ変数SiteMapExtenderが定義されています。
namespace Wingspan.Web.Core
{
public class TheseusClass
{
SiteMapExtensions SiteMapExtender;
public TheseusClass()
{
SiteMapExtender = new SiteMapExtensions();
}
...
}
}
SiteMapExtensionsクラスのコードは単純で、コメントによる説明も挿入してあります。このクラスでは、現在位置情報を表すSiteMapNodeのListを返すCurrentBranchプロパティ、サイトマップ階層における現在のノードのレベルを返すCurrentNodeLevelプロパティ、およびいくつかのメソッドを定義しています。
この記事は参考になりましたか?
- japan.internet.com翻訳記事連載記事一覧
- この記事の著者
-
japan.internet.com(ジャパンインターネットコム)
japan.internet.com は、1999年9月にオープンした、日本初のネットビジネス専門ニュースサイト。月間2億以上のページビューを誇る米国 Jupitermedia Corporation (Nasdaq: JUPM) のニュースサイト internet.com や EarthWeb.com からの最新記事を日本語に翻訳して掲載するとともに、日本独自のネットビジネス関連記事やレポートを配信。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
-
この記事は参考になりましたか?
この記事をシェア
