我第一次使用Umbraco为客户设计网站。每个页面都包含重复的内容面板 - 每个面板包含图像,标题和正文。
我的文档类型和模板完全适用于内容面板。但是,我无法弄清楚如何将多个面板添加到网页 - 我假设我将主页面文档类型设置为允许内容面板作为子节点 - 然后需要一个宏来迭代子节点并渲染每个使用内容面板模板。
另外,我想允许客户端也能够从每个页面添加和删除面板。
有人可以给我一个宏代码示例吗?任何帮助非常感谢!
答案 0 :(得分:3)
如果您查看Blog4Umbraco软件包,您可以看到一个非常详细的示例,说明您要执行的操作。 (不想在这里通过整个宏,but you can find it here)将每个“面板”想象成博客文章,并查看在单个屏幕上显示最近10篇博文的XSLT /宏 - 您可以很容易地适应你正在做的事情。您将为“面板”创建一个doctype和模板,用户可以根据需要为多个面板创建内容,并且XSLT的修改版本将循环到每个面板并在页面上显示信息。
如果您愿意(就像我一样),您可以使用asp.net自定义控件同样轻松地执行相同的操作(特别是如果您更熟悉.net而不是XSLT)。
使用以下代码创建模板:(此示例适用于简单的博客控件):
<ItemTemplate>
<div class="blogTitle"><a href="<%# DataBinder.Eval(Container.DataItem, "Url") %>"> <%# DataBinder.Eval(Container.DataItem, "NodeName") %> </a></div>
<div class="blogDate">Post Date: <%# String.Format("{0:D}", Convert.ToDateTime(DataBinder.Eval(Container.DataItem, "Post Date")))%></div>
<div class="blogContent"><%# DataBinder.Eval(Container.DataItem, "Content") %></div>
</ItemTemplate>
然后在代码页面加载后,您可以将子节点绑定到该转发器,如下所示:
//To get the nodes as a datatable so you can use it for DataBinding use this method
var children = currentNode.ChildrenAsTable();
rptPosts.DataSource = children;
rptPosts.DataBind();