Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Metoda na wyświetlanie fragmentu innej strony, ...czyli jak wyciąć fragment ze strony A do strony B.
poldo
post 1.07.2011, 15:39:44
Post #1





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 24.11.2007

Ostrzeżenie: (0%)
-----


Na potrzeby problemu, załóżmy że mamy dwie strony, przykładowo:

Strona1.html
  1. (...)
  2.  
  3. <div id="bla">
  4. bla bla bla bla
  5. </div>
  6.  
  7. <img src="bla/bla.jpg" id="hohoho">
  8.  
  9. <div id="cium">cium cium cium cium</div>
  10.  
  11. (...)

oraz

Strona2.html
  1. (...)
  2.  
  3. <div id="hyhy">
  4. hy hy hy hy hy hy hy hy
  5. </div>
  6.  
  7. <iframe style="abc"></iframe>
  8.  
  9. <div id="gie">gie gie gie gie gie</div>
  10.  
  11. (...)


Strona1.html to strona która znajduje się gdzieś daleko i do której nie ma się dostępu oraz na której zawarte są pewne informacje. Strona2.html to strona którą możemy dowolnie edytować i w której w polu <iframe> ma znaleźć się fragment Strona1.html, ale tak by był widoczny TYLKO sam obrazek - bez zawartości "bla bla" czy "cium cium".

Dotychczasowe rozwiązanie problemu było proste - wystarczyło odpowiednio ustawić w CSS wielkość pola oraz marginesy dla <iframe> i pokazywał się tylko sam obrazek. Jednak jeżeli na Strona1.html, zmieniła się wielkość lub ilość tekstu w polu <div id="bla"> (lub pojawiał się jakiś dodatkowy element przed obrazkiem) to położenie obrazka na stronie się zmieniało i statycznie ustawione marginesy w CSS dla obrazka wyświetlały błędny fragment strony.

Pytanie teraz jest jakie, czy jest jakiś sposób, nie koniecznie tylko związany z samym CSS, dzięki któremu marginesy na <iframe> mogłyby by zmieniać się w zależności od położenia obrazka. Albo może istnieje jakiś inny sposób?

Oczywiście obrazek to tylko prosty element dla tego przykładu, więc nie piszcie że można skopiować adres obrazka lub zgrać go na własny dysk ;-) Chodzi mi o jakąś skuteczną metodę, dzięki której będzie można wyświetlać dynamicznie zmieniający się dany fragment strony, opierając się na np. ID elementów znajdujących się na tej nieedytowalnej stronie. Może jest jakaś inna metoda niż statyczne marginesy dla <iframe>? Parsowanie w PHPie też odrzucamy, całość raczej musi wykonać się po stronie okna przeglądarki...

Ten post edytował poldo 1.07.2011, 15:46:48
Go to the top of the page
+Quote Post
MateuszS
post 1.07.2011, 15:42:34
Post #2





Grupa: Zarejestrowani
Postów: 1 429
Pomógł: 195
Dołączył: 6.10.2008
Skąd: Kraków/Tomaszów Lubelski

Ostrzeżenie: (0%)
-----


Skoro to sam obrazek to nie można zwyczajnie go pobrać? Jeżeli mu się jednak adres zmienia to można zawsze poradzić sobie za pomocą curl/file_get_contents czy tam innych cudów. O to biega?


--------------------
O! Zimniok :P
Go to the top of the page
+Quote Post
poldo
post 1.07.2011, 15:48:43
Post #3





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 24.11.2007

Ostrzeżenie: (0%)
-----


Powtórzę:

Cytat(poldo @ 1.07.2011, 16:39:44 ) *
Oczywiście obrazek to tylko prosty element dla tego przykładu, więc nie piszcie że można skopiować adres obrazka lub zgrać go na własny dysk ;-) Chodzi mi o jakąś skuteczną metodę, dzięki której będzie można wyświetlać dynamicznie zmieniający się dany fragment strony, opierając się na np. ID elementów znajdujących się na tej nieedytowalnej stronie. Może jest jakaś inna metoda niż statyczne marginesy dla <iframe>? Parsowanie w PHPie też odrzucamy, całość raczej musi wykonać się po stronie okna przeglądarki...


Nie chodzi o obrazek tylko o pewien zaawansowany element, aby nie robić niepotrzebnie bałaganu dla tego przykładu przyjęliśmy że jest to obrazek, ale można przyjąć że jest to tabela czy cokolwiek innego. I tak jak pisałem wszelkie parsowanie oraz CURLe w PHPie odpadają...

Ten post edytował poldo 1.07.2011, 15:49:39
Go to the top of the page
+Quote Post
Sephirus
post 1.07.2011, 17:55:23
Post #4





Grupa: Zarejestrowani
Postów: 1 527
Pomógł: 438
Dołączył: 28.06.2011
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Odpowiedź jest prosta - nie da się

Dlaczego?

Strona A na której jest IFRAME ze stroną B nie ma dostępu do tej strony z poziomu JS, CSS czy czegokolwiek - nie da się więc określić pozycji elementu, który ma być widoczny w iframe.

PHP bez problemu sobie z tym poradzi ale CSS/JS/HTML nie ma szans - przykro mi.

EDIT: Jak chcesz (o ile to jest w miarę legalne) to napisz mi co i z jakiej strony chcesz wyciągnać, może da się trafić na jakąś prawidłowość wink.gif

Ten post edytował Sephirus 1.07.2011, 18:00:45


--------------------
If you're good at something, never do it for free.
Potrzebujesz skryptu JS lub PHP - szukasz kogoś kto przetestuje twoją aplikację pod względem bezpieczeństwa? Szybko i solidnie? Napisz ;)
Mój blog - Jak zwiększyć wydajność front-endu - O buforowaniu wyjścia w PHP słów kilka...
Go to the top of the page
+Quote Post
Adi32
post 1.07.2011, 18:08:13
Post #5





Grupa: Zarejestrowani
Postów: 348
Pomógł: 26
Dołączył: 8.10.2008
Skąd: Lublin

Ostrzeżenie: (0%)
-----


Nie czytałem całości szczerze mówiąc ale próbowałeś w taki sposób aby najpierw pobrać stronę:
  1. $strona = file_get_contents(http://www.cos.pl/module/controller/strona.html);
  2.  


A potem może coś takiego:

  1. <script type="text/javascript">
  2.  
  3. var strona = "<?=$strona?>";
  4.  
  5. $('iframe').html($(strona).find("#hohoho"));
  6.  


Ten post edytował Adi32 1.07.2011, 18:09:49


--------------------
Wolałem języki z rodziny C ale poszedłem na łatwizne...
Go to the top of the page
+Quote Post
by_ikar
post 1.07.2011, 21:25:50
Post #6





Grupa: Zarejestrowani
Postów: 1 798
Pomógł: 307
Dołączył: 13.05.2009
Skąd: Gubin/Wrocław

Ostrzeżenie: (0%)
-----


A za pomocą php, to albo wyrażenia regularne, albo poruszanie się bezpośrednio po DOM, jeżeli już daną stronę pobierzesz. Jako że DOM i wyrażenia się dość długo pisze, dobrą biblioteką jest phpQuery, którym po elementach strony możesz się poruszać jak w jQuery, wiele razy tego używałem biggrin.gif link: http://code.google.com/p/phpquery/

EDIT: zapomniałem, dzięki takiemu zabiegowi nie musisz używać ramek wink.gif

Ten post edytował by_ikar 1.07.2011, 21:27:30
Go to the top of the page
+Quote Post
poldo
post 3.07.2011, 21:26:39
Post #7





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 24.11.2007

Ostrzeżenie: (0%)
-----


Powyższe metody się niestety nie sprawdzą, ponieważ Strona1.html musi być wczytana przez przeglądarkę z powodu zabezpieczeń. Jeżeli przepuścimy ją przez PHP-a to ten element, który chcemy wyświetlić nie pokaże się.

Może inaczej, dla przykładu przyjmijmy że Strona1.html to np.:

http://www.tvp.pl/rozrywka/festiwale-i-kon...u-w-opolu/60527

A na Strona2 zależy nam na odtworzeniu tylko samego filmu, którego położenie się zmienia, bo na stronie np. wyświetlają się w górnej części reklamy o różnych wymiarach.
Go to the top of the page
+Quote Post
Pawel_W
post 3.07.2011, 21:45:40
Post #8





Grupa: Zarejestrowani
Postów: 1 675
Pomógł: 286
Dołączył: 15.06.2009
Skąd: Wieliczka

Ostrzeżenie: (0%)
-----


tworzysz sobie ramkę o wymiarach takich jak ten film, ładujesz do ramki skrypt.php, który pobierze kod strony i doklei do niego kawałek .js

ten kawałek .js powinien wyliczyć pozycję filmu względem okna a następnie odpowiednio ustawić marginesy stronie, tak, żeby film znalazł się w Twojej "ramce"

to chyba najbardziej łopatologiczny sposób, jeżeli chcesz ładować całą stronę i pokazać tylko jakiś jej fragment, prościej by było file_get_contents + preg_match smile.gif
Go to the top of the page
+Quote Post
poldo
post 4.07.2011, 15:17:53
Post #9





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 24.11.2007

Ostrzeżenie: (0%)
-----


Cytat(Pawel_W @ 3.07.2011, 22:45:40 ) *
tworzysz sobie ramkę o wymiarach takich jak ten film, ładujesz do ramki skrypt.php, który pobierze kod strony i doklei do niego kawałek .js

ten kawałek .js powinien wyliczyć pozycję filmu względem okna a następnie odpowiednio ustawić marginesy stronie, tak, żeby film znalazł się w Twojej "ramce"

to chyba najbardziej łopatologiczny sposób, jeżeli chcesz ładować całą stronę i pokazać tylko jakiś jej fragment, prościej by było file_get_contents + preg_match smile.gif


Próbowałem, ale tak jak pisałem...

...Strona1.html musi być wczytana przez przeglądarkę z powodu zabezpieczeń. Jeżeli przepuścimy ją przez PHP-a to ten element, który chcemy wyświetlić nie pokaże się...

Czyli wszystko musi być wykonane po stronie przeglądarki ;/

Ten post edytował poldo 4.07.2011, 15:18:32
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 26.04.2025 - 04:27