Kjapp og trygg hosting for Wordpress

Hvordan få TD sine afflinker til å validere?

Dag Frogner

Supermedlem
Javascript ja. Og jeg har igrunn samme spørsmål som deg. :)

Har sett at noen legger koden inni en php-fil, mulig det fungerer, har ikke testet det ennå. Så når man hoover over linken står det f.eks www. mittnettsted. no/navnet_på _annonsøren.php

Om dette er gjort for å skjule afflinken eller pga validering vet jeg ikke.
 

TorsteinO

Art Director & grunder
Hm, den varianten der tror jeg nok bare er for å skjule afflinken, for en stor del av poenget med å bruke javascript-affiliate-koder er at TD da får satt en cookie som gjør at de kan spore opp hvem som viste annonsen, i tilfelle den besøkende f.ex. noen dager senere går rett til annonsøren de så annonse for (men ikke klikket på) hos deg. Da vet TD hvem som viste den besøkende den aktuelle annonsen sist, og kan evt gi ut kommisjon for "isale"/"ilead". Legger du denne koden derimot først i en annen fil, så den besøkende må klikke på en link for å kjøre JS'et, så får du aldri satt cookien hvis ikke den besøkende klikker, da kan du like gjerne bruke "ikke-javascript"-afflinker.

Samtidig er det absolutt fordeler med å ikke bruke JS-afflinkene, sida blir merkbart treigere hvis du har mye javascript, så dytter du inn alt for mange annonser med js på en side vil du merke det ganske kraftig.
 

adeneo

Medlem
Hvis det er JS er problemet sannsynligvis at det ikke er skrevet riktig, og at det er ting som burde vært escaped eller skrevet annerledes.
Nå har ikke jeg sett noe nærmere på TD sin JS, men ville vel tro at det kanskje gikk an å prøve med kommenterte CDATA wraps rundt javascriptet som ikke validerer eller noe lignende.
I html5 skal det meste kunne gå greit i <script> tagger, så det er litt pussig hvis det ikke validerer.
En annen løsning er å sette det inn dynamisk med ajax etter siden er lastet, da validerer i hvertfall html'en før TD greiene settes på plass, og hvis (når) søkemotorer begynner å vektlegge validering så bør det gå igjennom der da robotene normalt ikke ser innhold som legges inn i ettertid med ajax.
Forøvrig så er det ingen krise om en side ikke validerer, så lenge du vet hvorfor og at det ikke er noe som er et problem med selve siden.
 

Dag Frogner

Supermedlem
Det at en side ikke MÅ validere er jo greit, men jeg tenkte at det uansett er greit å ha det på plass. Jeg tror også som deg at det vil ha mer og mer og si fremover og da er det kjedelig å sitte der med massevis av feil.

Du må gjerne ta en titt adeneo (eller andre) om dere klarer å se en løsning: Kredittkort - Forbrukslån - Sparetips - Økonomi | Finn Ditt Kredittkort.com

Om noen har lyst til å få noen kroner for å fikse dette, så hyl ut. :)
 

adeneo

Medlem
Kikket raskt på en tilfeldig utvalgt TD dings, og den så slik ut:

Kode:
<script type="text/javascript">
var uri = 'http://impno.tradedoubler.com/imp?type(img)g(18216734)a(1965382)' + new String (Math.random()).substring (2, 11);

document.write('<a href="http://clk.tradedoubler.com/click?p=136026&a=1965382&g=18216734" target="_BLANK"><img src="'+uri+'" border=0></a>');
</script>

Litt usikker på hva TD driver med her, men skulle vel tro at de har litt snøring når det kommer til javascript, så da får man vel anta at det er en grunn til at det er skrevet slik det er.
Normalt så burde bilder ha en <alt> tagg, og den kan du sikkert legge til uten at det er noe problem, videre så er det vel ikke godkjent å skrive border=0 i den doctypen du bruker, men det går sikkert an å skrive border="none" i stedet.

Hovedproblemet ligger i lenkene som settes inn i dokumentet ettersom de bruker "&" tegnet en del, og "&" skrives normalt &amp; eller som URI (som skulle bli %26) i HTML, og oppfattes da som regel som & av nettleseren, også i lenker.
Aller sist, i xhtml doctypen du bruker må alle tagger avsluttes, så da slenger vi på en slash på slutten av <img>, og riktig skrevet skulle det vel bli noe sånt:

Kode:
<script type="text/javascript">
var uri = 'http://impno.tradedoubler.com/imp?type(img)g(18216734)a(1965382)' + new String (Math.random()).substring (2, 11);

document.write('<a href="http://clk.tradedoubler.com/click?p=136026&amp;a=1965382&amp;g=18216734" target="_BLANK"><img src="'+uri+'" alt="TD" border="none" /></a>');
</script>

Det ser ut som en del ting hadde ordnet seg ved å skifte doctype, og selv med omskrivninger kan det hende du får opp feil om at <a> elementet ikke er tillatt inne i <script> elementet eller noe sånt tull.
En annen ting er at for å finne ut akkurat hvorfor TD har valgt å skrive det slik, må man gå tilbake til deres script og se hva de gjør der, og det blir fort vekk mye greier.
Det er heller ikke sikkert dette fungerer i det hele tatt slik som det er skrevet ovenfor dersom TD på en eller annen måte validerer linkene og ikke godtar entities eller URI i stedet for &, så det må du nesten bare prøve og se.

Så nå at det var noen andre ting fra TD rundt på de sidene også, og blant annet har man skrevet '<sc'+'ript>' noen steder, og hvorfor man føler et behov for å bruke en pluss midt i script taggen som skal settes inn i dokumentet vet ikke jeg, men den plussen (og de to ' )kan bare fjernes i forhold til din side, problemet ligger igjen i om TD av en eller annen grunn bruker den plussen til noe fornuftig?

Det aller beste ville sikkert vært å bytte til en html5 doctype, da ville ikke script taggene bli validert i det hele tatt, men det ser ut til å bli en betydelig jobb, og da ville jeg nok heller tatt den enkleste løsningen, som blir å slenge cdata rundt all elendighet fra TD, og da blir det slik:

Kode:
// <![CDATA[
<script type="text/javascript">
var uri = 'http://impno.tradedoubler.com/imp?type(img)g(18216734)a(1965382)' + new String (Math.random()).substring (2, 11);

document.write('<a href="http://clk.tradedoubler.com/click?p=136026&a=1965382&g=18216734" target="_BLANK"><img src="'+uri+'" border=0></a>');
</script>
// ]]>

Eneste du trenger å gjøre er å lime inn de cdata kommentarene før og etter <script> taggene, så skal de validere.
 

Dag Frogner

Supermedlem
Prøvde den siste varianten du postet, men det fungerte dårlig. Da ble bare koden synlig der annonsen skulle vært...

Prøvde å endre '<sc'+'ript>' til '<script>', men da ble ikke annonsen vist, kun noen få av tegnene i koden.

Men ved å bytte ut & med &amp; fikk jeg redusert feilene til 44, så det går ihvertfall riktig vei. :D

Takker mye for hjelp!
 

adeneo

Medlem
Pussig, det skal ikke være noe problem med CDATA som er kommentert ut, men TD gjør en liten svingom under innsetting av data ser det ut som.

Måtte teste litt frem og tilbake, men dette er løsningen jeg kom opp med:

Kode:
<script type="text/javascript">
// <![CDATA[
var uri = 'http://impno.tradedoubler.com/imp?type(img)g(18216734)a(1965382)' + new String (Math.random()).substring (2, 11);

document.write('<a href="http://clk.tradedoubler.com/click?p=136026&a=1965382&g=18216734" target="_BLANK"><img src="'+uri+'" border=0></a>');
// ]]>
</script>

Den validerer, og krever lite endringer, kun sett cdata taggene innenfor javascript taggene, og det ser ut til å fungere fint her, annonsen kommer opp og testsiden min går fint gjennom W3C validatoren, linken er også uforandret, men har ikke prøvd å trykke på den eller se om den registrerer cookies osv. da jeg regner med det er noen form for registrering, og det er sikkert litt upopulært om http requesten kommer fra min lokale maskin i stedet for din nettside.
 
Sist redigert:

Dag Frogner

Supermedlem
Ja, du har et poeng der. Er vel også en viss (liten) risiko for at cookien ikke fungerer helt som den skal når den har blitt forandret? Kjedelig å aldri få betalt når folk bruker linkene. :D

Har sendt en mail til TD ang dette, så får jeg se hva de svarer. Kan jo vise de den siste koden her og be de sjekke at det vil fungere. :)

En annen feil jeg får en del av er denne:

Line 659, Column 23: document type does not allow element "div" here; missing one of "object", "applet", "map", "iframe", "button", "ins", "del" start-tag

<p><div class="toggle"></p>

The mentioned element is not allowed to appear in the context in which you've placed it; the other mentioned elements are the only ones that are both allowed there and can contain the element mentioned. This might mean that you need a containing element, or possibly that you've forgotten to close a previous element.

One possible cause for this message is that you have attempted to put a block-level element (such as "<p>" or "<table>") inside an inline element (such as "<a>", "<span>", or "<font>").

Den kommer fra en plugin, men jeg kan ikke se hva som skal være galt her. Slik ser det ut i den tilhørende .php-filen:

Kode:
function sliding_excerpt($content) 

{

	

        if(!is_single()){

        if ( strpos($content,'<!--slideandhide-->') )

	{

		$output = explode('<!--slideandhide-->', $content);

		$content = $output[0] . '<div class="toggle">' . $output[1] . '</div>';

	}

        }



        return $content;

}

Igjen, takk for hjelp!
 
Sist redigert:

adeneo

Medlem
Du kan ikke ha slike blokk elementer innenfor paragrafer, det er fyfy og virker rart at en plugin gjør dette.

Altså blir det feil med <p><div></div></p> mens <div><p></p></div> er i orden.

Løsningen er å bruke spans i stedet, slik:

Kode:
$content = $output[0] . '<span class="toggle">' . $output[1] . '</span>';

Så lenge vedkommende som har laget plugin'en har holdt seg til kun klasser som selektorer, og ikke har gjort noe slik : span.toggle, men i stedet kun har brukt klassen, altså .toggle, så går det greit.
 

Dag Frogner

Supermedlem
Problemet er jo bare at jeg ikke selv kan velge hvor <p> og </p> skal være. Hadde dette stått i koden hadde det ikke vært noe problem, men når det automatisk blir lagt på utsiden ser jeg ikke helt hvordan jeg kan omgå det?

Koden din gjør at plugin`et ikke fungerer i det hele tatt. :(
 

adeneo

Medlem
Koden din gjør at plugin`et ikke fungerer i det hele tatt. :(

Kom ikke som noe sjokk, da den riktige måten å henvise til et element i slike plugins er å bruke "div.toggle" og ikke bare klassen ettersom nettleseren da kun trenger å søke i DOM etter div'er med klassen .toggle, og ikke i alle de andre elementene, slik som <a>, <img> osv. etter klassen .toggle.
Så når man endrer fra div til span så blir alle henvisningene i plugin'en ugyldige, og sannsynligvis css også dersom den er satt opp på samme måten, med "div.toggle" i stedet for kun "toggle".

Du kan jo prøve å endre på den plugin'en eller finne en annen da det virker rart at det er gjort på den måten når "span" ville vært så enkelt å bruke i stedet, og det er elementær kunnskap når en skriver en plugin at blokkelementer ikke kan plasseres inne i andre blokkelementer på den måten.

Den div'en er ikke lukket innenfor p elementet heller (ikke at det ville validert noe mere, men semantisk så ser det rart ut), så du er sikker på at det ikke er noe annet galt enn selve plugin'en ?
 
Sist redigert:

Dag Frogner

Supermedlem
Det kan ikke være at det er Wordpress som automatisk legger til <p> og at det er derfor dette blir feil og ikke at problemet nødvendigvis ligger i kodingen av plugin`et?

Men de bruker kun .toggle i .js-filen:

// append show/hide links to the element directly preceding the element with a class of "toggle"
$jslide('.toggle').prev().append(' <a href="#" class="toggleLink">'+showText+'</a>');

// hide all of the elements with a class of 'toggle'
$jslide('.toggle').hide();
 

adeneo

Medlem
Jupp, der brukes det enkelt jQuery's .prev() for å gå ett skritt opp i DOM og så legg inn en link under det elementet, og den koden du har postet der skiller ikke mellom div eller span, kun at elementet har klassen ".toggle".

Den første koden du postet var php, kan det være noe annet som henger seg på .toggle klassen, da det ikke akkurat er en uvanlig klasse.
 
Sist redigert:
Topp