Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript] Własne adsense , problem z miejscem docelowym reklamy
Forum PHP.pl > Forum > Przedszkole
grubyx
Witam. Piszę na własne potrzeby coś podobnego do Google Adsense. Zrobiłem wszystko dobrze, ale mam jednen problem. Mogę umieścić tylko jeden banner na stronie. Kawałek kodu java script:

// Funkcja odpowiedzialna za pobranie html'a bannera (pobiera b. dobrze)
function Response() {
var text = ajaxreq.responseText;

div = document.getElementById("box_" + id_box);
div.innerHTML = text;
}

Kod HTML, który wklejam na stronę:

  1. <script type="text/javascript">var id_box = 100;</script>
  2. <script src="SERVER/js/getbanner.js" type="text/javascript"></script>
  3. <div id="box_100"></div>


Chodzi o to aby móc wkleić ten kod 2, 3 a nawet 50 razy za każdym razem używając innego parametru id_box (obecnie pokazuje tylko dla ostatniego). Kod HTML nie może się zbyt różnić od tego . (chce by osoby, które nie mają zbyt pojęcia o stronach mogly go wklejac w odpowiednie miejsce i miec banner a nie bawić się w edycje kilku elementów strony). Problem polega na tym, że pobiera tylko ostatnia wartość id_box (i dla niej ustawia banner, wcześniejsze są ignorowane). Bardzo proszę forum o pomoc. Pozdrawiam.
kamil4u
Nie za bardzo rozumiem.... Zrób funkcję:
Kod
unction Response(id) {
var text = ajaxreq.responseText;

div = document.getElementById("box_" + id);
div.innerHTML = text;
}
///////////////////
// i
///////////////////
<script type="text/javascript">Response(1);Response(2);Response(100);Response(5);</script>


Tylko nie wiem czy to o to chodziło, a wydaje mi się, że nie. Opisz może bardziej opierając się na kodzie(jak chcesz, żeby wyglądało wywołanie odpowiedniego baneru )
grubyx
Mam skrypt:
var ajaxreq = ajaxRequest();

var url = 'http://pages.homelinux.com/adsense/public/banner/get/id/' + id_box;

process3();

function process3() {
if(ajaxreq) {
ajaxreq.open("GET", url, true);
ajaxreq.onreadystatechange = Handle3;
ajaxreq.send(null);
}
}
function Handle3() {
if(ajaxreq.readyState == 4 && ajaxreq.status == 200) {
Response3();
}
}



function Response3() {
var text = ajaxreq.responseText;

div = document.getElementById("box_" + id_box);
div.innerHTML = text;
}
function ajaxRequest() {
try {
ajaxreq = new XMLHttpRequest();
} catch(error) {
try {
ajaxreq = new ActiveXObject("Microsoft.XMLHTTP");
} catch(error) {
return false;
}
}

if(!ajaxreq)
return false;
else
return ajaxreq;
}

Pojedyńczy banner uruchamiam:

  1. <script type="text/javascript">var id_box = 98;</script>
  2. <script src="http://pages.homelinux.com/adsense/public/js/getbanner.js" type="text/javascript"></script>
  3. <div id="box_98"></div>

i jeśli raz wkleje taki kod na strone to nie ma problemu, banner zostaje wyświetlony. Natomiast jeśli zrobię coś takiego:
  1. <script type="text/javascript">var id_box = 98;</script>
  2. <script src="http://pages.homelinux.com/adsense/public/js/getbanner.js" type="text/javascript"></script>
  3. <div id="box_98"></div>

  1. <script type="text/javascript">var id_box = 98;</script>
  2. <script src="http://pages.homelinux.com/adsense/public/js/getbanner.js" type="text/javascript"></script>
  3. <div id="box_98"></div>

  1. <script type="text/javascript">var id_box = 100;</script>
  2. <script src="http://pages.homelinux.com/adsense/public/js/getbanner.js" type="text/javascript"></script>
  3. <div id="box_100"></div>

(W tym przykładzie chciałbym 3 bannery - dwa boxy o idzie 98 i jeden id = 100) , bannery powinny pojawiac się w miejscu w ktore wkleiłem (<div id="box_X"></div>) . Problem polega na tym, że tylko raz zachodzi połączenie z serwerem tylko dla ostatniego idu (w tym przypadku dla id_box = 100). Mam nadzieje, ze teraz rozjaśniłem bardziej sytuacje.
kamil4u
Cytat
Mam nadzieje, ze teraz rozjaśniłem bardziej sytuacje.

Jest znacznie lepiej smile.gif

Kod
function addBaner(id_box){
var ajaxreq = ajaxRequest();

var url = 'http://pages.homelinux.com/adsense/public/banner/get/id/' + id_box;

process3();

function process3() {
   if(ajaxreq) {
       ajaxreq.open("GET", url, true);
       ajaxreq.onreadystatechange = Handle3;
       ajaxreq.send(null);
   }
}
function Handle3() {
    if(ajaxreq.readyState == 4 && ajaxreq.status == 200) {
        Response3();
    }
}



function Response3() {
    var text = ajaxreq.responseText;
    
    div = document.getElementById("box_" + id_box);
    div.innerHTML = text;
}
function ajaxRequest() {
    try {
        ajaxreq = new XMLHttpRequest();
    } catch(error) {
      try {
        ajaxreq = new ActiveXObject("Microsoft.XMLHTTP");
      } catch(error) {
        return false;
      }
    }

    if(!ajaxreq)
      return false;
    else
      return ajaxreq;
}
}

i wywołanie
Kod
<script src="http://pages.homelinux.com/adsense/public/js/getbanner.js" type="text/javascript"></script>
<script>
addBaner(98);
addBaner(99);
addBaner(100);
</script>

<div id="box_98"></div>
<div id="box_99"></div>
<div id="box_100"></div>


W podanym przez Ciebie kodzie 3 razy uruchamiałeś ten sam baner(98), jednak to jest błąd i mam nadzieję, że był to tylko przykład. Błąd polega na tym, że id jest unikatowe i nie może się powtarzać.
--edit
A jednak to nie jest błąd... W takim razie przekształć funkcję na: addBaner(id_baneru, id_elementu); lub pobaw się z np. getElementsByName
grubyx
Właśnie szukam takiego rozwiązania jakie oferuje Google Adsense. Czyli mogę wklejać:
<script type="text/javascript"><!--
google_ad_client = "pub-9191175133602823";
/* 300x250, utworzono 11-01-04 */
google_ad_slot = "9767482761";
google_ad_width = 300;
google_ad_height = 250;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
Dowolnie razy i w dowolne miejsce , Twoje rozwiązanie jest dobre, ale zależy mi na tym aby to było user friendly (takie coś jak Ty podałeś będzie wymagało wklejenia kodu do <head></head> i potem ustawienie poszczególnych div'ów na stronie a nie o to mi chodzi tylko > wklejam kod i jest banner w danym miejscu. Mam nadzieje, że teraz rozjaśniłem o co dokładnie mi chodzi smile.gif
kamil4u
Moje rozwiązanie jest dużo lepsze dla użytkownika. Nie traktuj ludzi jak całkowitych debili. Tym moim rozwiązaniem też nie musisz wrzucać kodu do <head>, aczkolwiek,byłoby lepiej smile.gif np.
Kod
//objętnie gdzie wklejasz to:
<script src="http://pages.homelinux.com/adsense/public/js/getbanner.js" type="text/javascript"></script>

//A to w miejscu, gdzie ma być div:

<script>addBaner(98);</script>
<div id="box_98"></div>

//możesz kilka razy:

<script>addBaner(99);</script>
<div id="box_99"></div>

<script>addBaner(100);</script>
<div id="box_100"></div>

<script>addBaner(101);</script>
<div id="box_101"></div>


I co nie jest user friendly?

Takie coś jak zrobiło Google nie jest takie proste... I szczerze mówiąc na razie nie mam pomysłu jak to zrobili(a na analizowanie ich kodu nie mam czasu, niestety)...
grubyx
No nic będę musiał to tak zrobić póki nie wymyślę innego sposobu. Dzięki za poświęcony czas smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.