Obecnie 136 forumowiczów jest online
Obecnie 136 forumowiczów jest online
Porozmawiaj na temat implementacji kodu śledzenia w wielu domenach, ustaw śledzenie zdarzeń. Dowiedz się, czym jest Universal Analytics i jak korzystać z Menedżera tagów Google.
Poprowadź mnie
star_border
Odpowiedz

Wyciąganie informacje z tabeli znaków w Warstwie danych

Student ✭

Przeceniłem chyba jednak swoje możliwości :/
Czy mogę jeszcze prosić o niemałą pomoc? Założyłem nowy wątek, żeby zachować "czystość" w opisywanych problemach i by inni mogli czasem znaleźć odpowiednie rozwiązanie - a nóż, może ktoś ma podobny problem do mojego. Mianowice.  

Tak wygląda moja warstwa danych:
datalayer.jpg

 

I mam taki oto kod:

 

<!-- Start of Checkout Page Mastertag Code: -->
<div class="zx_4B31C5666B1428B07807 zx_mediaslot">
    <script type="text/javascript">
        window._zx = window._zx || [];
        window._zx.push({"id":"4B31C5666B1428B07807"});
        (function(d) {
            var s = d.createElement("script"); s.async = true;
            s.src=(d.location.protocol == "https:" ? "https:" : "http:") + "//static.zanox.com/scripts/zanox.js";
            var a = d.getElementsByTagName("script")[0]; a.parentNode.insertBefore(s, a);
        }(document));
    </script>
</div>
<!-- End of Checkout Page Mastertag Code -->

<script type="text/javascript">
var zx_products = [
{
"identifier": "{{id}}",
"amount": "{{price}}",
"currency": "PLN",
"quantity": "{{quantity}}"
},
{
// next product
}
];
var zx_transaction = "{{numberId}}";
var zx_total_amount = "{{bruttovalue}}";
var zx_total_currency = "PLN";
</script>

 

Głównie chodzi o ten drugi człon, czyli to co jest po 

<!-- End of Checkout Page Mastertag Code -->

Wartość dla productsInBasket w warstwie danych jest tablicą obiektów, co już wiem z poprzedniego wątku, który tutaj zakładałem, odnośnie implementacji kodu dla CENEO. Tam jednak skrypt musiał być przebudowany, bo produkty musiały być oddzielone w jednej linii hasztagami. 

W kodzie celowo zostawiłem {{id}} {price}} i {{quantity}}, żeby było wiadomo, do czego w warstwie danych powinno się to odnosić. Rozumiem, że trzeba by było ten kod w jakiś sposób przerobić tak, aby wyciągnął z tej tablicy obiektów warstwy danych odpowiednie wartości i podstawił w odpowiednie miejsce w kodzie? Próbowałem wykorzystać informacje z wątku z CENEO ale w tamtym kodzie za wiele się dzieje i nie jestem wstanie z moją noobowatą wiedzą odseparować od siebie ważnych rzeczy. Trzeba było zachować również to, by w przypadku występowaniu kilku produktów (tak jak to jest np w przedstawionej wyżej warstwie danych) zachować // next produkt, czyli aby każdy taki bloczek z danymi wstawiał się jedne pod drugim, zaciągając odpowiednie dane o produktach znajdujących się w koszyku z warstwy danych. 

Odpowiedź eksperta 1verified_user

Zaakceptowane rozwiązania
Zaakceptowane rozwiązanie.
Rozwiązanie
Zaakceptowane przez autora tematu: Michał U
października 2016

Dot.: Wyciąganie informacje z tabeli znaków w Warstwie danych

Wschodząca Gwiazda

 

<script type="text/javascript">
var prod =  {{productsInBasket}};
var zx_products = [];
for(var i=0; i<prod.length; i++){
  var p=prod[i];
  zx_products.push({'identifier': p.id, 'amount': p.price , 'currency': 'PLN', 'quantity': p.quantity});
}

var zx_transaction = "{{numberId}}";
var zx_total_amount = "{{bruttovalue}}";
var zx_total_currency = "PLN";
</script>

Cała operacja ogranicza się do przepisania tablicy {{productsInBasket}} do tablicy zx_products, tylko zmieniając nazwy kluczy i dodając dodatkowo 'currency'.

Może da się to zrobić prościej, ale powyższe powinno działać.

 

Tomasz Ciepłucha

Wyświetl rozwiązanie w oryginalnym poście


Wszystkie odpowiedzi
Zaakceptowane rozwiązanie.
Rozwiązanie
Zaakceptowane przez autora tematu: Michał U
października 2016

Dot.: Wyciąganie informacje z tabeli znaków w Warstwie danych

Wschodząca Gwiazda

 

<script type="text/javascript">
var prod =  {{productsInBasket}};
var zx_products = [];
for(var i=0; i<prod.length; i++){
  var p=prod[i];
  zx_products.push({'identifier': p.id, 'amount': p.price , 'currency': 'PLN', 'quantity': p.quantity});
}

var zx_transaction = "{{numberId}}";
var zx_total_amount = "{{bruttovalue}}";
var zx_total_currency = "PLN";
</script>

Cała operacja ogranicza się do przepisania tablicy {{productsInBasket}} do tablicy zx_products, tylko zmieniając nazwy kluczy i dodając dodatkowo 'currency'.

Może da się to zrobić prościej, ale powyższe powinno działać.

 

Tomasz Ciepłucha

Dot.: Wyciąganie informacje z tabeli znaków w Warstwie danych

Student ✭
Dzięki bardzo! Działa!

Mam jeszcze na koniec szybkie pytanie. Jak zmusić do działania TAG, który uruchamiałby się na WSZYSTKICH STRONACH, POZA TYMI, w którym są uruchamiane pozostałe (wybrane) TAGI? Niestety, wrzucenie po prostu taga i oznaczenie wyjątkiem reguł, które tagi uruchamiają nic nie daje, TAG i tak się uruchamia. Jak to poprawnie ustawić?

Dot.: Wyciąganie informacje z tabeli znaków w Warstwie danych

Wschodząca Gwiazda
Teoretycznie możesz ustawić uruchomienie tagu na wszystkich stronach i blokować jego uruchomienie regułami, które uruchamiają inne tagi.
Jak konfigurujesz tag i wybierasz regułę, która ma ten tag uruchamiać to możesz określić także jakie reguły mają go blokować - "DODAJ WYJĄTEK".
Ale żeby to działało to te reguła blokująca musi być też typu "wyświetlenie strony".
Tomasz Ciepłucha

Dot.: Wyciąganie informacje z tabeli znaków w Warstwie danych

Student ✭
No właśnie tak robiłem na początku ale teraz potwierdza się to co myślałem. Czyli jeżeli reguły uruchamiające inne tagi egzystują jako zdarzenie niestandardowe, to tego nie obejdę?

Dot.: Wyciąganie informacje z tabeli znaków w Warstwie danych

Wschodząca Gwiazda
Niestety nie obejdziesz.
Tomasz Ciepłucha

Dot.: Wyciąganie informacje z tabeli znaków w Warstwie danych

[ Edytowane ]
Student ✭

No dobra. To taki przykład.

Mam stronę www.domena.pl

Wchodząc do jakieś podstrony z menu adres wygląda tak www.domena.pl/człon1_człon2_tutajjakieśpierdoły-102.html
Wchodząc do pozostałych stron z menu człon1 pozostaje tak samo ale zmieniaja się dalsze elementy.

W GTM tworzę regułę uruchamiania dla "wyświetlenie strony", zaznaczam "niektóre wyświetlenia strony", wpisuję Page URL -> zawiera -> człon1 . Regułę tą nazywam sobie np RegMenu
Przechodzę do taga, wrzucam regułe Wszystkie strony i dodaję wyjątek RegMenu. Mimo wszystko tag odpala się na stronach gdzie w url występuje człon1

Próbowałem ustawić URL, Page URL, PagePath ... i nic. Co zatem robię źlę?

 

EDYTA:

 

Dobra, robiłem źle, działa... ALE! ...
Page Url -> zawiera -> człon 1

Załóżmy, że mamy stronę gdzie linki mają na początku człon1, człon2, człon3, człon4 oraz jakieś tam jeszcze inne randomowe. I tearz, chcę by tag uruchamiał na wszystkich tych randomowach i tylko na człon 2 ale na człon1, człon3, człon4 już nie. Sprawdziłem właśnie i wg tego co pisałem powyżej, w jednej regule nie mogę zawrzeć  

Page Url -> zawiera -> człon 1
Page Url -> zawiera -> człon 3
Page Url -> zawiera -> człon 4

 

Bo z tego co zdążyłem zauważyć GTM nie traktuje tego jako LUB tylko wszytkie 3 warunki musza być spełnione jednoczesnie? Zatem do każdego członu musze zrobić osobą regułę i ustawić ją jako wyjątki?

Wyciąganie informacje z tabeli znaków w Warstwie danych

Student ✭ ✭ ✭

 

GTM traktuje wyjątki jako LUB. Działa to bez problemu również z użyciem Wszystkie strony.

 

Tym samym ustawienie reguły dla tagu:

Wszystkie strony

Wyjątki:

Page Url -> zawiera -> człon1

Page Url -> zawiera -> człon3

Page Url -> zawiera -> człon4

 

spowoduje, że tag wykona się na każdej podstronie, która w adresie URL nie będzie zawierała któregoś z powyższych wyrażeń.

 

Ponadto lepsze tu będzie PagePath.

Wyciąganie informacje z tabeli znaków w Warstwie danych

Wschodząca Gwiazda

Zwróć uwagę, że jak tworzysz regułę to nad warunkami masz na szaro taki tekst:

"Uruchom tę regułę, gdy nastąpi zdarzenie i wszystkie te warunki zostaną spełnione".

W związku z tym nie możesz stworzyć reguły dla 3 oddzielnych stron dodając 3 warunki, bo się one wykluczają.

 

Musisz więc stworzyć 3 oddzielne reguły lub prostszym rozwiązaniem jest skorzystanie z jednej reguły z jednym warunkiem wykorzystującym wyrażenie regularne jako sposób dopasowania.

Czyli jeśli chcesz dopasować 3 różne adresy robisz to tak:

Page Path    dopasowanie do wyrażenia regularnego    adres1|adres2|adres3

 

 

 

 

 

Tomasz Ciepłucha

Dot.: Wyciąganie informacje z tabeli znaków w Warstwie danych

Student ✭

Nie chce tworzyć nowego wątku, bo to w sumie podoba sprawa, ale nie potrafię sobie poradzić znowu z wyciąganiem danych z tabeli. Mam taką warstwę danych:

wd.jpg

 

I taki kod: 

<iframe src="//creativecdn.com/tags?id=pr_EMZ2btWl7XTQjsqPSEt5_listing_{ID},{ID},{ID}" width="1" height="1" scrolling="no" frameBorder="0"
style="display: none;"></iframe>

 

I teraz, jak lub co dopisać/zmienić w tym kodzie tak, aby pod {ID} wstawiało się to co jest z warstwy .prodId? Dodam tylko, że wynik nie ma wyglądać przykładowo {21979},{32038},{32033} tylko 21979,32038,32033

 

 

 

 

Dot.: Wyciąganie informacje z tabeli znaków w Warstwie danych

Student ✭ ✭ ✭

 

<script type="text/javascript">
var prod =  {{products}};
var cdn_ids = "";
for(var i=0; i<prod.length; i++)
  cdn_ids += prod[i].ProdId + ",";
cdn_ids = cdn_ids.substring(0, cdn_ids.length - 1);
</script>
<iframe src="//creativecdn.com/tags?id=pr_EMZ2btWl7XTQjsqPSEt5_listing_{{cdn_ids}}" width="1" height="1" scrolling="no" frameBorder="0" style="display: none;"></iframe>

Przed dodaniem będzie wymagane dodanie zmiennej globalnej javascript o nazwie cdn_ids.

 

Dot.: Wyciąganie informacje z tabeli znaków w Warstwie danych

Wschodząca Gwiazda

W kodzie Piotra wkradł się mały błąd, ponieważ atrybuty prodId są pisane z małych liter.

Czyli powinno być:

cdn_ids += prod[i].prodId + ",";

 

Ponadto, żeby całość zadziałała trzeba dodatkowo stworzyć zmienną warstwy danych o nazwie products, której przypiszemy wartość products (chyba, że już masz tą zmienną).

Tag HTML musi być uruchamiany zdarzeniem niestandardowym categoryPage, trzeba więc stworzyć odpowiednią regułę.

Jak już mamy w GTM skonfigurowaną zmienną warstwy danych "products" oraz regułę "categoryPage" to możemy zrobić resztę.

 

Natomiast, żeby nie tworzyć dodatkowych zmiennych globalnych (cdn_ids) można dynamicznie przypisać wartość źródła do ramki.

Cały kod wówczas będzie wyglądać tak:

 

<iframe id="cdn_iframe" width="1" height="1" scrolling="no" frameBorder="0" style="display: none;"></iframe>
<script type="text/javascript">
var prod =  {{products}};
var cdn_ids = "";
for(var i=0; i<prod.length; i++)
  cdn_ids += prod[i].prodId + ",";
cdn_ids = cdn_ids.substring(0, cdn_ids.length - 1);

document.getElementById('cdn_iframe').src="//creativecdn.com/tags?id=pr_EMZ2btWl7XTQjsqPSEt5_listing_"+cdn_ids;
</script>
Tomasz Ciepłucha

Dot.: Wyciąganie informacje z tabeli znaków w Warstwie danych

[ Edytowane ]
Student ✭

Panowie, dzięki serdeczne. 

 

Pozwoliłem sobie na wykorzystanie rozwiązanie Tomasza, bez konieczności tworzenia dodatkowej zmiennej, pozostałe warunki spełniałem. Sprawdzając w konsoli widzę, że dane podstawiają się dobrze, także powinno działać. Idąc analogicznie z kodami powstawiałem w pozostałe, które mają za zadanie przekazywać z innych miejsc inne informacje. Też widze, że w konsoli podstawiają się poprawnie. Ale mam zagwozdkę jeszcze z jednym. Mianowicie taki kod:

<iframe src="//creativecdn.com/tags?id=pr_EMZ2btWl7XTQjsqPSEt5_orderstatus2_{VALUE}_{ORDERID}_{ID},{ID},{ID}&amp;cd=default" width="1"
height="1" scrolling="no" frameBorder="0" style="display: none;"></iframe>

 

 

jak widzimy po 

{ID},{ID},{ID}

mamy jeszcze taki ciąg znaków

&amp;cd=default

 

Przerobiłem kody wg analogii a więc jest:

 

<iframe id="cdn_iframe" width="1" height="1" scrolling="no" frameBorder="0" style="display: none;"></iframe>
<script type="text/javascript">
var prod =  {{transactionPage}};
var cdn_ids = "";
for(var i=0; i<prod.length; i++)
  cdn_ids += prod[i].productsInBasket + ",";
cdn_ids = cdn_ids.substring(0, cdn_ids.length - 1);

document.getElementById('cdn_iframe').src="//creativecdn.com/tags?id=pr_EMZ2btWl7XTQjsqPSEt5_orderstatus2_{{netvalue}}_{{numberId}}_"+cdn_ids;
</script>

No ale ... nie wiem co i jak wstawić by za 

 

+cdn_ids

 

wstawiało się jeszcze wspomniane 

&amp;cd=default

 

Czy wystarczy, że dopisałbym do kodu kolejną linijkę typu:

var cdn_code = "&amp;cd=default";

i na końcu podstawił 

+cdn_ids+cdn_code

 ?

Dot.: Wyciąganie informacje z tabeli znaków w Warstwie danych

Wschodząca Gwiazda

To co napisałeś oczywiście zadziała, ale nie musisz tworzyć kolejnych zmiennych.

Możesz po prostu dodać na końcu kolejny łańcuch znaków:

document.getElementById('cdn_iframe').src="//creativecdn.com/tags?id=pr_EMZ2btWl7XTQjsqPSEt5_orderstatus2_{{netvalue}}_{{numberId}}_" + cdn_ids + "&amp;cd=default";
Tomasz Ciepłucha

Wyciąganie informacje z tabeli znaków w Warstwie danych

Student ✭

Wybaczcie, że odpisuje dopiero teraz. Pewne sprawy rodzinne zatrzymały mnie na dłużej. Wszystko działa, przekazuje się jak należy. Bardzo, bardzo, bardzo dziękuję za Waszą pomoc chłopaki.