如何生成自定义唯一ID

时间:2014-10-01 11:21:15

标签: sitecore sitecore7 sitecore7.2

我们正在使用Sitecore 7.2和多站点实现。实际数据在多站点之间共享,因此它存储在通用的Global Item文件夹中。

我们在URL上生成唯一ID时遇到问题。我有一个很好的搜索,但除了使用Sitecore项目ID之外找不到任何解决方案。

这就是我们想要的:

域/播放器/ player_id 例如域/播放器/ 1234

其中1234是唯一生成的ID。

有人可以建议这是否可行?

2 个答案:

答案 0 :(得分:2)

Sitecore中管理的每个页面都是Sitecore项目。因此,您应该只能导航到播放器项目的名称。如果你试图在你的帖子中说播放器项目存储在全局而不是页面中,那么你可以选择以下选项:

  1. 查询字符串:domain/players/player?playerId={ID}

    • 如果这是您选择的路线,那么我建议使用播放器项目的Sitecore ID作为查询字符串参数的值。
    • 如果您有其他ID,则将指定的ID放在那里,但使用Sitecore ID
    • 最简单
    • 您接下来要做的是获取具有在查询字符串参数中指定的ID的项目(或者获取具有在查询字符串参数中指定的玩家ID的项目,具体取决于您采用的路线)并显示该数据页面上的播放器
      • Sitecore.Context.Database.GetItem(Request.QueryString["playerId"])
      • playerItems.FirstOrDefault(playerItem => playerItem["Player ID"] == Request.QueryString["playerId"])
        • 请注意,这假定播放器ID是字段,而不是Sitecore ID
        • 如果是Sitecore ID,则将lambda更改为使用playerItem.ID == new ID(Request.QueryString["playerId"]
      • 无论您使用哪一个,我建议将空检查添加到QueryString getter

  2. 子布局参数
    • 如果您使用此方法,查询字符串将不会更改,人们将无法从直接网址访问该网页
    • 除了使用Sublayout参数
    • 之外,该过程与查询字符串相同
    • 请注意,您必须在父子布局或Sitecore中设置这些(这意味着每个播放器都有一个单独的页面 - 即这将是一个糟糕的解决方案)

  3. 虚拟物品
    • 这就是我认为您正在寻找的
    • 如果您从头开始做这项工作可能会很多,或者您可以使用the Wildcard Module
    • 如果从头开始,您将需要一个自定义管道和/或处理器来处理请求

答案 1 :(得分:1)

Zachary的好建议。我还要补充几点:

1)IIS重写模块。如果您真正关注的是外部网址看起来像/ domain / players / 1234,您可以通过将这些请求转发给Zachary的选项#1来轻松完成此操作。客户端看到/ domain / players / 1234,但它实际上是由/domain/player/player.aspx?playerid=1234上的一个Sitecore项目处理的。客户不必知道。

2)自定义ItemResolver管道处理程序。自定义管道最初可能有点令人生畏,但它们实际上非常容易实现并且非常有用。添加一个检查“players / 1234”并将ContextItem设置为播放器处理页面并将ID放入会话变量或某个上下文变量的新内容将非常简单。