Attualmente sto implementando la funzionalità in Tridion 2009 SP1 in cui l'utente è in grado di utilizzare un filtro che a sua volta interroga il broker per i criteri di corrispondenza e restituisce le presentazioni di componenti alla pagina. Ogni elemento restituito contiene un collegamento componente.Tridion Component Link non risolvente nella presentazione di componenti dinamici
Originariamente i CP dinamici erano archiviati nel DB del broker come frammenti HTML ma si è scoperto che durante l'archiviazione dei CP in questo modo, Tridion eliminerebbe il collegamento del componente dal contenuto e lascerebbe uno spazio vuoto nel codice HTML.
Ho quindi cambiato l'impostazione in modo che i CP dinamici siano ora memorizzati sul filestore come controlli ascx. Quando si utilizza questa impostazione, <tridion:ComponentLink ... />
viene memorizzato correttamente nel file ascx.
Tuttavia, quando vengo a visualizzare i risultati sullo schermo, il collegamento del componente non viene risolto e mi rimane il <tridion:ComponentLink ... />
nella mia origine risultante.
Attualmente, sto utilizzando il metodo GetComponentPresentation
per restituire il contenuto del CP che viene poi aggiunto a un elenco prima di essere associato a un ripetitore per la visualizzazione.
codice Riassunti è qui sotto:
ComponentPresentationFactory CPFactory = new ComponentPresentationFactory();
List<string> componentPresentations = new List<string>();
for (int i = 0; i < tbl.Rows.Count; i++)
{
ComponentPresentation cp = CPFactory.GetComponentPresentation(
tbl.Rows[i][0].ToString(),
strComponentTemplate.ToString());
if (cp != null)
{
componentPresentations.Add(cp.Content);
}
}
Questa lista è il limite al ripetitore nel solito modo:
rptOffer.DataSource = componentPresentations;
rptOffer.DataBind();
Qualcuno sa come posso forzare la componente link da risolvere e perché la funzione GetComponentPresentation
non fa questo per me?
C'è qualcosa che dovrei fare in modo diverso o semplicemente non è possibile nel modo in cui sto implementando questo?
Ho confermato che il tagprefix tridion
è registrato correttamente nel web.config.
Sono abbastanza nuovo per Tridion quindi qualsiasi aiuto è molto apprezzato!
UPDATE
ho tentato di implementare il suggerimento di Volontà come sembra che la soluzione più appropriata per il mio scenario, ma io sto ricevendo un errore di (abbastanza insipido) quando si tenta di utilizzare il suggerimento di Will con la mia codice qui sotto:
ComponentPresentationAssembler cpa = new ComponentPresentationAssembler("tcm:35-62652-64");
string content = cpa.GetContent(tbl.Rows[i][0].ToString(), strComponentTemplate.ToString());
in realtà ci sono due errori che si verificano (apparentemente) in modo casuale, ma sempre alla chiamata cpa.GetContent(...)
. Gli errori sono:
Exception occurred during configuration callback
OR
com.tridion.dcp.ComponentPresentationFactory
Non riesco a capire perché l'errore cambia tra le volte che eseguo il codice. L'errore cambia anche se non vengono apportate modifiche al codice.
Qualcuno sa cosa mi manca qui? Supponevo che sarebbe stato un problema con la connettività allo storage Broker ecc., Ma poi mi sono ricordato che quella parte stava funzionando mentre stavo usando la classe ComponentPresentationFactory
.
Se aiuta, il DCP che è memorizzato l'archivio file come ascx contiene il seguente codice HTML:
<div class="content-list-item offer redesign noImage">
<h2><span>Mike Offer 01/06 - 10/06 & 20/06 - 10/07</span> Exp May 20th</h2>
<div class="content-list-item-text">
<p>Body Text</p>
<div class="input-btn burgundy">
<tridion:ComponentLink runat="server" PageURI="tcm:0-0-0" ComponentURI="tcm:35-31685" TemplateURI="tcm:0-0-0" AddAnchor="false" LinkText="Button Text<span class="rm">: Button Text</span>" LinkAttributes=" alt="Button Text" target="_self" " TextOnFail="true"/>
</div>
<p>Sub Title</p>
</div>
<div class="offers-list">
<ul>
<li>Offer ends: 20 May 2012</li>
<li>Offer available at all hotels</li>
</ul>
</div>
<div class="back-to-top">
<a href="#content">Back to top</a>
</div>
UPDATE 2
Grazie a Ryan, I' Ho scoperto che i miei file DCP (ASCX) non venivano pubblicati all'interno della cartella dell'applicazione all'interno della cartella wwwroot che ha risolto il problema emettendo il tag <tridion:ComponentLink ... />
direttamente all'origine. È ora in fase di rendering, ma il collegamento non è ancora stato risolto. I tag <a ... />
non vengono emessi. È qui che si spera che arriverà l'Assembler, una volta che riuscirò a farlo funzionare.
ho implementato più la registrazione e il controllo e avere più informazioni sull'errore che suggerisce che io possa mancare un file JAR o di avere la versione corretta:
Exception Details: Java.Lang.ClassNotFoundException: com.tridion.dcp.ComponentPresentationFactory
L'interessante questo è, quando uso la classe ComponentPresentationFactory
, funziona (senza risolvere il collegamento interno) ma non appena utilizzo l'Assembler, genera l'errore sopra riportato.
Ho anche tentato di aggiungere la pagina al costruttore come suggerito da Alvin ma l'output è lo stesso.
Ehi Mike, Benvenuti a Tridion. Riesci a nascondere abbastanza bene la tua novità. :-) Scoprirai che molti membri della community di Tridion sono molto utili. Se non lo hai già fatto, ti preghiamo di impegnarti nella nostra proposta Tridion su area51: http://area51.stackexchange.com/proposals/38335/tridion?referrer=lav544jo87qNn9xqeeO2NA2 –
Il problema è con CPFactory - usa invece CPAssembler, come Will mostra nella sua risposta –
Sull'errore .getContent(), ogni possibilità è correlata a più server di presentazione e/o alla presentazione dei componenti che in realtà non viene pubblicata quando si esegue il codice? –