3

DreamweaverテンプレートでGetLabelTBBを使用して、のような式を解析し%%LabelKey%%、Publicationメタデータに格納されているコンポーネントの値に置き換えようとしています。

ラベルを使用して絶対URL(http://www.example.comなど)を保存しようとしていますが、テンプレートを実行しようとすると、テンプレートビルダーで次のようになります。

エラー:ConvertURLToPath()はURLをデコードできません:無効なエスケープ

DWTコードは次のようになります。

<a href="%%LogoLink%%" target="_blank" title="%%LogoLinkTitle%%" class="logo">
    <img src="@@Page.Publication.Metadata.parent_logo@@" width="95" height="24"
         alt="@@parent_logo0.alt@@">
</a>

問題の原因は%%LogoLink%%です。テンプレートを削除すると、テンプレートは正常に機能します。Tridionがこの値で何かをしようとしているのはなぜですか?だったら解決しようと思ったtridion:href

助けていただければ幸いです。

フルスタックトレース:

エンジン:Engine.Transformのエラーエラー:ConvertURLToPath()はURLをデコードできません:Tridion.ContentManager.Session.GetTcmUri(String uri)のTridion.ContentManager.Session.GetObject(String uri)の無効なエスケープ.IsExistingObject(String uri)at Tridion.ContentManager.Templating.Engine.GetObject(Session session、String itemUriOrWebDavUrl)at Tridion.ContentManager.Templating.Engine.GetObject(String itemUriOrWebDavUrl)at Tridion.ContentManager.Templating.Templates.ExtractBinariesFromHtml Tridion.ContentManager.Templating.Templates.ExtractBinariesFromHtmlTemplate.ResolveTemplateBinaries(エンジンエンジン、パッケージパッケージ、TcmUri baseItemTcmUri、ExtractBinariesContentWrapper contentWrapper)at Tridion.ContentManager.Templating.Templates.ExtractBinariesFromHtmlTemplate.Transform(Engine engine、Package package)at Tridion.ContentManager.Templating.Dreamweaver.DreamweaverMediator.RegisterTemplateBinaries(Package package、String baseItemTcmUri、String templateString) .Dreamweaver.DreamweaverMediator.Transform(エンジンエンジン、テンプレートtemplateToTransform、パッケージパッケージ)at Tridion.ContentManager.Templating.Engine.ExecuteTemplate(テンプレートテンプレート、パッケージパッケージ)at Tridion.ContentManager.Templating.Engine.InvokeTemplate(パッケージパッケージ、TemplateInvocation templateInvocation、テンプレートテンプレート)Tridion.ContentManager.Templating.Dreamweaver.Dreamweaver.DreamweaverMediator.RegisterTemplateBinaries(Package package、String baseItemTcmUri、String templateString)at Tridion.ContentManager.Templating.Dreamweaver.DreamweaverMediator.Transform(Engine engine、Template templateToTransform、Package package)at Tridion Tridion.ContentManager.Templating.Engine.InvokeTemplate(パッケージパッケージ、TemplateInvocation templateInvocation、テンプレートテンプレート)のContentManager.Templating.Engine.ExecuteTemplate(テンプレートテンプレート、パッケージパッケージ)Tridion.ContentManager.Templating.Dreamweaver.Dreamweaver.DreamweaverMediator.RegisterTemplateBinaries(Package package、String baseItemTcmUri、String templateString)at Tridion.ContentManager.Templating.Dreamweaver.DreamweaverMediator.Transform(Engine engine、Template templateToTransform、Package package)at Tridion Tridion.ContentManager.Templating.Engine.InvokeTemplate(パッケージパッケージ、TemplateInvocation templateInvocation、テンプレートテンプレート)のContentManager.Templating.Engine.ExecuteTemplate(テンプレートテンプレート、パッケージパッケージ)テンプレートtemplateToTransform、パッケージパッケージ)at Tridion.ContentManager.Templating.Engine.ExecuteTemplate(テンプレートテンプレート、パッケージパッケージ)at Tridion.ContentManager.Templating.Engine.InvokeTemplate(パッケージパッケージ、TemplateInvocation templateInvocation、テンプレートテンプレート)テンプレートtemplateToTransform、パッケージパッケージ)at Tridion.ContentManager.Templating.Engine.ExecuteTemplate(テンプレートテンプレート、パッケージパッケージ)at Tridion.ContentManager.Templating.Engine.InvokeTemplate(パッケージパッケージ、TemplateInvocation templateInvocation、テンプレートテンプレート)
Tridion.ContentManager.Templating.Compound.CompoundTemplateMediator.Transform(エンジンエンジン、テンプレートtemplateToTransform、パッケージパッケージ)at Tridion.ContentManager.Templating.Engine.ExecuteTemplate(テンプレートテンプレート、パッケージパッケージ)at Tridion.ContentManager.Templating.Engine.InvokeTemplate(パッケージパッケージ、TemplateInvocation templateInvocation、Template template)
at Tridion.ContentManager.Templating.Engine.TransformPackage(Template template、Package package)at Tridion.ContentManager.Templating.Engine.TransformItem(Template template、IdentizableObject itemToRender)atTridion.ContentManager.Templating。
Tridion.ContentManager.Templating.Debugging.DebugSession.Run()でのDebugging.DebuggingEngine.Run()

4

2 に答える 2

3

@Puf によって与えられた答えは、コードがうまくいかない理由を説明しています。別の方法として、URL とテキストを含む「LogoLink」および「LogoLinkTitle」というパッケージに StringItems を挿入する C# TBB を作成することを検討してください。その後、パイプラインで DWT の前に新しい TBB を使用し、次のように標準の DWT 構文を使用して値を挿入できます。

 <a href="@@LogoLink@@" target="_blank" title="@@LogoLinkTitle@@" class="logo">
     <img src="@@Page.Publication.Metadata.parent_logo@@" width="95" height="24" alt="@@parent_logo0.alt@@">
 </a>

おそらく、これを行っていない理由があるかもしれません。その場合は、Franks ソリューションを使用してください。

于 2012-04-24T18:22:46.693 に答える
3

DWT をアップロードすると、Tridion は DWT内のそれ<img src=...をマルチメディア コンポーネントにマッピングしようとします。この手順は、DWT が BluePrinting (値を TCM URI として保存する必要がある) で正常に動作し、 Dreamweaverで常に表示できる (ファイルパスが必要) ことを確認するために必要です。

このマッピングを行うために、Tridion は任意の属性srcまたはhref属性 (および CSS インポートまたはurl()構成要素) のパスを取得し、DWT を基準としたその場所でマルチメディア コンポーネントを探します。

したがって、以下に格納されている DWT に以下が/Building Blocks/System/Designs/My Page Design含まれている場合:

<img src="../Images/MyHeader.jpg"></img>

次に、Tridion は呼び出されたマルチメディア コンポーネントを探し、一致する場合/Building Blocks/System/Images/MyHeader.jpgは値を置き換えます。src

<img src="tcm:1-23"></img>

DWT では、%%LogoLink%%URL エンコードされているように見えるため (% 記号は URL のエスケープ文字として使用されます)、問題を引き起こしていますが、実際にはそうではありません。

同様の問題に遭遇したほとんどの人は、最終的に DWT で別のエスケープ シーケンスを使用し、DWT の実行後にそのエスケープ シーケンスを %% に変換する小さな後処理 TBB を作成します。あなたの場合、競合しないエスケープ構文を選択するだけで十分です。

于 2012-04-24T17:49:27.533 に答える