プレゼンテーションの詳細が構成されているアイテムがあるとします。そのアイテムには、ツリー構造のどこかに10以上の他のアイテム(異なるテンプレート)への参照(GUID)を保持するTreelistExフィールドがあり、それぞれに独自のプレゼンテーションの詳細(サブレイアウト)があります。
独自の設定に基づいて、すべての参照アイテムを(現在のアイテムとして)同じページに表示するにはどうすればよいですか?1ページと10以上のコンテンツがそれぞれ独自のレイアウト表示で表示されるようにしたいと思います。
私も同様の問題を抱えていました。サブレイアウトとxslレンダリングをレンダリングするためのコードは次のとおりです。
public IEnumerable<Control> GetRenderingControls(Item item)
{
// Loop through all renderings on the item
foreach (RenderingReference rendering in item.Visualization.GetRenderings(Context.Device, false))
{
// Get the path to the Sublayout
string path = rendering.RenderingItem.InnerItem["Path"];
switch(rendering.RenderingItem.InnerItem.TemplateName.ToLower())
{
case "xsl rendering":
// Create an instance of a XSL
XslFile xslFile = new XslFile();
xslFile.Path = path;
xslFile.DataSource = item.Paths.FullPath;
xslFile.Parameters = GetParameters(xslFile);
yield return xslFile;
break;
case "sublayout":
// Create an instance of a sublayout
Sublayout sublayout = new Sublayout();
sublayout.Path = path;
sublayout.DataSource = item.Paths.FullPath;
sublayout.Parameters = GetParameters(sublayout);
yield return sublayout.GetUserControl();
break;
default:
throw new Exception(string.Format("Unknown rendering template - {0}", rendering.RenderingItem.InnerItem.TemplateName));
}
}
}
コントロールを取得したら、それらをプレースホルダーに追加すると、ページにレンダリングされます。
独自のレイアウト プレゼンテーションを持つ各アイテムは、HTML ファイル全体を取得していることを意味します...各アイテムには独自の<html>, <head>, and <form>
タグがあります。言うまでもなく、それは問題を引き起こすでしょう。
そうは言っても...これはまさに Server.Execute() の目的です。TreeList 項目をループし、LinkManager を使用して項目の URL を取得し、次に Server.Execute() を使用してレンダリングされた出力を取得します。