2014-10-01 193 views
2

我們正在使用Sitecore 7.2與多站點實施。實際數據由多站點共享,因此它已存儲在通用的全局項目文件夾中。如何生成自定義唯一ID

我們正面臨在URL上生成唯一ID的問題。我有一個很好的搜索,但找不到任何解決方案,除了使用Sitecore項目ID。

這就是我們想要的:

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

其中1234是唯一生成的ID。

有人可以請建議,如果這是可能的?

+1

首先,什麼是播放器ID?它只能是數字還是可以是GUID?其次,爲什麼不能使用Sitecore項目ID? – 2014-10-01 13:35:53

+0

以下文章可能會有所幫助。 http://stackoverflow.com/questions/26043280/auto-increment-identity-custom-field-type – cpp 2014-10-01 18:22:39

回答

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,然後改變拉姆達使用playerItem.ID == new ID(Request.QueryString["playerId"]
      • 不管你使用哪一種,我建議增加null檢查的查詢字符串吸氣

  2. 子佈局參數
    • 如果使用此方法,查詢字符串將不會更改,並且人們將無法獲取從直接的URL
    • 過程中的頁面是一樣的查詢字符串,除非你正在使用Sublayout參數而不是
    • 請注意,您必須在父sublayout或Sitecore的(這意味着你必須設置這些一個單獨的頁面爲每個球員 - 即這將是一個壞的解決方案)

  3. 虛擬物品
    • 這真的是我認爲你正在尋找
    • 這可能是大量的工作,如果你從頭開始做,或者您可以使用the Wildcard Module
    • 如果你從頭做到這一點,你需要一個定製的管道和/或處理器用於處理請求
+0

這裏的選項#1是迄今爲止最容易實現的方法。 – Bryan 2014-10-02 20:38:40

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丟棄到會話變量或某個上下文變量中會非常簡單。

+0

+1因爲我完全忘了管道選項:) – 2014-10-10 16:31:35