2016-10-06 14 views
0

これは混乱を招くものです。ページの詳細を含むデータレイヤーを実装したとします。ページには2つの記事があり、クリックするたびにリダイレクトされます。ユーザーがカードをクリックすると、カード名(h1)の名前がツールに表示されます。データレイヤーを使用せずにこのシナリオを実装しました。 (Looking for custom script in Adobe DTM data element?)。データレイヤーを使用してイベントベースのルールを追跡する

データ層を定義したコードは以下のとおりです。 DTMコンソールで私はデータ要素を作成し、データ層オブジェクトとマッピングしました。カード名は - DDO.pageData.cardnameです。また、イベントベースのルールを作成し、このデータ要素とマッピングします。ここで問題となるのは、1つの記事をクリックするたびに、1つのevarで両方の記事のh1を取っていることです。理想的にはクリックされている記事のみの価値があるはずです。提案してください。

<article class="mu-item"> 
 
    <a href="www.google.com" data-tags="test" target="_blank"> 
 
    <div> 
 
     <h1>This is a test text for tracking</h1> 
 
     <p>This was the day when the South Stand at Old Trafford, the stadium where he played around half of his 758 matches for United, was officially renamed in his honour before his beloved Reds took on Everton in the Barclays Premier League.<br><br> 
 
     </p> 
 
    </div> 
 
    </a> 
 
</article> 
 

 
<article class="mu-item"> 
 
    <a href="www.facebook.com" data-tags="{{displaytag_2}}" target="_blank"> 
 
    <div> 
 
     <h1>This is new card</h1> 
 
     <p>This was the day when the South Stand at Old Trafford.<br><br> 
 
     </p> 
 
    </div> 
 
    </a> 
 
</article> 
 

 
<a href="#" class="link"><span>some text</span></a> 
 

 
<script type="text/javascript"> 
 
DDO = {} // Data Layer Object Created 
 
var pageObj = {}; 
 
var pageDOM = $('.mu-item'); 
 
pageObj.DestinationURL = $(pageDOM).find('a').attr('href'); 
 
pageObj.cardName = $(pageDOM).find('h1').text(); 
 
    
 
DDO.pageData = { 
 
    "pageName": document.title, 
 
    "DestinationURL":pageObj.DestinationURL, 
 
    "cardname":pageObj.cardName 
 
    } 
 
</script> 
 
<script type="text/javascript">_satellite.pageBottom();</script>

+0

の残りの部分の中にあなたのデータ層参照されるデータ要素を使用できますか? –

+1

@MarkStringham、AmitはDOMからDLを読み込むため(アクセスする前に要素が存在することを確認する必要があります)より興味深いのは、データ要素で同じ情報に直接アクセスできるときや、イベントベースルールがクリックされた見出しのテキストコンテンツを返すときに、このようなデータレイヤーを使用する理由です。 –

+0

はい@EikePierstorff thats正しいです、マークの質問に答えるDLの選択の前にDOM要素を読み込む必要があります。実際にはこれは単なるテスト実装で、データレイヤーを使用してh1テキストを取得しようとしています。私はvがDLでそれを行うことができるかどうか疑問に思っていました。ここでのもう一つの質問は、DLを使用する特定のシナリオがあるかどうかです。ショッピングカートやDLを実装すべき他の特定の機能のようなものです。 –

答えて

0

あなたの問題は、複数のメニュー項目や見出しを持っているということです。すべての見出しを持つ配列を作成する必要があります(これは、クリックの正確な入力を得るのが難しくなります)。または、要素のクリック後にデータレイヤーを設定する必要があります。

しかし、私が指摘したように、あなたはこれを必要としない可能性が高いです。 CSSセレクタでイベントベースのクリックルールを実行すると、DTMが自動的に作成するデータ要素が利用できます。これは%this%と呼ばれ、クリックされたDOMノードが含まれています。 %this.textContent%で見出しの中のテキストを取得することができます(見出しにネストされた段落がありますが、これは有効なHTMLではないので、イベントルール設定でイベントをバブルアップする必要があります)。

+0

彼のイベントターゲットが 'article'タグ全体であるため、訪問者が実際に' h1'タグをクリックしない限り( 'article'タグ付き段落テキスト)、'%this.textContent% 'は機能しませんこのシナリオで '%'構文で 'this'を直接使用することは信頼できません –

+0

この1人の男に助けてくれてありがとう。提案は本当に有用かつ明確でした。私はコードを共有したいと思っています。私がしたのは、記事タイトル、リンク先URLな​​どの値を取得する関数を作成し、データレイヤーにマップしたものでした。私のコードを共有したいですか? –

+0

function buildDDO(elm){ var parentDiv = $(elm).parents( "[data-module = adobe]"); DDO = {} //データレイヤオブジェクトの作成 var pageObj = {};pageObj.DestinationURL = $(parentDiv).find( 'a')。attr( 'href');pageObj.cardName = $(parentDiv).find( 'h1')。text();pageObj.tag = $(parentDiv).find( 'a')。attr( 'data-tags'); DDO.pageData = { "pageName":ドキュメント。タイトル、 "DestinationURL":pageObj.DestinationURL、 "cardname":pageObj.cardName、 "タグ":pageObj.tag }} –

2

他にも言及したように、h1の値が適切かどうかを知る唯一の方法は、クリックイベント中にキャプチャすることです。

私はcomments of your other question

で述べたように、[..] DTMは、現在のconfig領域に作成されたデータ要素

thisへの参照を渡しません。この周りに方法はありません。 でなければなりません。私はあなたの他の質問(ルール条件内のカスタムスクリプト)であなたを示したので、クリックイベント中にそれをキャプチャする必要があります。他の人が触れたように、データレイヤーを通過させることは、技術的には不要なステップです。実際にそれをすることに長所と短所がありますが、それは別の議論です。

あなたがそれを行うと判断されたと仮定すると...>データ要素ルール

移動し、は新しいデータ要素の作成]をクリックします。

名前あなたの使用する規約に従ったデータ要素。データレイヤでは、個人的にはデータレイヤの完全なパス(例: "DDO.pageData.cardName"

の場合は、「JSオブジェクト」を選択します。

パスのために、データ要素を保存するために完全なパスDDO.pageData.cardName

クリック保存データ要素を置きます。

enter image description here

次に、あなたのイベントベースのルールに行きます。 イベントタイプ(クリック)、要素タグまたはセレクタ(article.mu-item)

ルール条件では、カスタムjsコードボックスを追加するには、「データ>カスタム」を選択します。

ここでも、thisに基づいて情報を取得する必要があります。しかし、_satellite.setVar()を使用してオンザフライデータ要素を作成する代わりに、その値をデータレイヤーにプッシュします。

例:

var articleTitle = $(this).find('h1').text()||''; 
window.DDO 
&& 
window.DDO.pageData 
&& 
(window.DDO.pageData.cardName=articleTitle); 
return true; 

注:私はh1テキストを取得するjQueryの構文を使用しています。あなたの以前の質問に基づいて、その時に問題が発生していたので、私はあなたにvanilla jsバージョンを示しました。あなたがそれを整理したかどうかは分かりませんが、原則を得ることができます。 DLは、ページ上に低く配置されるのはなぜ

今すぐあなたのルールのフィールド%DDO.pageData.cardName%

関連する問題