如何强制实时网址AbsoluteUrl在Kentico页面类型上更新

问题描述

我正在寻找有关Live Url(后端的绝对URL)如何重新生成以及触发它更新的信息。

使用Kentico 12SP MVC,我有一个非常普通的NewsArticle页面类型,该页面类型使用“ / news / {%UrlSlug%}”的自定义网址模式来路由到文章。以前使用过AliasPath,但是由于内容编辑器希望能够创建长度超过50个字符限制的段,因此我们为其创建了一个自定义字段

在我从头开始创建的任何页面上,以及我已经编辑过的许多较新页面上,都可以正常工作,并将UrlSlug更改为所需的(很长)段会更新URL。但是,在大量旧文章中,更改UrlSlug似乎对Live Url没有影响。在许多URL上已更改为“ / news /”,而在其他URL上仍显示为旧url(基于NodeAlias)。我仍然可以通过手动输入基于UrlSlug的url转到页面,但是我一直在使用基于Live Url(afaik)的TreeNode.AbsoluteUrl来生成菜单站点地图项,而这些菜单项和Sitemap项仍然拒绝更新我们的大部分文章

希望有人知道如何迫使他们全部再生,或者至少知道为什么有些人会工作而另一些人却不知道。

解决方法

“常规”页面标签上显示的“实时URL”源自CMS.DocumentEngine.DocumentURLProvider.GetAbsoluteLiveSiteURL(TreeNode node);

最终呼出到DocumentURLProvider.GetUrlInternal(TreeNode node);

您可以通过registering a custom provider用自定义的DocumentURLProvider覆盖它。

这将使您致电base.GetUrlInternal(node)并查看返回的内容。

在原始DocumentURLProvider中检查的一个条件是NodeIsContentOnly,它在CMS_Tree表中。

因此,我将检查并确保所有有问题的页面都将此属性设置为true(在db列中为1),否则传统的Portal Engine实时URL生成将生效。

实时URL根本没有任何“重新生成”。显示的内容来自“页面类型”配置(“ URL模式”)的值,数据库中的“节点”以及填充“ URL模式”中的“宏表达式”的值。