2011-02-24 87 views
0

我第一次使用Umbraco为客户设计网站。每个页面由重复的内容面板组成 - 每个面板包含图像,标题和正文文本。umbraco - 重复内容

我已经得到了文档类型和模板完美的内容面板。但是,我不知道如何将多个面板添加到网页 - 我假设我将主页面doc类型设置为允许内容面板作为子节点 - 然后需要一个宏来迭代子节点并呈现每个使用内容面板模板。

另外,我想让客户端也能够在每个页面中添加和删除面板。

有人可以给我一个宏代码的例子来做到这一点吗?任何帮助非常感谢!

回答

3

如果您看看Blog4Umbraco软件包,您可以看到一个非常详细的例子,说明您正在尝试做什么。 (不想在这里过去整个宏,but you can find it here)将每个“面板”想象成一篇博客文章,并查看在单个屏幕上显示最近10篇博客文章的XSLT /宏 - 您可以调整这个漂亮很容易与你在做什么。您可以为“面板”创建文档类型和模板,用户可以根据需要为任意多个面板创建内容,并且修改后的XSLT版本会循环显示每个面板并在页面上显示信息。如果你喜欢(和我一样),你可以使用一个asp.net自定义控件来做同样的事情(就像你比.NET更熟悉.NET一样简单)。

创建这样的代码的模板:(这个例子是一个简单的博客控制):

<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(); 
+0

EJB - 非常感谢!我已经想出了如何使用XSLT进行此操作。然而,让我困惑的是,在我看到的所有例子中,模板元素似乎都是通过XSLT宏显式渲染的,这似乎使模板变得冗余。另外,我正在使用v4.6.1,因此RenderTemplate方法不再可用。如何通过XSLT使用重复内容的模板?谢谢 – jules 2011-02-25 11:16:00