2

我有两个不同 PageTypes 的列表 - NewsItems 和 PressReleases。它们分别显示在一个列表中,并带有指向各个项目的链接。

现在我想将新闻稿项目包含到新闻列表中,并使用新闻项目的样式将它们显示为新闻项目。它们共享新闻模板中使用的“标题”和“正文”等属性。

我想用两组页面来提供 NewsItems 的 ListPage 并不难,但我不明白如何控制项目页面的呈现。

如果在 NewsList 中选择它,我想从 NewsItem 或 PressReleaseItem 中获取 PageData 对象并使用 News-Item.aspx 模板显示它。但是 EPiServer 将始终使用 PR-Item.aspx 呈现 PressReleaseItem,因为它在 PageType 设置中耦合。

有谁知道如何做到这一点?

编辑:努力澄清:

重要的问题是如何知道“列表父级”并从中选择正确的模板。In the ListPage I can apply different looks on the PR and News items respectively using tompipes answer, but when selecting to see an individual item EPi will render the PR-Item-1 the same way regardless of their "list parent". 那就是问题所在。

概念设计

4

3 回答 3

2

我没有完全按照您在这里尝试的内容进行操作。但我想我明白了它的要点。

为什么不对两种页面类型使用一个 aspx 模板,而是在代码后面使用可见属性关闭部分。

如果您使用 PageTypeBuilder,您可以使用“is”关键字:

somePlaceHolder.Visible = CurrentPage is NewsItemList;

如果您不使用 PTB,则可以使用以下内容:

somePlaceholder.Visble = CurrentPage.PageTypeID == 10;

或者

somePlaceholder.Visble = CurrentPage.PageTypeName == "NewsItemList";

我现在要指出,我不喜欢硬编码任何东西,所以我会将模板名称或 ID 放入配置文件或开始/根页面上的属性中,以避免硬编码它们。

让我知道这是否会有所帮助,或者如果我误解了,请尝试详细说明您的问题。

于 2011-11-23T12:40:16.453 回答
1

根据模板共享的多少,您可以使用用户控件、占位符甚至不同的母版页以合适的方式切换视图。

要知道何时切换,您可以使用查询字符串参数、会话变量或最好的方式可能是通过 HTTP 引用者查找并获取列表的 PageData 对象。如果它是空的,您将在最坏的情况下获得新闻稿渲染。

于 2011-11-23T15:57:34.377 回答
0

我尝试了很多解决方案,包括向列表链接中的 PR 项目添加查询字符串、在项目模板中获取引用 url 以及用于从 PR 项目自动发布新闻项目的不同类型的事件挂钩(尽管我只看了在那个代码示例中),最后得出的结论是,他们都有一些东西告诉我不要那样做。(使代码太复杂,或者标记逻辑太难理解等等)

我最终使用Fetch data from another EPiServer page, 并创建了一个“快捷页面类型”,让我的编辑选择应该将哪个 PR 项目用作新闻项目的基础。

这种快捷方式页面类型称为“PR-as-news-itemPage”,它使用与普通新闻项目相同的 aspx 呈现:News-Item.aspx。没有自己的属性,它将从使用“Fetch...”选择的 PR 项目中获取所有相关数据

为了呈现 PR 项目及其所有属性,我创建了一个名为 PR-Item.aspx 的普通新页面类型。这将呈现“属性 2”属性,该属性仅由 PR-item.aspx 呈现,而不由 News-Item.aspx 呈现。

(我本可以更简单,让编辑使用旧的 News-Item 页面类型并在那里使用“Fetch...”属性,但我在该页面类型中有一些我不想制作的强制性属性为此可选。)

于 2011-11-28T09:48:48.973 回答