2012-05-26 15 views
6

私はこれらのすべてのカテゴリ(書籍、携帯電話、コンプなど)ごとに異なるページを作成しました。このタイプのナビゲーションメニュー(図に示すように)をすべてのページに入れて、ページを開くと対応するメニューリンクを強調する必要があります。SDL Tridionのさまざまなページのナビゲーションメニューを作成するにはどうすればよいですか?

テキストとリンクを含むスキーマを作成し、それを複数値にする必要がありますか?それでは、コンポーネントを作成して、最後にすべてのページにレンダリングしますか?

もしそうでない場合は、そうするための他の方法をお勧めします。

enter image description here

答えて

5

は、以下のナビゲーションのために他のロジックを記述します

  1. 1つのナビゲーションXMLを作成します(... ID、パス、タイトル)重要なページ情報を持つ(すべてのページが含まれています)

  2. ブレッドクラムまたはその他のナビゲーションを生成するascxコントロールを作成します。パラメータ制御は、あなたが減少し、このように、現在のページのID

  3. 変更ページDWT(ASCXコントロールを配置する)

を取得する必要があるとして、(出版)レンダリング時間を、ナビゲーションはページの読み込みにレンダリングされます。残念ながら、この方法ではページの読み込み時間が長くなります。それはあなたのニーズに応じて、より適切な解決策があなたのためにあります。ナビゲーションXMLをリフレッシュすることは、このアプローチの問題の1つです。

9

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と見て、すべての構造グループをリンクとして作成する必要があります。

あなたはブレッドクラムのトレールについて聞いていなかったことは知っていますが、あなたはレフトナビのように見えます。しかし、すべてのナビゲーション要素のアプローチは似ています.Template内のTOM.NETを使用して関連するPagesおよびStructureGroupをトラバースし、そこからナビゲーションHTMLを生成します。現在StructureGroup内のすべてのページのリストを取得(および現在の1をマーク)、私はこのような何かを期待する

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)); 

this great example from Nick where he generates an entire sitemapを参照してください。それは最後に必要なものに近いですが、もちろんもっと多くのコード(ここで再現するには多すぎます)です。アルバートはまた、his experience with this approach and mentions the alternativesの一部を共有しました。ページの種類としてASPXを使用している場合

関連する問題