Proponuję utworzyć metodę rozszerzenia dla klasy Item, która zwraca obiekt SiteInfo
zawierający definicję witryny, do której należy.
Niestety nie mam tu mój laptop z całego kodu, więc po prostu wpisane w Visual Studio i upewnić się, że budowę, ale jestem pewien, że działa:
public static class Extensions
{
public static Sitecore.Web.SiteInfo GetSite(this Sitecore.Data.Items.Item item)
{
var siteInfoList = Sitecore.Configuration.Factory.GetSiteInfoList();
foreach (Sitecore.Web.SiteInfo siteInfo in siteInfoList)
{
if (item.Paths.FullPath.StartsWith(siteInfo.RootPath))
{
return siteInfo;
}
}
return null;
}
}
Więc teraz możesz wywołać metodę GetSite()
na wszystkich obiektach Item
i pobrać SiteInfo
dla tego przedmiotu. można używać, aby sprawdzić, czy pasuje do Twojego Sitecore.Context.Site
, na przykład wykonując:
SiteInfo siteInfo = itemYouNeedToCheck.GetSite();
bool isContextSiteItem = Sitecore.Context.Site.SiteInfo.Equals(siteInfo);
EDIT: Po prostu pomyślałem, że można też zrobić to krótsze, tak:
public static Sitecore.Web.SiteInfo GetSite(this Sitecore.Data.Items.Item itemYouNeedToCheck)
{
return Sitecore.Configuration.Factory.GetSiteInfoList()
.FirstOrDefault(x => itemYouNeedToCheck.Paths.FullPath.StartsWith(x.RootPath));
}
Więc odebrać cokolwiek lubisz najbardziej :)
Produkt może "należeć" do wielu witryn. Nie sądzę, aby istniało ogólne rozwiązanie tego problemu, będzie ono zależeć od konfiguracji. – Bryan
Tak, zdefiniuj "należy do". Jeśli masz na myśli "znajduje się pod bieżącą ścieżką do głównego kontekstu witryny", odpowiedź Ruuda jest tym, czego potrzebujesz. –