0

我正在从事一个有很多重复文件的 umbraco 项目。我的导航结构中需要多个文档,它们具有相同的内容,但标题不同,在导航树中的位置也不同。我创建了一个具有通用属性“copypage”(Type ContentPicker)的文档类型,编辑器可以在其中设置应该镜像哪个页面的内容。我目前的解决方案看起来像

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

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

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

4

2 回答 2

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 属性“ umbracoInternalRedirectId ”。此属性重定向到另一个页面,但保留初始请求的 URL,屏蔽另一个页面的 URL。

于 2014-05-28T12:36:14.993 回答
0

我自己找到了我的具体问题的答案。像下面这样更改我的每个自定义宏都解决了我的问题。

var widgetsFolder = Model.WidgetsFolders.First();
if (Model.HasValue("copypage")){
  var page = Library.NodeById(Model.copypage);
  widgetsFolder = page.WidgetsFolders.First();
}
于 2014-06-03T13:53:28.403 回答