現在、Tridion 2009 SP1で機能を実装しています。このフィルタでは、フィルタを使用してブローカに一致条件を照会し、コンポーネントプレゼンテーションをページに返します。 返される各アイテムにはコンポーネントリンクが含まれます。Tridionコンポーネントリンクが動的コンポーネントプレゼンテーションで解決されない
元々ダイナミックCPはHTMLフラグメントとしてブローカDBに格納されていましたが、このようにCPを保存すると、Tridionはコンテンツからコンポーネントリンクを取り除き、HTMLに空白を残すことに気付きました。
次に、ダイナミックCPがascxコントロールとしてfilestoreに保存されるように設定を変更しました。この設定を使用すると、<tridion:ComponentLink ... />
は正常にascxファイルに格納されます。
しかし、結果を画面に表示すると、コンポーネントのリンクが解決されず、結果のソースに<tridion:ComponentLink ... />
が残っています。
現在、私はGetComponentPresentation
メソッドを使用してCPコンテンツを返しています。これは、Repeaterにバインドされる前にリストに追加されて表示されます。
要約コードは以下の通りです:
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);
}
}
このリストは、通常の方法でリピータにバインドされている:
rptOffer.DataSource = componentPresentations;
rptOffer.DataBind();
誰もが私が解決されるコンポーネントのリンクを強制することができる方法を知っていますし、なぜGetComponentPresentation
機能が私のためにこれをしないのですか?
私はこれとは異なるやり方が必要なのでしょうか、それとも私がこれを実装している方法でこれができないのでしょうか?
tridion
のtagprefixがweb.configに正しく登録されていることを確認しました。
私はTridionをかなり新しくしていますので、どんな助けでも大歓迎です!
UPDATE
私はそれが私のシナリオのために最も適切な解決策のように思えるようウィルの提案を実装しようとしましたが、私は私とウィルの提案を使用しようとするとき、私は(かなり当たり障りのない)エラーを受信しています以下のコード:
ComponentPresentationAssembler cpa = new ComponentPresentationAssembler("tcm:35-62652-64");
string content = cpa.GetContent(tbl.Rows[i][0].ToString(), strComponentTemplate.ToString());
cpa.GetContent(...)
コールで(一見)ランダムにいつも起こる2つのエラーは、実際にあります。エラーは次のとおりです。
Exception occurred during configuration callback
OR
com.tridion.dcp.ComponentPresentationFactory
私はコードを実行する時間の間にエラーが変化する理由を理解できないようです。コードを変更しなくてもエラーは変化します。
私がここで紛失していることを誰かが知っていますか?私はそれがBrokerストレージなどへの接続性に問題があると思っていましたが、ComponentPresentationFactory
クラスを使用しているときにその部分が動作していたことを思い出しました。それが助け場合
、ascxファイルには、次のHTML含まれているとして、ファイルストアに保存されているDCP:ライアンへ
<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
おかげで、私は」私のDCP(ASCX)ファイルが、ソースに直接<tridion:ComponentLink ... />
タグを出力するという問題を解決したwwwrootフォルダ内のアプリケーションのフォルダ内に公開されていないことが判明しました。現在レンダリングされていますが、リンクはまだ解決されていません。 <a ... />
タグが出力されていません。これは、アセンブラがうまくいけばうまくいきます - 一度これを動作させることができます。
私はより多くのロギングを実施し、チェックし、私はjarファイルを欠落しているか、間違ったバージョンを持っていることを示唆しているエラーの詳細情報を持っていました:私が使用している場合
Exception Details: Java.Lang.ClassNotFoundException: com.tridion.dcp.ComponentPresentationFactory
面白いこれは、ありますクラスでは(内部リンクを解決することなく)動作しますが、アセンブラを使用すると直ちに上記のエラーがスローされます。
Alvinが提案したように、Pageをコンストラクタに追加しようとしましたが、出力は同じです。
に敏感であることに注意してくださいねえマイクは、Tridionのへようこそ。あなたは新鮮さをかなりよく隠すことができます。 :-)あなたはTridionコミュニティのほとんどのメンバーが非常に役に立ちます。もし私がまだ行っていないのであれば、エリア51のTridion提案にコミットしてください:http://area51.stackexchange.com/proposals/38335/tridion?referrer=lav544jo87qNn9xqeeO2NA2 –
問題はCPFactoryにあります - 代わりにCPAssemblerをWill彼の返信で表示されます –
.getContent()エラーでは、複数のプレゼンテーションサーバーやコンポーネントプレゼンテーションが実際にコードを実行したときに公開されていないことがあります。 –