我尝试重现您的问题,但对我来说似乎一切正常。因此,我将描述我所拥有的内容,希望它可以帮助您解决问题:
架构
我有一个包含这些字段的架构:
- LinkedComponent - 组件链接字段
- ImageToDisplay - 多媒体组件链接字段
- OnClick - 单行文本字段
零件
我基于此架构创建了一个组件,该架构链接到我的 Tridion 实例中的一些其他组件和图像,并且在 OnClick 字段中有您的脚本。
这是该组件的 XML:
<Content xmlns="uuid:9e69dd45-f249-42a5-9f9a-5f68478b106f">
<LinkedComponent xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple"
xlink:href="tcm:1-91" xlink:title="Xbox360Kinect"></LinkedComponent>
<ImageToDisplay xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple"
xlink:href="tcm:1-90" xlink:title="Kinect"></ImageToDisplay>
<OnClick>var s=s_gi(s_account);s.linkTrackVars='eVar7';
s.eVar7='optin.holidays';s.tl(this,'o',Email Signup | Holidays')</OnClick>
</Content>
请注意,我只是在值中添加了一个换行符OnClick
以提高可读性。原始 XML 中不存在此换行符。
载重吨
接下来我创建这个 DWT 来输出链接:
<a title="Holidays" tridion:href="@@LinkedComponent@@" onclick="@@OnClick@@">
<img title="btn_email_sign_up" alt="btn_email_sign_up" src="@@ImageToDisplay@@"/>
</a>
再一次,添加上述片段中的任何换行符只是为了便于阅读。我的 Tridion 系统中的 DWT 将所有这些都集中在一行上。
组件模板、页面模板和发布目标
我在设置为输出 HTML 片段的组件模板中使用此 DWT。除了 DWT,此组件模板仅包含默认完成操作(当然在 DWT 之后)。
我使用的页面模板是常规默认页面模板的副本,我只是将文件扩展名更改为aspx
.
我的发布目标的目标语言设置为 ASP.NET。
发布的 ASPX
所有这些步骤都会在我发布的 ASPX 页面中生成以下片段:
<tridion:ComponentLink runat="server" PageURI="tcm:1-514-64" ComponentURI="tcm:1-91"
TemplateURI="tcm:0-0-0" AddAnchor="false" LinkText="<img
src="/GameShop/Images/Kinect.jpg" title="btn_email_sign_up"
alt="btn_email_sign_up"/>" LinkAttributes=" title="Holidays"
onclick="var s=s_gi(s_account);s.linkTrackVars='eVar7';s.eVar7='optin.holidays';s.tl(this,'o',Email Signup | Holidays')""
TextOnFail="true"/>
在这里,我也添加了一些换行符以稍微提高可读性。在原始的 ASPX 页面中,整个块位于一行中。
浏览器中的 HTML
最后,这会在浏览器中生成以下 HTML:
<a href="/GameShop/Xbox360/Accessories/Xbox360Kinect.aspx" title="Holidays"
onclick="var s=s_gi(s_account);s.linkTrackVars='eVar7';s.eVar7='optin.holidays';s.tl(this,'o',Email Signup | Holidays')">
<img src="/GameShop/Images/Kinect.jpg" title="btn_email_sign_up"
alt="btn_email_sign_up">
</a>
我不确定onclick
脚本是否被触发,但我认为这不是您最初的问题。尽管在各个层都进行了大量的转义,但脚本最终还是以 HTML 格式结束 - 至少在我看来。
不要混合 JavaScript 和内容
但是,这留下了一个大问题:您到底为什么要尝试将 JavaScript 放在 Content 字段中?这违反了将内容与代码分离的所有最佳实践,并且仅意味着您要为将来的维护问题做好准备(例如,如果您想开始发送电子邮件怎么办?)。
由分析软件跟踪点击链接当然是一个有效的要求(事实上,从我记事起,它就一直是 Tridion 的 Content Delivery 堆栈的一个功能)。
但我建议以不同的方式实现它,例如,只需用特定的 CSS 类或 HTML5 数据属性标记每个此类链接:
<a href='...' data-tracking-label='Signup | Holidays'
data-tracking-key='optin.holidays' ...
然后,您可以使 JavaScript 找到这些通用链接,并将其放入您的网站无疑已经拥有的常规 JavaScript 文件中。
另请参阅 Manoj 和 Quirijns 的这个问题的回答:如何在 SDL tridion 网站中实施 Google Analytics?