Obecnie 197 forumowiczów jest online
Obecnie 197 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

Błędnie odczytywany kod JS

Student ✭

Witam,

 

Kiedyś za pomocą tego forum udało się rozwiązać problem z kodem prowizyjnym dla CENEO. Mam nadzieję, że teraz również znajdę tutaj pomocną dłoń dobrych dusz Emotikon: Szczęśliwy.

 

Mam taki oto kod: 

a_g_f_1.jpg

 

transtactionID przyjmuje formę np test@wp.pl-1. Skrypt musi wyciągnąć tą 1 i jeżeli jest to 1 ustawić wartosć 1 i podstawić pod zanoxNP w dalszej części kodu. Jeżeli zaś transactionID miało by formę test@wp.pl-3 lub jakąkolwiek inną liczbę przy końcówce, w tedy pod zanoxNP musi być podstawiona wartość równa 2. W obecnej formie to nie działa. Z tego co jednak udało mi się dowiedzieć, teoretycznie powinienem ustawić zamiast [[zanoxNP]] to [["+zanoxNP+"]]. Niestety, w takiej formie również to nie działa ponieważ GTM od razu traktuje to jako błąd i nie przepuszcza dalej. Kod wygląda w tedy tak:

a_g_f_2.jpg

 

Czy ktoś orientuje się, jak zmusić, lub przebudować ten skrypt tak, aby pod zanoxNP podstawiała się odpowiednia wartość 1 lub 2? W kodzie występuje jeszcze coś takiego jak zanpid ale to jest jeszcze wyższa szkoła jazdy. Na razie ją zostawiam, chciałbym wpierw ogarnąć zanoxNP. 

Będę niezmiernie wdzięczny za wszelkie pomysły. 

Odpowiedź eksperta 1verified_user
1 ZAAKCEPTOWANE ROZWIĄZANIE

Zaakceptowane rozwiązania
Zaakceptowane rozwiązanie.
Rozwiązanie
Zaakceptowane przez autora tematu: Michał U
września 2016

Dot.: Błędnie odczytywany kod JS

[ Edytowane ]
Wschodząca Gwiazda

Byłeś blisko Emotikon: Szczęśliwy

Wystarczyło te dwie dodatkowe linijki kodu ująć w bloku <script>...</script> bo inaczej się nie wykonają.

 

<script id="zanoxScript"></script>
<script type="text/javascript">
var zanoxNP=""; 
var order_id = "{{transactionId}}";
    if(order_id.slice(-1) == 1) {
      zanoxNP = 1;
    } else {
      zanoxNP = 2;
    }
    var src="https://ad.zanox.com/pps/?18576C1092216458&mode=[[1]]&CID=[["+zanoxNP+"]]&CustomerID=[[{{clientId}}]]&OrderID=[[{{numberId}}]]&CurrencySymbol=[[PLN]]&TotalPrice=[[{{bruttovalue}}]]&PartnerID=[[zanpid]]";
    document.getElementById("zanoxScript").src=src;
</script>

Tomasz Ciepłucha

Wyświetl rozwiązanie w oryginalnym poście

Dot.: Błędnie odczytywany kod JS

Wschodząca Gwiazda

Cześć.
Pierwsza wersja Ci nie działa, bo ciąg znaków [[zanpid]] jest traktowany jak łańcuch znaków, a nie jak zmienna.
Druga wersja Ci nie działa, bo nie możesz jako atrybutu źródła skryptu łączyć kilku łańcuchów znaków i zmiennych. 


Rozwiązaniem jest stworzenie jakiejś zmiennej, którą następnie wstawisz jako źródło do skryptu.

 

Czyli możesz zrobić coś takiego:

1. na początku wstawiasz pusty znacznik <script> z jakimś id:

<script id="zanoxScript"></script>

2. na końcu w pierwszym bloku <script> definiujesz url i podpinasz go do tego znacznika <script> (wykropkowałem część,bo nie chce mi się przepisywać)

var src="https://ad.zanox.com/........&CID=[["+zanoxNP+"]].....";

document.getElementById("zanoxScript").src=src;

 

Resztę wyrzucasz, bo jest niepotrzebna (czyli ostatni blok <script> i <noscript>).

 

W razie problemów wklej normalnie cały kod (nie jako obrazek) to Ci napiszę, jak dokładnie może to wyglądać.

Tomasz Ciepłucha

Dot.: Błędnie odczytywany kod JS

Student ✭
<!-- START of the zanox affiliate HTML code -->
<!-- (The HTML code may not be changed in the sense of faultless functionality!) -->
<script type="text/javascript">
var zanoxNP=""; 
var order_id = "{{transactionId}}";
    if(order_id.slice(-1) == 1) {
      zanoxNP = 1;
    } else {
      zanoxNP = 2;
    }
</script>
<script type="text/javascript" src="https://ad.zanox.com/pps/?18576C1092216458&mode=[[1]]&CID=[[zanoxNP]]&CustomerID=[[{{clientId}}]]&OrderID=[[{{numberId}}]]&CurrencySymbol=[[PLN]]&TotalPrice=[[{{bruttovalue}}]]&PartnerID=[[zanpid]]">
</script>
<noscript>
<img src="https://ad.zanox.com/pps/?18576C1092216458&mode=[[2]]&CID=[[zanoxNP]]&CustomerID=[[{{clientId}}]]&OrderID=[[{{numberId}}]]&CurrencySymbol=[[PLN]]&TotalPrice=[[{{bruttovalue}}]]&PartnerID=[[zanpid]]" width="1" height="1" />
</noscript>
<!-- END zanox-affiliate HTML-Code -->

 

Powyżej to jest oryginalny kod, ten pierwotny, z pierwszego screena. Idąc drogą, którą mi opisałeś, jestem w stanie zrobić taki kod (poniżej) ale nie bardzo wiem jak zrobić "2. na końcu w pierwszym bloku <script> definiujesz url i podpinasz go do tego znacznika <script>" Udało mi się tylko tyle Emotikon: Smutny :

 

<script id="zanoxScript"></script>

<script type="text/javascript">
var zanoxNP=""; 
var order_id = "{{transactionId}}";
    if(order_id.slice(-1) == 1) {
      zanoxNP = 1;
    } else {
      zanoxNP = 2;
    }
</script>

var src="https://ad.zanox.com/pps/?18576C1092216458&mode=[[1]]&CID=[["+zanoxNP+"]]&CustomerID=[[{{clientId}}]]&OrderID=[[{{numberId}}]]&CurrencySymbol=[[PLN]]&TotalPrice=[[{{bruttovalue}}]]&PartnerID=[[zanpid]]";

document.getElementById("zanoxScript").src=src;

 

Zaakceptowane rozwiązanie.
Rozwiązanie
Zaakceptowane przez autora tematu: Michał U
września 2016

Dot.: Błędnie odczytywany kod JS

[ Edytowane ]
Wschodząca Gwiazda

Byłeś blisko Emotikon: Szczęśliwy

Wystarczyło te dwie dodatkowe linijki kodu ująć w bloku <script>...</script> bo inaczej się nie wykonają.

 

<script id="zanoxScript"></script>
<script type="text/javascript">
var zanoxNP=""; 
var order_id = "{{transactionId}}";
    if(order_id.slice(-1) == 1) {
      zanoxNP = 1;
    } else {
      zanoxNP = 2;
    }
    var src="https://ad.zanox.com/pps/?18576C1092216458&mode=[[1]]&CID=[["+zanoxNP+"]]&CustomerID=[[{{clientId}}]]&OrderID=[[{{numberId}}]]&CurrencySymbol=[[PLN]]&TotalPrice=[[{{bruttovalue}}]]&PartnerID=[[zanpid]]";
    document.getElementById("zanoxScript").src=src;
</script>

Tomasz Ciepłucha

Dot.: Błędnie odczytywany kod JS

[ Edytowane ]
Student ✭

Magia! Działa! Emotikon: Szczęśliwy

 

To teraz jeśli jeszcze mogę, dalsza część "zabawy". Mianowicie, w samym kodzie istnieje jeszcze coś takiego jak zanpID. Chodzi o to, że osoba, która zostaje przekierowana na naszą stronę z innego źródła otrzymuje w pasku adres (tutaj przykład): http://www.przykładowyadres.com/?zanpid=465498438486748763

 

Niestety, kliknięcie w jakikolwiek odnośnik na stronie powoduje, że końcówka czyli ?zanpid=465498438486748763 znika - co jest zrozumiałe. I teraz: czy również za pomocą GTMa jesteśmy w jakiś sposób wstanie wymusić to, żeby ten unikalny numer utrzymywał się przez cały czas w URLu kiedy ktoś odwiedza naszą stronę a następnie, kiedy dojdzie do sfinalizowania transakcji, powyższy kod (ten, który ogarnialiśmy wczoraj) zaciągnie ten numer "465498438486748763" z linka i podstawi pod zanpID ? Dodam jeszcze tylko, że chodzi o sieć afiliacyjną i przekierowania z ich programu na naszą stronę. Stad generuje się wspomniany numer zanpid. 

 

Na platformie na której stoi nasza strona można to  podobno rozwiązać ustawiając program CPA i wpisując odpowiedni kod (chodzi o utrzymanie nr zanpid w adresie) - taki otrzymałem screen od wspomnianej sieci afiliacyjnej. 

 

cpa_preview.png

 

Pytanie czy tak samo możemy zrobić to w GTMie czy jednak jestem zmuszony ustawić to na platformie wg powyższego screena a tylko jeszcze dodatkowo przebudować nasz kod tak aby właśnie z URLa wyciągał ten zanpid i podstawiał go w wymagane miejsce?

Dot.: Błędnie odczytywany kod JS

[ Edytowane ]
Student ✭ ✭ ✭

Michał,

Możesz to oczywiście zrobić przez GTM-a, ale nie polecam Ci tego rozwiązania. To rozwiązanie modyfikowałoby wszystkie linki w całym kodzie html. Musiałbyś uwzględnić wszystkie warunki linki zakończone na #, zawierające już zmienne, itp.. Bez wykonania testów nie będziesz w stanie zagwarantować, że wszystkie podstrony dla tych osób będą dostępne.

 

<script>

function getVariablesFromUrl() {
    var vars = {};
    var parts = window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi, function(m,key,value) {
        vars[key] = value;
    });
    return vars;
}
  
function changeAHrefs(zanpid) 
{
    var a = document.getElementsByTagName('a');
    for(var count = 0, length = a.length; count < length; count++) {
        a[count].href += "?zanpid=" + zanpid;
    }
}

var zanpid = getVariablesFromUrl()["zanpid"];
if (zanpid && zanpid != "undefined")
    changeAHrefs(zanpid);

</script>



To najprostszy przykład, w pętli for dodatkowo należy uwzględnić występowanie #, ?, żeby wygenerowany URL był nadal poprawny.

Prawidłowym jednak sposobem będzie trzymanie tej wartości w sesji. Wartość będzie zapisywana, gdy użytkownik wchodzi pierwszy raz na stronę. Tak jak piszą możliwe, że ten CMS po prostej konfiguracji obsługuje trzymanie tych zmiennych i będziesz mógł się do nich dostać również z poziomu GTM-a. Z tego co widzę poprzez zmienną javascript. Po skonfigurowaniu CMS-a utwórz zmienną javascript o tej samej nazwie w GTM i zobacz na podglądzie czy będzie miała ona zdefiniowaną wartość po przejściu z http://www.przykładowyadres.com/?zanpid=465498438486748763 i dalej.

Dot.: Błędnie odczytywany kod JS

Student ✭

 

Pytanie uzupełniające, rozumiem, że temu kodu JS z CMSa powinienem nadać jakieś ID i tą samą nazwę ID wykorzystać tworząc zmienną JS w GTMie? W sensie, powinien on zatem wyglądać tak?

<script id="zanox_js" type="text/javascript">
var zanpid='[cpa:zanpid]';
if((typeof zanpid === 'undefined') || zanpid === null){
var zanpid = ";
}
</script> 

Dot.: Błędnie odczytywany kod JS

[ Edytowane ]
Wschodząca Gwiazda

Piotr - w swoim rozwiązaniu nie uwzględniasz sytuacji, w których kliknięcie obsługiwane jest przez JavaScript, a nie link, a takie sytuacje zdarzają się często.

Wówczas parametr przy kliknięciu zostanie zgubiony i nie będzie dalej przekazywany.

 

Bezpieczniejszym rozwiązaniem, chociaż też nie w 100% skutecznym, może być wykrycie parametru zanpid przy pierwszym kliknięciu i zapisanie go do ciasteczka, a następnie w GTM pobieranie go z tego ciasteczka i podstawienie do jakiejś zmiennej, której użyjemy w skrypcie.

 

Żeby to zrobić:

 

1. Stwórz niestandardowy tag HTML uruchamiany nową regułą Page URL zawiera zanpid o takiej zawartości:

<script>
    document.cookie = "zanpid="+document.location.search.match(RegExp("[\?\&]zanpid=([^\&]*)(\&?)","i"))[1];
</script>

2. Stwórz nową zmienną typu własny plik cookie, nazwij ją zanpid i w pole Nazwa pliku cookie wpisz zanpid

 

3. w skrypcie, w którym definiowałeś źródło zewnętrznego skryptu wstaw wartość zmiennej zanpid:

 

var src="https://ad.zanox.com/pps/?18576C1092216458&mode=[[1]]&CID=[["+zanoxNP+"]]&CustomerID=[[{{clientId}}]]&OrderID=[[{{numberId}}]]&CurrencySymbol=[[PLN]]&TotalPrice=[[{{bruttovalue}}]]&PartnerID=[[{{zanpid}}]]";

 

Tomasz Ciepłucha

Dot.: Błędnie odczytywany kod JS

Student ✭ ✭ ✭
Z tego co mogę się domyślać, nie mając informacji jaka to platforma, to rozwiązanie przetrzymuje wartość pobraną z GET w sesji, której wartość jest dostępna w zmiennej zanpid. Kod generuje się automatycznie, nie potrzebujesz dodawać w nim id. Z tego co widzę wystarczy wstawić kod na stronę. Nazwą zmiennej javascript w GTM będzie zanpid.

Tomasz wrzucił również dobre rozwiązanie. Z podmianą atrybutów href nie polecam z uwagi na wiele komplikacji, których w 100% nie przewidzisz.

Dot.: Błędnie odczytywany kod JS

[ Edytowane ]
Student ✭

Dzięki serdeczne za wszelkie porady. Udało się to ostatecznie ustawić w jeszcze inny sposób, ale te informacje, które podaliście na pewno posłużą mi na przyszłość. 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 REGUŁY? Niestety, wrzucenie po prostu taga i oznaczenie reguł wyjątkiem nic nie daje, TAG i tak się uruchamia w miejscu gdzie występuje np reguła X, Y, Z. a chodzi o to by się własnie tam gdzie oznaczone reguły nie uruchamiał? Czy powinienem ustawić kolejną regułę, która uruchamia się na wszystkich stronach, w momencie kiedy każda zmienna występująca w pozostałych tagach uruchamianych przez reguły nie równa się 1? ... chyba zamieszałem Emotikon: zakłopotany?

Błędnie odczytywany kod JS

[ Edytowane ]
Student ✭ ✭ ✭

Michał,

 

Podaj proszę jak wyglądają obecnie reguły X, Y, Z oraz ta finalna, o której piszesz. Jaki jest typ tych reguł?

 

Błędnie odczytywany kod JS

Student ✭

Piotrze, dawno mnie tu nie było, nie zauważyłem odpowiedzi na Twoje pytanie, niemniej ten temat jest już nieaktualny. To znaczy, jakoś udało się to obejść i póki co się sprawdza i działa także. Dzięki za wszelkie porady i chęć pomocy!