Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Reklama typu In-Text jak zrobić
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
craker
Witajcie,
mam pytanie jak powinien wygląać skrypt w JS, który będzie zamieniać np. słowo "tlen" losowo występujące w tekście na reklamę? Mam z tym problem, bo niby mógłbym rozbić po spacji cały tekst i każde słowo wysłać ajaksem do backendu php w celu sprawdzenia czy to słowo jest tym o które mi chodzi i zwrócenia wtedy kodu reklamy ale jest to conajmniej nie optymalne. Może mi ktoś pomóc?
!*!
W js trzymasz tablicę ze słowami, sprawdzasz przez wyrażenia regularne ich istnienie i podmieniasz na link. Choć bardziej sensownie byłoby to robić po stronie PHP od razu, na tej samej zasadzie z tą różnicą że do klienta wysyłany jest już pomieniony tekst.
kamil4u
@!*!: Zastanawiam się co z wyszukiwarkami. Jeśli chodzi o reklamę to chyba jednak lepiej jest to zrobić po stronie JS, gdyż wtedy będzie duża szansa, że Google tego "nie złapie", bo będzie widział tekst, a nie linki. Masz wiedzę na ten temat? Bo to są tylko moje przypuszczenia.
Sephirus
@!*! & kamil4u Tego typu reklama jest możliwa TYLKO poprzez JS. Podstawowa zasada jest taka, że reklama ma nie zmieniać treści strony dla wyszukiwarek. Tak więc mój przedmówca ma 100% rację w tym przypadku.

Polecam metodę ze słowami w tablicy JS i odpowiednimi replace'ami na wyrażeniach. Niestety jednak jest to nieco bardziej zawiłe niż się wydaje bo możesz jedynie zamieniać teksty, które nie są np. linkami itd... Nie wystarczy dać "body.innerHTML.replace(****)" - musisz jechać po DOMie bądź przynajmniej sprawdzać rodziców elementu który zmieniasz - taki skrypt nie jest wcale prosty do napisania.
craker
@Sephirus no właśnie wiem dlatego zapytałem, czy ktoś wie dokładnie jak napisać. bo zwykły replace to nie ma sprawy, ale sprawdzanie rodzica itp to już trochę gorzej... Może jest jakiś gotowy skrypt do tego ?
Sephirus
Gotowych skryptów do tego nie znam (w sensie takich, z których można by skorzystać) ale długo nie szukałem więc kto wie wink.gif

Ja bym kombinował tak:

[JAVASCRIPT] pobierz, plaintext
  1. // tablica slow
  2. var words = [];
  3. words.push(['asdasdasd','zastepstwo1']);
  4. words.push(['cztery','zastepstwo2']);
  5.  
  6. // pobieram wszystkie elementy
  7. var elements = document.body.getElementsByTagName('*');
  8.  
  9. for(var i = 0; i < elements.length; i++) {
  10. var e = elements[i];
  11. switch(e.tagName) {
  12. case 'a':
  13. case 'button':
  14. case 'script':
  15. case 'style':
  16. break; // w tym miejscu odrzucamy w ogóle sprawdzanie tagów wymienionych wyżej
  17. default:
  18. for(var j = 0; j < e.childNodes.length; j++) { // dla wszystkich węzłów w elemencie
  19. if(e.childNodes[j].nodeType != 3) continue; // pomijamy jeśli nie jest to węzeł tekstowy
  20.  
  21. var textContent = e.childNodes[j].textContent;
  22.  
  23. for(index in words) {
  24. textContent = textContent.replace(words[index][0],words[index][1]);
  25. }
  26.  
  27. if(e.childNodes[j].textContent != textContent)
  28. e.childNodes[j].textContent = textContent;
  29. }
  30. break;
  31. }
  32. }
[JAVASCRIPT] pobierz, plaintext


EDIT: kilka uwag:

1. Ten skrypt będzie działał, dość szybko itd. (nawet sprawdziłem)
2. Należało by dać odpowiedni regexp zamiast prostej zamiany (żeby dopasować do potrzeb)
3. wszystko będzie ok do momentu gdy na liście słów nie pojawią się dwa słowa, z których jedno zawiera sięw drugim:

np.: zaraz i raz - najpierw zamieni słowo "zaraz" np na <a ...>zaraz</a> a potem jeszcze zamieni "raz" i wyjdzie <a ...>za<a ...>raz</a></a> co jest głupotą - wystarczy jednak przygotować listę słów tak by było od najkrótszego do najdłuższego i dopasować wyrażenie regularne tak by zamieniało tylko słowa które mają z tyłu i sprzodu spację lub koniec/początek ciągu.

mam nadzieję, że Ci to nieco pomoże wink.gif

EDIT2: acha i to się nie nadaje do zamiany z tekstu na HTML - więc trzeba nieco inaczej pokombinować :/
kamil4u
@Sephirus: Coś nie zrozumiałem Twojego przekazu. Mówisz, że trzeba to zrobić w JS, a jednocześnie informujesz, że nie chcesz zmieniać treści oddzielnie dla wyszukiwarek i użytkowników( co przy JS właśnie robisz ). Więc jak to jest?

Cytat
Tak więc mój przedmówca ma 100% rację w tym przypadku.

Ja byłem Twoim przedmówcą i zadałem pytanie, więc trudno, żebym miał rację smile.gif
Sephirus
@UP smile.gif

Napisałem "Podstawowa zasada jest taka, że reklama ma nie zmieniać treści strony dla wyszukiwarek" czego tu nie rozumiesz tongue.gif

Czyli reklama ma być przezroczysta dla wyszukiwarek smile.gif ma się pokazywać tylko userom.

Więc "chce zmieniać treść oddzielnie dla wyszukiwarek a użytkownika w Twoim znaczeniu - choć to inaczej bym to nazwał - żeby się komuś nie pomyliło z jakimiś złymi metodami zmian treści pod SEO... bo to nic z tych rzeczy smile.gif

Chodzi jedynie o to by wyszukiwarka dostała treść taką jaką ma strona, a strona ma treść wynikającą z tego co znajduje się na serwerze. Reklama zewnętrzna nie jest na tym serwerze i nie jest traktowana (nie powinna) jako treść strony - przy każdym odświeżeniu może być bowiem inna.

Tak więc reklama nie powinna nic mieszać w tym co dostaje wyszukiwarka od danej strony. Ma służyć/przeszkadzać userowi ;P

Cytat
Jeśli chodzi o reklamę to chyba jednak lepiej jest to zrobić po stronie JS, gdyż wtedy będzie duża szansa, że Google tego "nie złapie", bo będzie widział tekst, a nie linki.


Dlatego napisałem, że masz rację wink.gif
!*!
Cytat(kamil4u @ 1.02.2013, 12:59:50 ) *
@!*!: Zastanawiam się co z wyszukiwarkami. Jeśli chodzi o reklamę to chyba jednak lepiej jest to zrobić po stronie JS, gdyż wtedy będzie duża szansa, że Google tego "nie złapie", bo będzie widział tekst, a nie linki. Masz wiedzę na ten temat? Bo to są tylko moje przypuszczenia.


To już jest kwestia tego czy chcesz przymulić użytkownika wczytywaniem tekstu w JS czy nie (w większości takie skrypty spowalniają stronę, gdy są robione w JS)
Nie widzę kolizji między reklamą a wyszukiwarką, ot inny widok przy sprawdzaniu czy to (ro)bot.
kamil4u
Cytat
Nie widzę kolizji między reklamą a wyszukiwarką, ot inny widok przy sprawdzaniu czy to (ro)bot.

Z tego co wiem to linki wychodzące mają wpływ na pozycję w wyszukiwarce. Np. linki z katalogów stron( duża ilość linków wychodzących ) ma mniejszą rangę, niż linki z prywatnego blogu, a takie niuanse mają później wpływ na SEO.

Cytat
czego tu nie rozumiesz

Bo dla mnie zmiana słowa na link to zmiana treści. Stąd nieporozumienie.
!*!
Cytat(kamil4u @ 1.02.2013, 18:01:56 ) *
Z tego co wiem to linki wychodzące mają wpływ na pozycję w wyszukiwarce. Np. linki z katalogów stron( duża ilość linków wychodzących ) ma mniejszą rangę, niż linki z prywatnego blogu, a takie niuanse mają później wpływ na SEO.


Ale jakie to ma znaczenie skoro reklamę zobaczy tylko użytkownik? Wszytko inne będzie generować widok bez niej.
kamil4u
Cytat
Ale jakie to ma znaczenie skoro reklamę zobaczy tylko użytkownik? Wszytko inne będzie generować widok bez niej.

Rozmawiamy o koncepcji PHP vs JS. Polecałeś to zrobić w PHP, ja się zapytałem czy nie lepiej będzie to zrobić w JS ze względu na wyszukiwarki. Zatem moje pytanie dotyczyło PHP. Idąc tym tropem dalej - reklamę zobaczy też wyszukiwarka, więc jednak ma znaczenie
!*!
Cytat(kamil4u @ 2.02.2013, 16:21:25 ) *
Rozmawiamy o koncepcji PHP vs JS. Polecałeś to zrobić w PHP, ja się zapytałem czy nie lepiej będzie to zrobić w JS ze względu na wyszukiwarki. Zatem moje pytanie dotyczyło PHP. Idąc tym tropem dalej - reklamę zobaczy też wyszukiwarka, więc jednak ma znaczenie


Jak niby wyszukiwarka zobaczy treść/link reklamy skoro nie będzie go tam dla niej? Chyba że nie masz w aplikacji jakiegoś podziału dostępu do poszczególnych sekcji (prosty ACL czy cokolwiek).

  1. if(gość){// reklama
  2. elseif(bot wyszukiwarki){// brak reklamy
  3. elseif(user){//reklama

itd.
kamil4u
@!*!: Nie jestem pewien czy Google da się oszukać w ten sposób( w sensie czy nie mają jakieś dodatkowej kontroli nad treścią ). Mimo wszystko jak tak zrobisz to masz rację.

Cytat
Chyba że nie masz w aplikacji jakiegoś podziału dostępu do poszczególnych sekcji (prosty ACL czy cokolwiek).

Nie robię takiego podziału. Ale raczej siedzę w JS, HTML czy CSS, może stąd nie czuję takiej potrzeby.
craker
A może mi ktoś powiedzieć jak zastąpić tylko 2 wystąpienia danego słowa. Przykładowo mamy zdanie: "Raz idąc do domu poszedłem przez dół. Raz idąc do domu poszedłem przez dół. Raz idąc do domu poszedłem przez dół. "

I chcę zastąpić tylko jedno albo 2 wystąpienia (losowe) słowa raz

Edit.

I jeszcze jedno jak mogę zamieniać na HTML bo daję innerHTML ale niestety nie zamienia mi treści
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.