書籍、携帯電話、コンプなど、これらすべてのカテゴリに異なるページを作成しました。次に、このタイプのナビゲーションメニュー(図を参照)をすべてのページに配置し、ページを開くと、対応するメニューリンクが強調表示されます。
テキストとリンクを含むスキーマを作成し、それを複数値にする必要がありますか?それでは、コンポーネントを作成して、最終的にすべてのページにレンダリングしますか?
そうでない場合は、他のより良いアプローチを提案してください。
書籍、携帯電話、コンプなど、これらすべてのカテゴリに異なるページを作成しました。次に、このタイプのナビゲーションメニュー(図を参照)をすべてのページに配置し、ページを開くと、対応するメニューリンクが強調表示されます。
テキストとリンクを含むスキーマを作成し、それを複数値にする必要がありますか?それでは、コンポーネントを作成して、最終的にすべてのページにレンダリングしますか?
そうでない場合は、他のより良いアプローチを提案してください。
Tridionでナビゲーションを生成する最も一般的な方法は、構造グループとページに基づいてC#テンプレートでナビゲーションを生成することです。
たとえば、ブレッドクラムトレイルは、次のような方法で、テンプレート(C#フラグメントまたは実装するクラスITemplate
)内から簡単に生成できます。
var pageDocument = package.GetByType(ContentType.Page).GetAsXmlDocument();
var current = new Page(pageDocument.DocumentElement, engine.GetSession());
var breadcrumb = page.Title;
while (current.OrganizationalItem != null)
{
current = current.OrganizationalItem;
breadcrumb = current.Title + " > " + breadcrumb;
}
package.PushItem("breadcrumb",
package.CreateStringItem(ContentType.Text, breadcrumb));
上記のフラグメントは、実際には構造グループの階層を上にナビゲートする方法のみを示しています。PublishUrl
おそらくすべてのプロパティを調べることによって、すべての構造グループをリンクとして作成する必要がありますStructureGroup
。
あなたがパンくずリストについて尋ねていなかったことを私は知っています、あなたはより左のナビゲーションのように見えます。ただし、すべてのナビゲーション要素のアプローチは似ています。ITemplateのTOM.NETを使用して、関連するページと構造グループをトラバースし、そこからナビゲーションHTMLを生成します。
現在のStructureGroup内のすべてのページのリストを取得する(そして現在のページをマークする)には、次のようなものが必要です。
var pageDocument = package.GetByType(ContentType.Page).GetAsXmlDocument();
var current = new Page(pageDocument.DocumentElement, engine.GetSession());
var sg = (StructureGroup) page.OrganizationalItem;
string result = "<ul>";
foreach (var page in sg.GetItems())
{
result += (page.Id != current.Id) ? "<li>" : "<li class='selected'>";
result += page.Title;
result += "</li>";
}
result += "</ul>";
package.PushItem("siblings", package.CreateHtmlItem(result));
ニックがサイトマップ全体を生成するこのすばらしい例も参照してください。これは、最終的に必要になるものに近いものですが、もちろん、はるかに多くのコードです(ここで再現するには多すぎます)。アルバートはまた、このアプローチに関する彼の経験の一部を共有し、代替案について言及しています。
ページタイプとしてASPXを使用する場合、ナビゲーションの他のロジックを以下に説明します。
重要なページ情報(ID、パス、タイトルなど)を含む1つのナビゲーションxml(すべてのページを含む)を作成します
ブレッドクラムまたはその他のナビゲーションを生成するascxコントロールを作成します。パラメータコントロールは現在のページIDを取得する必要があるため
このようにして、レンダリング(公開)時間を短縮し、ページの読み込み時にナビゲーションがレンダリングされます。残念ながら、この方法ではページの読み込み時間が長くなります。それはあなたのニーズに応じてあなたにとってより適切な解決策です。ナビゲーションXMLの更新は、このアプローチの問題の1つです。