Suggerisco di creare un metodo di estensione per la classe Articolo che restituisce un oggetto SiteInfo
contenente la definizione del sito a cui appartiene.
Purtroppo non ho il mio laptop qui con tutto il mio codice, in modo ho scritto in Visual Studio e fatto in modo che a costruire, ma sono abbastanza sicuro che funziona:
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;
}
}
Così ora puoi chiamare il metodo GetSite()
su tutti gli oggetti Item
e recuperare lo SiteInfo
per quell'elemento. È possibile utilizzare che per verificare se corrisponde il vostro Sitecore.Context.Site
, ad esempio facendo:
SiteInfo siteInfo = itemYouNeedToCheck.GetSite();
bool isContextSiteItem = Sitecore.Context.Site.SiteInfo.Equals(siteInfo);
EDIT: Ho solo pensato che si potrebbe anche farlo più breve, come questo:
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));
}
in modo da scegliere Qualunque cosa ti piace di più :)
fonte
2013-01-07 17:52:05
Un articolo può "appartenere" a più siti. Non penso che ci sarà una soluzione generica per questo, dipenderà dalla tua configurazione. – Bryan
Sì, definire "appartiene a". Se intendi "è al di sotto dell'attuale percorso root del sito di contesto", la risposta di Ruud è ciò di cui hai bisogno. –