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"/>

これは私がfirebugで見るものです

<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 - 1 行のテキスト フィールド

成分

このスキーマに基づいて、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

次に、この 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 は、これらすべてを 1 行にまとめています。

コンポーネント テンプレート、ページ テンプレート、およびパブリケーション ターゲット

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 ページでは、このブロック全体が 1 行になっています。

ブラウザの 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 とコンテンツを混在させないでください

ただし、1 つの大きな疑問が残ります。一体なぜ、コンテンツのフィールドに JavaScript を入れようとしているのですか? これは、コードからコンテンツを分離するすべてのベスト プラクティスに違反しており、将来のメンテナンスの問題に備えることを意味します (たとえば、メールの送信を開始したい場合はどうすればよいでしょうか?)。

もちろん、分析ソフトウェアによってリンクのクリックを追跡することは有効な要件です (実際、私が覚えている限り、それは Tridion のコンテンツ配信スタックの機能でした)。

ただし、別の方法で実装することをお勧めします。たとえば、そのような各リンクを特定の CSS クラスまたは HTML5 データ属性でマークするだけです。

<a href='...' data-tracking-label='Signup | Holidays' 
              data-tracking-key='optin.holidays' ...

次に、これらのリンクを汎用的に検索する JavaScript を作成し、それを Web サイトに間違いなく既にある通常の JavaScript ファイルに挿入します。

Manoj と Quirijns の回答からのこの質問も参照してください: How to Implement Google Analytics in SDL tridion web sites?

于 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 を指します (例:; 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 に答える