2012-12-11 12 views
5

In un sito che sto costruendo, sto cercando di utilizzare il referente per verificare che le richieste AJAX provengano dagli URL corretti.Ottieni l'elemento corrispondente a un URL in Sitecore

Per fare questo mi piacerebbe ottenere Sitecore per risolvere un URL per un elemento. Ad esempio,

http://www.mysite.com/abc/def

potrebbe risolvere alla voce nel percorso

sitecore/Content/MySite/Home/abc/def

Qual è il modo consigliato per andare su questo nel mio codice?

risposta

1

In realtà non ottenere ciò che si sta cercando di fare (con la vostra richiesta AJAX e simili), ma se si vuole http://www.mysite.com/abc/def per risolvere la voce sitecore/content/MySite/Home/abc/def, è necessario configurare il <site> nel web.config in questo modo:

<site name="MySite" hostName="www.mysite.com" rootPath="/sitecore/content/MySite" startItem="/Home" *other attributes here* /> 
1

è possibile utilizzare il metodo ItemManager.GetItem(itemPath, language, version, database, securityCheck) Per risolvere un elemento basato sul suo (pieno) percorso.

6

Grazie per tutte le risposte, ma nessuna ha fatto tutto ciò di cui avevo bisogno. Questo ha funzionato per me.

var url = new Uri(...); 

// Obtain a SiteContext for the host and virtual path 
var siteContext = SiteContextFactory.GetSiteContext(url.Host, url.PathAndQuery); 

// Get the path to the Home item 
var homePath = siteContext.StartPath; 
if (!homePath.EndsWith("/")) 
    homePath += "/"; 

// Get the path to the item, removing virtual path if any 
var itemPath = MainUtil.DecodeName(url.AbsolutePath); 
if (itemPath.StartsWith(siteContext.VirtualFolder)) 
    itemPath = itemPath.Remove(0,siteContext.VirtualFolder.Length); 

// Obtain the item 
var fullPath = homePath + itemPath; 
var item = siteContext.Database.GetItem(fullPath); 
+0

Questo potrebbe non funzionare bene in caso di sistema multilingue. ?? – theusguy

+0

Siccome avevo un trattino ('-') nella mia cartella virtuale, avevo bisogno di spostare la chiamata in' DecodeName' dopo il controllo della cartella virtuale all'inizio del percorso. @theusguy Puoi anche chiamare GetItem con una lingua, se l'hai estratto anche dall'URL (o lo hai letto dal cookie di thesc_lang). –

Problemi correlati