Tridion 2009 SP1:Dreamweaver 模板错误:转换网址路径() 无法解码 URL:无效转义



我正在尝试在 Dreamweaver 模板中使用获取标签 TBB,该模板解析%%LabelKey%%等表达式,并将其替换为存储在出版物元数据中的组件中的值。

我正在尝试使用标签来存储绝对 URL(例如 http://www.example.com),但在尝试运行模板时在模板生成器中收到以下内容

错误:转换网址路径() 无法解码网址:无效转义

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它才会尝试解决它.

任何帮助表示赞赏。

全栈跟踪:

引擎:

引擎中的错误。转换错误:转换URLToPath() 无法 解码网址:在以下位置无效转义 Tridion.ContentManager.Session.GetTcmUri(String uri) at Tridion.ContentManager.Session.GetObject(String uri) at Tridion.ContentManager.Session.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.ExtractBinariesFromHtmlTemplate.ResolveWebDavUrl(String urlToResolve, String webDavBaseUrl, Engine engine) at Tridion.ContentManager.Templating.Templates.ExtractBinariesFromHtmlTemplate.ResolveTemplateBinaries(Engine 引擎, 包包, TcmUri baseItemTcmUri, ExtractBinariesContentWrapper contentWrapper) at Tridion.ContentManager.Templating.Templates.ExtractBinariesFromHtmlTemplate.Transform(Engine 引擎,包包)在 Tridion.ContentManager.Templating.Dreamweaver.DreamweaverMediator.RegisterTemplateBinaries(Package package, String baseItemTcmUri, String templateString) at Tridion.ContentManager.Templating.Dreamweaver.DreamweaverMediator.Transform(Engine 引擎, 模板模板到转换, 包包) at Tridion.ContentManager.Templating.Engine.ExecuteTemplate(Template 模板,包包)在 Tridion.ContentManager.Templating.Engine.InvokeTemplate(Package 包, 模板调用模板调用, 模板模板)
在 Tridion.ContentManager.Templating.Compound.CompoundTemplateMediator.Transform(Engine 引擎, 模板模板到转换, 包包) at Tridion.ContentManager.Templating.Engine.ExecuteTemplate(Template 模板,包包)在 Tridion.ContentManager.Templating.Engine.InvokeTemplate(Package 包, 模板调用模板调用, 模板模板)
at Tridion.ContentManager.Templating.Engine.TransformPackage(Template 模板,包包)在 Tridion.ContentManager.Templating.Engine.TransformItem(Template 模板,IdentifiableObject itemToRender) at Tridion.ContentManager.Templating.Debugging.DebuggingEngine.Run()
at Tridion.ContentManager.Templating.Debugging.DebugSession.Run()

当您上传 DWT 时,Tridion 会尝试将 DWT 中的<img src=...映射到多媒体组件。需要执行此步骤来确保 DWT 在蓝图(需要将值存储为 TCM URI)中正常工作,并且始终可在 Dreamweaver 中查看(需要文件路径)。

要执行此映射,Tridion 采用任何srchref属性(以及任何 CSS 导入或url()构造)中的路径,并在该位置相对于 DWT 查找多媒体组件。

因此,如果存储在 /Building Blocks/System/Designs/My Page Design 下的 DWT 并且它包含:

<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 中使用备用转义序列,并编写一个小的后处理 TBB,在执行 DWT 后将该转义序列转换回 %%。在您的情况下,只需选择一个不冲突的转义语法就足够了。

@Puf给出的答案解释了为什么代码失败得很好。作为替代方法,可以考虑编写一个 C# TBB,将 StringItems 插入到名为"LogoLink"和"LogoLinkTitle"的包中,其中包含您的 URL 和文本。然后,可以在管道中的 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 解决方案。

相关内容

  • 没有找到相关文章

最新更新