私はあなたの問題を再現しようとしましたが、私にとってはうまくいくようです。そこで、問題の解決に役立つことを願って、私が持っているものについて説明します。
スキーマ
これらのフィールドを持つスキーマがあります:
- LinkedComponent - コンポーネント リンク フィールド
- ImageToDisplay - マルチメディア コンポーネント リンク フィールド
- 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="<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 ページでは、このブロック全体が 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?