让我们用我的具体例子来解释:
我有3种类型(模板)的新闻:新的,外部新闻,产品发布;
我想以不同的方式在主页上显示它们。
现在我在xsl中做了一个简单的事情:
<xsl:variable name="upcoming" select="./item[sc:formatdate(sc:fld('End Date',.),'yyyyMMdd') >= sc:formatdate($now,'yyyyMMdd')" />
<xsl:for-each select="$upcoming">
<div>
<h2>
<sc:text field="Name" />
</h2>
<p>
<sc:text field="Description" />
</p>
</div>
</xsl:for-each>
拳头解决方案就是这样的(显然我不知道真正的语法):
<xsl:choose>
<xsl:when test="template = 'external news'">
<!-- something -->
</xsl:when>
</xsl:choose>
但是更好的是更加面向对象的方法并且有一个make_body()函数绑定到我可以从我的主页渲染调用的项目。
或者Sitecore有办法渲染可以在任何页面中显示的项目;由物品本身处理的渲染?
您怎么看?
我认为我不够清楚:
我想在我的主页上留言:
<div class="last_news">
<h2>Last News</h2>
<!-- Loop Goes here -->
</div>
我的不同新闻类型(新的,外部新闻,产品发布)在该框中列出时有不同的外观:
新:
<div class="news">
<h2><!-- title --></h2>
<p><!-- abridged text goes here --><p>
<a href="##news url##">read more</a>
</div>
外部新闻:
<div class="news external">
<img src="##website logo##">
<h2><!-- title --></h2>
<p><!-- abridged text goes here --><p>
<a href="##external url##">read more on www.<!-- site name --></a>
</div>
产品发布:
<div class="news product_release">
<div class="float_left">
<img src="##product logo##">
<a href="##product url##">Download now</a>
<a href="##product download url##">Download now</a>
</div>
<h2><!-- title --></h2>
<p><!-- abridged text goes here --><p>
<a href="##news url##">read more</a>
</div>
每种新闻类型都有自己的模板,包含不同的字段
我可以为每种类型制作子布局(.ascx)或渲染(.xslt),但现在我想知道如何在循环中显示那些。
我可以在我的循环中放置占位符吗?Sitecore会知道占位符必须由当前项使用吗?
答案 0 :(得分:3)
也许我错过了一些东西,但是你不能只为每个模板绑定到该模板的演示文稿的渲染(xslt)og子布局(asp.net控件)吗?
不是创建“复杂”if或切换到处理不同的模板,而是为每个模板制作一个简单的文件?
EG。你有这些asp.net控件:
否则如果您更喜欢使用1 xslt,因为它们有很多共享字段,您可以使用
<xsl:template match="*">
功能。我想你会写这样的东西:
<xsl:template match="@template='external news'">
//do something specific for the 'external news' template
</xsl:template>
然后你只为每个模板制作一个。警告我不是100%确定@ template ='x'是正确的语法。
我希望这会有所帮助。
答案 1 :(得分:0)
我认为这个问题的答案完全取决于您要展示的内容类型。您可以在Rich文本字段中放置任何所需内容,并使其对于Item是唯一的。这是迄今为止最简单的解决方案,对我来说最有意义......但也许我误解了你想要做的事情。但我相当肯定你不想在XSLT中这样做。 (当然,我有偏见......我在XSLT中没有做任何事情)
如果我真的不得不根据模板使渲染行为不同,我会将其作为带有代码隐藏的子布局。将业务逻辑放在XSL中是没有意义的。
也可以动态地将子布局添加到占位符。毕竟,这就是Sitecore在后端做的事情......所以你可以根据你正在显示的(随机?)项目来指定特定的子布局,并将数据源设置为你的项目。