Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript][PHP]Treść z własnej strony udostępniona na cudzych stronach
Forum PHP.pl > Forum > Przedszkole
Demoneos
Mam stronę o pogodzie i chciałbym dać możliwość umieszczenia np. ostatnich temperatur na innych stronach. Czy lepiej to zrobić przez zewnętrzne includowanie (czyli w PHP), czy może w JavaScript?
kamil4u
A jak Ty chcesz to osiągnąć za pomocą JS, która nie może odwoływać się do innych stron? Zrób to w PHP smile.gif
Demoneos
Chodziło mi o coś takiego jak jest np. w reklamach Google - umieszczam kod reklamy w JS na swojej stronie, a on odwołuje się do skryptu JS na zewnętrznym serwerze.

PS Przed chwilą zrobiłem próbę z PHP i nie działa - prawdopodobnie połączenie zablokował serwer na którym znajduje się "cudza" strona (w której umieszczony został kod zawierający instrukcję include).
kamil4u
Nie wiem, jak to wygląda w reklamach Google, ale prawdopodobnie korzysta on z AJAX-a, więc to na jedno wychodzi. Rozwiązanie korzystające z PHP jest też o tyle dobre, że użytkownicy nie mający JS nic nie zobaczą, a tak prawdopodobnie wszyscy będą zadowoleni smile.gif

Cytat
PS Przed chwilą zrobiłem próbę z PHP i nie działa - prawdopodobnie połączenie zablokował serwer na którym znajduje się "cudza" strona (w której umieszczony został kod zawierający instrukcję include).

Daj kod smile.gif
Pawel_W
Cytat(kamil4u @ 26.07.2010, 15:00:01 ) *
Nie wiem, jak to wygląda w reklamach Google, ale prawdopodobnie korzysta on z AJAX-a, więc to na jedno wychodzi. Rozwiązanie korzystające z PHP jest też o tyle dobre, że użytkownicy nie mający JS nic nie zobaczą, a tak prawdopodobnie wszyscy będą zadowoleni smile.gif

z jakiego ajaxa? przecież php może generować automatycznie pliki .js, ustawiasz tylko
  1. header('content-type: text/javascript');

i dalej generujesz sobie skrypt, który wyświetli Ci pogodę smile.gif

tak działają niektóre liczniki odwiedzin na stronę winksmiley.jpg
kamil4u
Oczywiście masz rację(zapomniałem sad.gif )
!*!
A tak z ciekawości to jak wstawiasz to na innej stronie?
Demoneos
Wstawiam tak:
  1. $includeFile = file_get_contents("http://moja-strona.pl/skrypt.php");
  2. echo $includeFile;


Próbowałem też za pomocą include, ale również nie działało. Tutaj można przeczytać więcej:
http://www.learnphponline.com/errors/url-f...r-configuration


Cytat(Pawel_W @ 26.07.2010, 15:04:08 ) *
z jakiego ajaxa? przecież php może generować automatycznie pliki .js, ustawiasz tylko
  1. header('content-type: text/javascript');

i dalej generujesz sobie skrypt, który wyświetli Ci pogodę smile.gif

tak działają niektóre liczniki odwiedzin na stronę winksmiley.jpg


No no, nie wiedziałem że takie cuda są możliwe smile.gif
!*!
To nie wygląda zbyt ładnie. niby dlaczego użytkownik który to wkleja musi mieć PHP? Prawie wszystkie widgety które są do wklejenia oparte są o JS k?óry wyświetla zawartość strony/skryptu.

Takie rozwiązanie jest lepsze z kilku powodów

1. Użytkownik nie musi mieć PHP
2. Nie zdradzasz w jakim języku została napisana strona a to przekłada się na +1 do bezpieczeństwa
3. Użytkownik nie musi się martwić o nic poza wklejeniem kodu, w Twoim przykładzie może być to kolizyjne.

Także przejdź na widget JS który wyświetli zawartość Twojej strony. Dzisiaj i tak KAŻDY ma włączony JS, tylko fanatycy bocznej dziurki w nosie go wyłączą. Warto dbać o margines?

I kamil4u nie pisz głupot że się nie da.
  1. <script type="text/javascript" src="http://moja-strona.pl/skrypt.php"></script>

a na tej stronie dajesz później
[JAVASCRIPT] pobierz, plaintext
  1. document.write("Treść")
[JAVASCRIPT] pobierz, plaintext
Demoneos
W skrypcie wstawiłem kod:
  1. <?php
  2. header('Content-type: text/javascript');
  3. document.write("Hello world");
  4. ?>

Natomiast na stronie która ma wczytać ten kod wstawiłem:
  1. <script type="text/javascript" src="http://moja-strona.pl/skrypt.php"></script>


Niestety na tej stronie nie widać napisu "Hello world", natomiast gdy uruchamiam skrypt bezpośrednio, to dostaję błąd:
  1. <br />
  2. <b>Fatal error</b>: Call to undefined function write() in <b>skrypt.php</b> on line <b>3</b><br />


Czy popełniłem gdzieś błąd?
!*!
[JAVASCRIPT] pobierz, plaintext
  1. document.write("Hello world");
[JAVASCRIPT] pobierz, plaintext


To JS, nie umieszczaj tego w znaczniku PHP, a jak już to przez echo.
Demoneos
Wyrzuciłem to poza php:
  1. <?php
  2. header('Content-type: text/javascript');
  3. ?>
  4. document.write("Hello world");


i działa smile.gif A jeżeli chciałbym teraz coś zrobić w sekcji PHP - np. przypisać zmiennej jakąś wartość, to jak tą zmienną mógłbym przekazać do document.write, żeby ją wyświetlić?
!*!
Tak jak napisałem wyżej.

  1. <?php
  2. header('Content-type: text/javascript');
  3. $zmienna = 'Hello world';
  4. echo 'document.write("'.$zmienna.'");';
  5. ?>
Demoneos
Cytat(!*! @ 26.07.2010, 17:24:18 ) *
Także przejdź na widget JS który wyświetli zawartość Twojej strony. Dzisiaj i tak KAŻDY ma włączony JS, tylko fanatycy bocznej dziurki w nosie go wyłączą. Warto dbać o margines?


Chciałbym jednak zadbać o margines ;) Wystarczyłoby wkleić na stronę taki kod:
  1. <script type="text/javascript" src="http://moja-strona.pl/skrypt.php"></script>
  2. <noscript>
  3. <iframe src="http://moja-strona.pl/skrypt.php">
  4. Twoja strona nie obsluguje ramel
  5. </iframe>
  6. </noscript>


i wówczas również Ci którzy mają wyłączoną JavęScript mogliby się cieszyć prognoza pogody na swojej stronie smile.gif
Czy takie rozwiązaniem ma jakieś wady, czy też powody dla których niewskazane jest go stosować?
Fifi209
Cytat(Demoneos @ 27.07.2010, 13:54:54 ) *
Chciałbym jednak zadbać o margines winksmiley.jpg Wystarczyłoby wkleić na stronę taki kod:
  1. <script type="text/javascript" src="http://moja-strona.pl/skrypt.php"></script>
  2. <noscript>
  3. <iframe src="http://moja-strona.pl/skrypt.php">
  4. Twoja strona nie obsluguje ramel
  5. </iframe>
  6. </noscript>


i wówczas również Ci którzy mają wyłączoną JavęScript mogliby się cieszyć prognoza pogody na swojej stronie smile.gif
Czy takie rozwiązaniem ma jakieś wady, czy też powody dla których niewskazane jest go stosować?

Wszystko ma swoje wady, zalety. Nie widzę przeszkód, aby to wyświetlić w ten sposób oczywiście rozmiar ramki musisz dopasować do wymagań - lecz z drugiej strony, kto dziś ma wyłączony javascript? Jest to tak niewielka garstka ludzi... smile.gif
Crozin
Cytat
Nie zdradzasz w jakim języku została napisana strona a to przekłada się na +1 do bezpieczeństwa
A co to ma do rzeczy. Równie dobrze taki kod może wykonać w Pythonie, Rubym czy Javie.

Co do problemu - odpowiedź jest całkiem prosta, ale wymaga troszkę pracy: przygotuj dobre API dla deweloperów - dzięki temu, z usług Twojej strony będzie korzystać większa grupa ludzi. Nic nie stoi na przeszkodzie byś umożliwił dostęp z poziomu JS, PHP i innych języków wykorzystywanych po stronie serwera czy nawet z poziomu zwykłego iframe.

Popatrz sobie jak mają to zrobione serwisy typu FaceBook czy Twitter. Nie musisz pisać oczywiście tak rozbudowanego, ale możesz się wzorować na ich rozwiązaniach.
!*!
Cytat(Crozin @ 27.07.2010, 15:03:32 ) *
A co to ma do rzeczy. Równie dobrze taki kod może wykonać w Pythonie, Rubym czy Javie.


To że nie wiesz w jakim języku została napisana strona. Trudno zrobić kuku aplikacje w javie myśląc że jest to python. Oczywiście jak do dobrze zamaskujesz bo "skrypt.php" to raczej tego nie robi.
Crozin
Cytat
Trudno zrobić kuku aplikacje w javie myśląc że jest to python.
O ile nie próbujesz zrobić "kuku" poprzez wstrzyknięcie własnego kodu to nie ma to większego znaczenia.
Cytat
To że nie wiesz w jakim języku została napisana strona.
Kod po stronie mojego serwera:
  1. <?php
  2.  
  3. $data = array(
  4. array('title' => 'Wpis #1', 'id' => 1),
  5. array('title' => 'Wpis #2', 'id' => 2),
  6. array('title' => 'Wpis #3', 'id' => 3),
  7. array('title' => 'Wpis #4', 'id' => 4)
  8. );
  9.  
  10. function arrayToXml(array $data) {
  11. $document = new DOMDocument();
  12.  
  13. $rootNode = $dom->createElement('entries');
  14. foreach ($data as $element) {
  15. $e = $rootNode->createElement('entry', $element['title']);
  16. $e->setAttribute('id', $element['id']);
  17. $rootNode->appendChild($e);
  18. }
  19.  
  20. $document->appendChild($rootNode);
  21. return $document->saveXml();
  22. }
  23.  
  24. if ($_SERVER['REQUEST_URI'] == '/entires') {
  25. echo (isset($_GET['format']) && $_GET['format'] == 'json') ? json_encode($data) : arrayToXml($data);
  26. }


Różne wersje API (pseudokod):

java script:
Kod
var entries = MyAPP.apiCall('/entries?format=json');
PHP:
Kod
$entries = $myApp->apiCall('/entries');
Java:
Kod
EntriesCollection entries = myApp.apiCall("/entries");
Python:
Kod
entries = myApp.apiCall('/entries')


I jak niby mając którykolwiek z kodów "dla klienta" rozpoznasz czy na serwerze używam PHP czy Ruby?
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.