3

这是我尝试修改和发布的组件中的代码。

这是我要在组件中超链接的 onClick 上添加的代码。

Onclick=“var s=s_gi(s_account);s.linkTrackVars='eVar7';s.eVar7='optin.holidays';s.tl(this,'o',Email Signup | Holidays')”

一旦我尝试添加单引号,渲染就会变得混乱。我尝试用 /'eVar7/'、/”eVar7/”、“eVar7”和“eVar7”替换“eVar7”,但它们都不起作用。所以我尝试了这个。

Onclick=“var s=s_gi(s_account);s.linkTrackVars=eVar7;s.eVar7=optin.holidays;s.tl(this,o,Email Signup | Holidays)” 

并且链接呈现但它不起作用(没有将值发送到Omniture)

所以我回到基础,然后尝试添加这段代码

<a title="Holidays" href="tcm:8-21734" onclick="alert(\'here\');"><img title="btn_email_sign_up" alt="btn_email_sign_up" src="tcm:8-23980"/></a>

这就是我在 .aspx 中得到的

<tridion:ComponentLink runat="server" PageURI="tcm:13-31055-64" ComponentURI="tcm:13-21734" TemplateURI="tcm:0-0-0" AddAnchor="false" LinkText="&lt;img src=&#39;/Images/btn_email_sign_up_tcm13-23980.jpg&#39; /&gt;" LinkAttributes="onclick=&#39;alert(&#92;&#39;here&#92;&#39;);&#39;" TextOnFail="true"/>

这是我在萤火虫中看到的

<a here\');'="" onclick="alert(\" href="/Email-Signup/Holidays.aspx"><img src="/Images/btn_email_sign_up_tcm13-23980.jpg"></a>

请让我知道是否有人可以提供帮助,以及您是否需要呈现此组件的 TBB。

提前致谢

4

2 回答 2

3

我尝试重现您的问题,但对我来说似乎一切正常。因此,我将描述我所拥有的内容,希望它可以帮助您解决问题:

架构

我有一个包含这些字段的架构:

  1. LinkedComponent - 组件链接字段
  2. ImageToDisplay - 多媒体组件链接字段
  3. 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="&lt;img 
   src=&#34;/GameShop/Images/Kinect.jpg&#34;  title=&#34;btn_email_sign_up&#34; 
   alt=&#34;btn_email_sign_up&#34;/&gt;" LinkAttributes=" title=&#34;Holidays&#34; 
   onclick=&#34;var s=s_gi(s_account);s.linkTrackVars=&#39;eVar7&#39;;s.eVar7=&#39;optin.holidays&#39;;s.tl(this,&#39;o&#39;,Email Signup | Holidays&#39;)&#34;" 
   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?

于 2012-08-23T15:07:54.580 回答
1

试着改成这个。tridion:href 解析组件链接,img src 发布图像。

<a title="Holidays" tridion:href="tcm:8-21734" onclick="alert('here');"><img title="btn_email_sign_up" alt="btn_email_sign_up" src="tcm:8-23980"/></a>

对于 CDA 上的链接解析,组件“tcm:8-21734”需要在页面上并且需要发布页面。当链接解析成功时,链接将指向页面 url (eg; structuregroupfolderpath/filename.html)

这是关于 Tridion Link Resolving 的文档。

http://sdllivecontent.sdl.com/LiveContent/content/en-US/SDL_Tridion_2011_SPONE/concept_05ACF7173DCA4790A458CDE2BA33E2CC

于 2012-08-21T22:00:01.767 回答