创建umbraco服务器脚本,镜像文档内容,包括宏

时间:2014-05-27 10:36:05

标签: c# razor umbraco umbraco6

我正在开发一个包含大量重复文档的umbraco项目。我的导航结构中需要多个文档,这些文档具有相同的内容,但导航树中的标题和位置不同。我创建了一个带有通用属性" copypage"的文档类型。 (输入ContentPicker)编辑器可以设置应该镜像哪个页面的内容。我目前的解决方案似乎是

var page = Library.NodeById(Model.copypage);
@page.contents;

但这会导致镜像页面中包含宏的问题。

编辑:我的问题是原始文档上的宏访问子文档。这些子项不会作为子项复制到镜像页面。所以我的目标是在原始页面的上下文中执行@Html.Raw(umbraco.library.RenderMacroContent(page.contents.ToString(), Model.Id))

2 个答案:

答案 0 :(得分:1)

用于从另一个页面呈现内容的最受测试的解决方案是uComponents宏" RenderTemplate"。我

您可以使用Razor或您喜欢的任何内容构建模板,然后使用页面ID在另一个模板中呈现它。这通常用于在另一页上呈现多个小部件。您所需要的只是要呈现的页面的ID。该宏还支持使用不同的模板进行渲染。

<umbraco:Macro runat="server" Alias="RenderTemplate" NodeIds="1,11,12" CurrentPage="1" EntriesPerPage="10" AltTemplateId="0" UseChildNodes="0" />

另一个解决方案是使用umbraco属性&#34; umbracoInternalRedirectId &#34;。 此属性重定向到另一个页面,但保留初始请求的URL,屏蔽其他页面的URL。

答案 1 :(得分:0)

我自己找到了我的具体问题的答案。更改我的每个自定义宏如下所示解决了我的问题。

var widgetsFolder = Model.WidgetsFolders.First();
if (Model.HasValue("copypage")){
  var page = Library.NodeById(Model.copypage);
  widgetsFolder = page.WidgetsFolders.First();
}