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

本文关键字:包括宏 文档 镜像 服务器 脚本 创建 umbraco | 更新日期: 2023-09-27 18:05:15

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

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

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

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

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

从另一个页面渲染内容的最测试的解决方案是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。

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

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