Sto utilizzando Sitecore 7.5 e Sitecore 8 (2 progetti separati con la stessa necessità). Abbiamo elementi di contenuto archiviati in bucket, ma non sono essi stessi elementi di pagina (non hanno alcuna presentazione legata a loro, sono solo elementi di dati e potrebbero provenire da fonti diverse, inclusi i bucket di articoli).Sitecore MVC Percorso personalizzato mentre si sta ancora utilizzando la pipeline di rendering Sitecore
Quindi, ecco un layout generale del problema: la pagina che vogliamo rendere oggetti con sarebbe qualcosa di simile /Sitecore/content/home/notizie abbiamo bisogno di essere in grado di analizzare il pathinfo dopo l'elemento nome come payload dei dati per il rendering del controller.
Quindi, quello che ho provato finora include la creazione di un percorso personalizzato in queste righe:
routes.MapRoute(
"Blog",
"blog/{*pathInfo}",
new
{
scItemPath = "/sitecore/content/Home/Blog",
controller = "Blog",
action = "DefaultAction"
});
ho caricare le rotte da pipeline RenderCustomRoutes, e ho configurato questo per essere chiamato da prima e dopo la pipeline Sitecore InitializeRoutes in diversi tentativi di test.
Ho fatto riferimento a questo da http://www.sitecore.net/learn/blogs/technical-blogs/john-west-sitecore-blog/posts/2012/10/using-sitecore-keys-in-mvc-routes-with-the-sitecore-aspnet-cms.aspx e ad alcuni articoli correlati.
A seguito di una serie di articoli aggiuntivi da lì dove rivede le sue istruzioni o passa ad affrontare altri problemi non risolve il mio scenario. Il fatto è che nessuno di questi funziona. In questo caso il controller viene chiamato correttamente, ma mentre ottengo l'elemento stesso nel contesto di rendering non ottengo alcuno dei restanti rendering della pagina. C'è un modo per lanciare la pipeline di rendering da qui, o per assemblare la pagina usando il resto dei dettagli di presentazione dell'elemento del blog e farlo manualmente?
L'altro itinerario ho provato stava solo cercando di passare il pathinfo come dati alla pagina del blog URL esistente, ma io alla fine con un 404.
Non so se sto inseguendo un Oca selvaggia qui e che c'è un modo migliore o se mi manca un pezzo da qualche parte. In Webforms probabilmente avrei fatto la riscrittura degli URL per ottenere ciò senza usare i querystring, ma speravo che le rotte sarebbero state progettate per gestire le cose proprio così e gli articoli che stavo vedendo sembravano indurmi a pensare che fosse possibile.
coseaddizionali Ho preso in considerazione: John West dice che ci sono 4 modi per Sitecore per gestire una richiesta MVC
1. ignorare la richiesta: Lasciare ASP.NET MVC gestirlo come se Sitecore non è stato installato, senza stabilire un contesto Sitecore.
2. Applicare un percorso: utilizzare il controller e l'azione specificati da un percorso MVC.
3. Applicare l'azione designata: utilizzare il controller e l'azione specificata nell'elemento di contesto.
4. Applicare una vista: Utilizzare il controller e l'azione predefiniti di Sitecore per richiamare la vista definita nei dettagli di layout per il dispositivo di contesto nell'elemento di contesto.
che cosa ottengo quando uso il percorso personalizzato sembra adattarsi # 2, ma quello che ho bisogno è qualcosa di più simile # 3 o # 4 pur utilizzando il percorso personalizzato.
Ci provo. Attualmente sto testando il supporto dell'editor di pagine per la soluzione che ho trovato. Riesco a ottenere la pagina come previsto in una forma molto semplice. Se ho la mia vista caricare gli altri rendering o anche esporre altri segnaposti, allora potrebbe fare tutto ciò di cui ho bisogno. Il mio pensiero sarebbe di avere il controllore decidere quale elemento di dati da referenziare e anche quale vista tornare nel caso in cui fosse necessario. Ci giocherò un po 'con questa idea e ti faccio sapere come si confronta o se riesco ad ottenerne di più! –
Anche questa è una soluzione interessante. D'accordo con la separazione, e dovrebbe essere ancora possibile con i nodi jolly.In pratica passeresti per il guid dell'elemento di dati (post del blog) e quindi legerai staticamente quello nella tua vista. C'è un ulteriore wrapper View per raggiungere questo obiettivo, non ideale ma abbastanza semplice. Dato che il tuo rendering è datato, il supporto dell'editor di pagine continuerà a funzionare. – jammykam
Sì, l'idea del nodo jolly è quasi ancora più semplice di una delle altre. È davvero tutto ciò di cui abbiamo bisogno, per aggirare il problema con le querystring. Il resto della pagina può essere impostato normalmente e il mio controller può caricare l'elemento solo in base a quel percorso. L'unico intoppo che riesco a vedere è che i percorsi vengono incasinati usando il formato gg/mm/aaaa. Posso vedere se possiamo usare i trattini invece –