1

我已经在http://dev.ektron.com/forum.aspx?g=posts&t=29497的 Ektron 论坛上尝试了建议的答案

这些使用

Ektron.Cms.API.UrlAliasing.UrlAliasManual

Ektron.Cms.API.UrlAliasing.UrlAliasAuto

对象。但是,我在 Ektron 版本 8.6 sp1 中工作,方法 GetItemForContent 和 GetDefaultAlias 分别抛出“未实现”异常,让我相信它们不再起作用。

除此之外,我什至不清楚这些是否可以通用,因为我看不到在不首先调用这些方法的情况下检测特定内容是否具有手动、自动或任何别名的方法。有谁知道当前检索这些别名的最佳实践?

4

2 回答 2

2

好吧,在对工作区文件进行了一些挖掘之后(答案在 \Workarea\controls\content\UrlAliasing\editAliasesTab.ascx.cs 中),当前方法在命名空间中使用了 frameworkAPI 管理器对象Ektron.Cms.Framework.Settings.UrlAliasing

这个对象似乎能够处理手动和自动别名,尽管它的标准“get”方法在我的测试中只返回自动别名,而 getDefaultAlias 方法总是返回一个空字符串。当使用位于“Ektron.Cms.Settings.UrlAliasing.DataObjects.AliasCriteria”中的 Alias Criteria 对象时,管理器会按预期工作,返回所有关联的别名。返回的对象是别名类型的通用对象,并且将通过 isDefault 属性指示它们是否是默认值。

以下将提取所有别名,无论类型如何:

Ektron.Cms.Framework.Settings.UrlAliasing.AliasManager aCRUD = new ektron.Cms.Framework.Settings.UrlAliasing.AliasManager();
Ektron.Cms.Settings.UrlAliasing.DataObjects.AliasCriteria aSelector = new Ektron.Cms.Settings.UrlAliasing.DataObjects.AliasCriteria();
aSelector.AddFilter(Ektron.Cms.Settings.UrlAliasing.DataObjects.AliasProperty.TargetId, Ektron.Cms.Common.CriteriaFilterOperator.EqualTo, contentId);
var allAlias = aCRUD.GetList(aSelector);
于 2013-07-24T14:57:39.883 回答
0

如果您正在寻找内容的直接链接,可能是任何别名,那么以下代码将起作用:

ContentManager cm = new ContentManager();
ContentData cd = cm.GetItem(contentId);
string link = cd.QuickLink();
于 2013-07-24T17:12:07.027 回答