2011-07-12 5 views
2

私はWicketを使用してページをレンダリングする電子商取引を開発しています。メインレイアウトの「ベースページ」があり、「購入いただきありがとうございました」ページにGoogleアナリティクスの電子商取引トラッキングコードを追加したいと考えています。参考として、このようなJSコード:カートおよびチェックアウトのためのWicketを使用してGoogle Analyticsのeコマーストラッキングを生成する

<script type="text/javascript> 
    var _gaq = _gaq || []; 
    _gaq.push(['_setAccount', 'UA-12345678-9']); 
    _gaq.push(['_addTrans', '123', '', '12.56', '', '5.00']); 
    _gaq.push(['_addItem', '123', 'sku-1', 'Product 1', 'Category X', '12.56', '1']); 
    _gaq.push(['_addItem', '123', 'sku-2', 'Product 2', 'Category Y', '13.45', '1']); 
    _gaq.push(['_trackTrans']); 
    (function() { 
    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; 
    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; 
    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); 
    })(); 
</script> 

HTMLコードは簡単でしたが、どのように私は、これは自動改札で動的にJSを生成することができますか?

+0

あなたは_gaq.push(['_ trackPageview'])を呼び出す必要があります。 _setAccountとBEFORE _addTransの後に あなたは_addTransの上に 'function'部分を置くことができます。そして、すべてのページに同じコードを加え、確認ページに数行を加えます。 –

+0

素敵なチップ。私は "機能"はすべての準備の後でなければならないと思った。これは、関数の後の行に "_addTrans"、 "_addItem"、 "_trackTrans"を移動する必要があることを意味します( "_trackPageView"定型文を使用する場合)。これは質問につながります: "push"の内容を読み込むためにAJAXを使うことはできますか? –

+0

これはJSです、あなたはAJAXでそれらを呼び出すことができます。 唯一の制約は、トランザクションを訪問に関連付けるために必要なコンテキストを構築するため、電子商取引シーケンスの1回前にページビューを追跡することです。 –

答えて

5

はい、IHeaderContributorを単純に使用するだけです。 Btw、あなたのウィケットの電子商取引のためのフレームワークを使用していますか?私は多くの運が無ければ、1つか2つを統合しようとしています。

class BasePage extends Page implements IHeaderContributor { 
     public BasePage(String id){ 
       super(id); 
     } 
     @Override 
     public void renderHead(IHeaderResponse response){ 
       //You might want renderOnLoadJavascript.... 
       // Btw, I didn't format your string for java, you need to add quotation 
       // marks or put it as one line. 
       response.renderJavascript("var _gaq = _gaq || []; 
         _gaq.push(['_setAccount', 'UA-12345678-9']); 
         _gaq.push(['_addTrans', '123', '', '12.56', '', '5.00']); 
         _gaq.push(['_addItem', '123', 'sku-1', 'Product 1', 'Category X', '12.56', '1']); 
         _gaq.push(['_addItem', '123', 'sku-2', 'Product 2', 'Category Y', '13.45', '1']); 
         _gaq.push(['_trackTrans']); 
         (function() { 
          var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; 
          ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; 
          var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); 
         })();" 
       ); 
     } 
} 
+0

Nops、フレームワークなし。それはちょうど本当に小さな店です - 約5〜6ページ。そして、私はこのGA統合に "Java"ソリューションを使用することを恐れていました...(私はスクリプトファイルを読み込むためにこの奇妙な機能をGoogleに責めます...:D –

0

私はWicketがjavascript自体を構築するのに助けを与えるとは思わないが、手動でJS文字列を構築してから、<script>タグをLabelコンポーネントとして宣言し、JS文字列をそのモデルまたは使用IHeaderContributorインターフェイス。

+1

WicketにはTextTemplateとその特殊化がいくつかあります。それらを使用して、プレースホルダ(たとえば$ {analyticsAccountId})を使用してテンプレートファイルを作成し、実行時にそれらを置き換えてIHeaderResponseで書き込むことができます。これにより、.javaクラスの文字列(JavaScript)を連結しないようにします。 –

+1

@ martin-gループに対応していますか? – biziclop

関連する問題