Как сгенерировать собственный уникальный идентификатор

Мы используем Sitecore 7.2 с многосайтовой реализацией. Фактические данные распределяются между несколькими сайтами, поэтому они хранятся в общей папке Global Item.

Мы столкнулись с проблемой создания уникального идентификатора в URL-адресе. У меня был хороший поиск, но я не смог найти никакого решения, кроме использования идентификатора элемента Sitecore.

Это то, что мы хотим:

домен/игроки/идентификатор_игрока, например. домен/игроков/1234

где 1234 — уникальный сгенерированный идентификатор.

Может ли кто-нибудь предложить, если это возможно?


person Nil Pun    schedule 01.10.2014    source источник
comment
Во-первых, что такое Player ID? Это могут быть только числа или это может быть GUID? Во-вторых, почему вы не можете использовать идентификатор элемента Sitecore?   -  person Zachary Kniebel    schedule 01.10.2014
comment
Следующий пост может быть полезен. stackoverflow.com/questions/26043280/   -  person cpp    schedule 01.10.2014


Ответы (2)


Каждая страница, управляемая в Sitecore, является элементом Sitecore. Таким образом, вы должны иметь возможность просто перейти к названию элемента проигрывателя. Если вы пытались сказать в своем посте, что элементы игрока хранятся в глобальных переменных, а не в виде страниц, то у вас остаются следующие варианты:

  1. Строка запроса: domain/players/player?playerId={ID}

    • If this is the route that you choose to take then I would suggest using the player item's Sitecore ID for the value of the query string parameter.
    • Если у вас есть другие идентификаторы, поместите туда указанный идентификатор, однако проще всего будет использовать идентификаторы Sitecore.
    • What you would then do is get the item with the ID specified in the query string parameter (or get the item with the player ID specified in the query string parameter, depending on which route you take) and display the data for that player on the page
      • Sitecore.Context.Database.GetItem(Request.QueryString["playerId"])
      • playerItems.FirstOrDefault(playerItem => playerItem["Player ID"] == Request.QueryString["playerId"])
        • Note that this assumes that the Player ID is a field, not the Sitecore ID
        • Если это идентификатор Sitecore, измените лямбду, чтобы использовать playerItem.ID == new ID(Request.QueryString["playerId"]
      • Независимо от того, какой из них вы используете, я предлагаю добавить проверки null в метод получения QueryString

  2. Sublayout Parameters
    • If you use this method, the query string will not change and people will not be able to get to the page from the direct URL
    • Процесс такой же, как и для строк запроса, за исключением того, что вместо этого вы используете параметры подмакета.
    • Обратите внимание, что вы должны установить их в родительском подмакете или в Sitecore (это означает, что у вас есть отдельная страница для каждого плеера, т.е. это было бы плохим решением)

  3. Virtual Items
    • This is really what I think you are looking for
    • Это может потребовать много работы, если вы делаете это с нуля или можете использовать модуль подстановочных знаков
    • Если вы делаете это с нуля, вам понадобится специальный конвейер и/или процессор для обработки запросов.
person Zachary Kniebel    schedule 01.10.2014
comment
Вариант № 1 здесь, безусловно, самый простой способ реализовать это. - person Bryan; 03.10.2014

Хорошие предложения от Закари. Добавлю еще парочку:

1) Модуль перезаписи IIS. Если вам действительно нужно, чтобы внешние URL-адреса выглядели как /domain/players/1234, вы можете легко добиться этого, перенаправив эти запросы на что-то вроде варианта № 1 Закари. Клиент видит /domain/players/1234, но на самом деле он обрабатывается одним элементом Sitecore по адресу /domain/player/player.aspx?playerid=1234. Клиент не должен этого знать.

2) Пользовательский обработчик конвейера ItemResolver. Пользовательские конвейеры поначалу могут показаться немного пугающими, но на самом деле их довольно легко реализовать, и они очень полезны. Было бы довольно просто добавить новый, который проверял бы «players/1234», установить ContextItem на страницу обработки вашего игрока и поместить идентификатор в переменную сеанса или какую-либо переменную контекста.

person Bryan    schedule 02.10.2014
comment
+1 Потому что я совсем забыл про конвейер :) - person Zachary Kniebel; 10.10.2014