2016-10-06 2 views
0

Dies ist etwas verwirrend. Angenommen, ich habe eine Datenschicht mit Seitendetails implementiert. Die Seite hat 2 Artikel, beide werden bei jedem Klick umgeleitet. Angenommen, das Tracking läuft so ab. Sobald der Benutzer auf die Karte klickt, wird der Name des Namens der Karte (h1) im Tool angezeigt. Ich habe dieses Szenario implementiert, ohne Datenebene zu verwenden. (Looking for custom script in Adobe DTM data element?).Verwenden der Datenschicht zum Verfolgen der ereignisbasierten Regel

Der Code ist unten erwähnt, wo ich die Datenschicht definiert habe. In der DTM-Konsole habe ich Datenelemente erstellt und mit dem DataLayer-Objekt verknüpft. für den Kartennamen - DDO.pageData.cardname. Außerdem wurde eine ereignisbasierte Regel erstellt und mit diesem Datenelement verknüpft. Problem hier ist, wenn ich auf einen Artikel klicke, nimmt es h1 beider Artikel in einem einzelnen evar. Idealerweise sollte NUR der Artikel, auf den geklickt wird, den Wert haben. Bitte vorschlagen.

<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

Warum ist die DL so niedrig auf der Seite platziert? –

+1

@MarkStringham, weil Amit den DL vom DOM aus füllt (also muss er sicherstellen, dass die Elemente vorhanden sind, bevor er auf sie zugreift). Die interessantere Frage ist, warum Sie überhaupt einen solchen Datenlayer verwenden sollten, wenn Sie auf dieselben Informationen direkt in Ihren Datenelementen zugreifen können und wenn eine Ereignisbasisregel den Textinhalt einer geklickten Überschrift bereits zurückgibt. –

+0

Ja @EikePierstorff das ist korrekt, das DOM-Element muss geladen werden, bevor DL ​​auswählt, welche Antworten Mark Frage. Für Sie ist dies eigentlich nur eine Testimplementierung, bei der ich versuche, den h1-Text unter Verwendung der Datenschicht zu erhalten. Natürlich können wir diesen Zweck direkt wie erwähnt erfüllen, ich habe mich nur gefragt, ob v das immer noch mit einem DL machen kann. Eine andere Frage hier, gibt es bestimmte Szenarien, DL zu verwenden. Ich meine, es ist wie wenn es ein Einkaufswagen ist, oder irgendeine andere spezifische Funktion, wo wir DL implementieren sollten. –

Antwort

0

Ihr Problem ist, dass Sie mehrere Menüpunkte und Überschriften haben. Sie müssten entweder ein Array mit allen Überschriften erstellen (was den richtigen Eintrag für einen Klick erschweren würde) oder den DataLayer nur nach einem Klick auf das Element auffüllen, so dass es immer die Daten für das ausgewählte Element enthält.

Aber wie ich darauf hinwies, gibt es eine gute Chance, dass Sie das nicht brauchen. Wenn Sie eine ereignisbasierte Klickregel mit einem CSS-Selektor verwenden, steht Ihnen ein Datenelement zur Verfügung, das vom DTM automatisch erstellt wird. Es heißt %this% und enthält den angeklickten DOM-Knoten. Sie sollten den Text innerhalb der Überschrift mit %this.textContent% erhalten können (Sie haben einen verschachtelten Absatz in Ihrer Überschrift, von dem ich nicht sicher bin, ob er ein gültiger HTML-Code ist. Daher müssen Sie zulassen, dass das Ereignis in der Ereignisregelkonfiguration eingeblendet wird).

+0

da sein Event-Ziel das gesamte 'article'-Tag ist, funktioniert'% this.textContent %' nicht, es sei denn, der Besucher klickt tatsächlich auf das 'h1'-Tag (vs. zB Absatztext mit dem' article'-Tag) es ist nicht zuverlässig, 'this' direkt in'% 'Syntax in diesem Szenario zu verwenden –

+0

Danke für die Hilfe zu diesem einen Typ. Die Vorschläge waren sehr hilfreich und klar. Ich möchte nur den Code teilen und wie ich das gemacht habe. Was ich getan habe, war, dass ich eine Funktion erstellte, um Werte wie Artikeltitel, Ziel-URL usw. und die mit meiner Datenschicht gemappten Daten zu erhalten. Ich möchte meinen Code teilen –

+0

Funktion buildDDO (Ulme) { var parentDiv = $ (elm) .parents ("[datenmodul = adobe]"); DDO = {} // Datenschichtobjekt erstellt var pageObj = {}; pageObj.DestinationURL = $ (parentDiv) .find ('a'). Attr ('href'); pageObj.cardName = $ (parentDiv) .find ('h1'). Text(); pageObj.tag = $ (parentDiv) .find ('a'). Attr ('Daten-Tags'); DDO.pageData = { "Seitenname": Dokument.Titel, "destinationURL": pageObj.DestinationURL, "Kartenname": pageObj.cardName, "Tags": pageObj.tag } } –

2

Wie andere bereits erwähnt haben, ist die einzige Möglichkeit zu ermitteln, welcher Wert h1 relevant ist, es während des click-Ereignisses zu erfassen.

Wie ich in der comments of your other question erwähnt

[..] DTM derzeit keinen Hinweis auf this auf Datenelemente in der Config-Bereich erstellt passieren

Es gibt keinen Weg, um dieses. Sie müssen erfassen Sie es während des Click-Ereignisses, wie ich Ihnen auf Ihre andere Frage zeigte (benutzerdefiniertes Skript innerhalb einer Regel-Bedingung). Wie andere bereits erwähnt haben, ist es technisch unnötig, sie durch Ihre Datenschicht zu führen. Es gibt Vor- und Nachteile, es tatsächlich zu tun, aber das ist eine andere Diskussion.

Sie sind Angenommen, entschlossen, es zu tun ...

Zum Regeln>Datenelemente, und klicken Sie auf Neue Datenelement erstellen.

Name Ihr Datenelement gemäß der Konvention, die Sie verwenden. Für Datenschichten möchte ich persönlich den vollständigen Datenschichtpfad nennen, z. "DDO.pageData.cardName".

Wählen Sie für Typ "JS Object".

Für Pfad, setzen Sie den vollständigen Pfad DDO.pageData.cardName

Klicken Sie Save Data Element das Datenelement zu speichern.

enter image description here

Als nächstes gehen Sie zu Ihrem Ereignis Basierend Regel. Es sollte immer noch Ihr Ereignistyp (klick) und Element Tag oder Selector (article.mu-item) haben.

Wählen Sie unter Regelbedingungen "Daten> Benutzerdefiniert" aus, um eine benutzerdefinierte JS-Code-Box hinzuzufügen.

Hier müssen Sie noch die Informationen basierend auf this greifen. Aber anstatt _satellite.setVar() zu verwenden, um ein fliegendes Datenelement zu erstellen, werden Sie stattdessen den Wert auf Ihre Datenebene schieben.

Beispiel:

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

Hinweis: Ich bin mit jQuery Syntax den h1 Text zu erhalten. Aufgrund Ihrer vorherigen Frage hatten Sie zu der Zeit Probleme damit, also habe ich Ihnen die Version von Vanille js gezeigt. Nicht sicher, ob du das aussortiert hast oder nicht, aber du bekommst das Prinzip.

Jetzt können Sie Ihre Datenschicht referenzierte Datenelement innerhalb des Restes der Regel der Felder verwenden %DDO.pageData.cardName%

Verwandte Themen