Newsletter

Grupa MagazynyInternetowe

Online: 955

Wyszukiwarka

AJAX, PHP

AJAX Kurs od podstaw - interakcja AJAX - PHP

AJAX Kurs od podstaw - interakcja AJAX - PHP W tym odcinku kursu Ajaksa zajmiemy się interakcją Ajax - PHP. Zapytania HTTP wysyłane w tle przez obiekt XMLHttpRequest będą odwoływały się do skryptów PHP. Jako przykład przygotowałem galerię fotografii. Miniaturowe zdjęcia zawarte w galerii możemy podglądać wskazując je myszką. Wyskakujące okienka pop-up zawierają powiększoną fotografię oraz dodatkowe dane. Skrypt PHP będzie odpowiadał za przekazanie do Ajaksa danych EXIF konkretnej fotografii.

Włodzimierz Gajda

Okienka pop-up z podglądem fotografii

Galeria fotografii widoczna na rys. 1 prezentuje zestawienie miniaturowych fotografii. Wskazanie dowolnej fotografii wskaźnikiem myszy powoduje pojawienie się małego okienka (tzw. pop-up) zawierającego powiększoną fotografię. Okienko oprócz powiększonego zdjęcia zawiera dodatkowe informacje: nazwę aparatu, jakim wykonano zdjęcie, wartości przysłony, czasu oraz ogniskowej.

Okno pop-up zawiera zawsze dane bieżące o wskazanej fotograf ii, co widać na rys. 3. Oczywiście liczba wierszy i kolumn tabeli miniatur, jak również wymiary zdjęcia wyświetlanego w oknie pop-up mogą być dowolne (rys. 4). Dodatkowo, ok na pop-up wędrują za wskaźnikiem myszki, jego przesunięcie powoduje przesunięcie ok na pop-up.

Rys. 1. Galeria: tabela miniatur Rys. 1. Galeria: tabela miniatur Rys. 2. Okno pop-up wyskakujące po wskazaniu jednej
z miniatur Rys. 2. Okno pop-up wyskakujące po wskazaniu jednej z miniatur

Rozwiązanie takie znajdziemy m.in. w serwisach Template Monster, iStockphoto oraz WebHandel.

Rozwiązanie - opis krok po kroku

W omawianej galerii:

  • men u strony (tj. tabelkę miniatur) generujemy w PHP na podstawie zawartości folderu mini/ (funkcja glob()),
  • każda miniaturka obsługuje zdarzenia: onmouseover, onmousemove oraz onmouseout,
  • po wystąpieniu zdarzenia onmouseover pojawia się wyskakujące okienko pop-up,
  • po wystąpieniu zdarzenia onmousemove okienko pop-up jest przesuwane do nowego położenia,
  • zdarzenie onmouseout ukrywa okienko pop-up,
  • w okienku pop-up zostaje umieszczone powiększone zdjęcie. Pobranie powiększonej fotografii jest wykonywane asynchronicznie w tle przez przeglądarkę - nie jest do tego wykorzystany obiekt XMLHttpRequest,
  • poniżej powiększonej fotografii w oknie pop-up zostają umieszczone dane EXIF wybranego zdjęcia - dane EXIF są pobierane przez obiekt XMLHttpRequest.
Rys. 3. Okno pop-up wyświetlane na innej z miniatur Rys. 3. Okno pop-up wyświetlane na innej z miniatur Rys. 4. Fotografie zawarte w oknie pop-up mogą mieć
dowolny rozmiar Rys. 4. Fotografie zawarte w oknie pop-up mogą mieć dowolny rozmiar

Krok 1: dane

Fotografie zawarte w galerii należy przygotować w dwóch formatach: większym i mniejszym. Miniaturki umieszczamy w folderze mini/, zaś fotografie duże w folderze duze/. Duże i małe zdjęcia muszą być zapisane w plikach o identycznych nazwach, np.:

[+]
 
 
Pobierz
1. mini/foto-03.jpg
2. duze/foto-03.jpg

Krok 2: tabela miniatur

Za wydrukowanie tabeli miniatur odpowiadają dwa proste skrypty PHP. Na początku skryptu index.php w tablicy $plks ustalamy nazwy wszystkich plików graficznych o rozszerzeniu .jpg z folderu mini/. Tablicę $plks przekształcamy na tablicę dwuwymiarową o zadanej liczbie kolumn. Odpowiada za to funkcja array_1dim_to_2dim() z pliku array.inc.php:

[+]
 
PHP
Pobierz
1. <?php
2. require_once 'array.inc.php';
3. $plks = glob('mini/*.jpg');
4. $ile_obrazow = count($plks);
5. $ile_kolumn = 8;
6. $ile_wierszy = ($ile_obrazow / $ile_kolumn);
7. $plks = array_1dim_to_2dim($plks, $ile_kolumn);
8. ?>

Tabela XHTML jest drukowana w podwójnej pętli for sterowanej liczbą wierszy i kolumn tabeli:

[+]
 
PHP
Pobierz
 1. for ($i = 0; $i < $ile_wierszy; $i++) {
 2.   echo '<tr>';
 3.   for ($j = 0; $j < $ile_kolumn; $j++) {
 4.     if (isset($plks[$i][$j]) && ($plks[$i][$j] != '')) {
 5.       echo '<td><img src="' . $plks[$i][$j] ' onmouseover="show_popup(this,
    event);"'. ' onmousemove="move_popup(event) ;"'. ' onmouseout="hide_popup();"'.
    ' alt="" /></td>';
 6.     } else {
 7.       echo '<td></td>' . "n";
 8.     }
 9.   }
10.   echo '</tr>';
11. }

Drukowane komórki td zawierają obrazy ze zdefiniowaną obsługą zdarzeń:

[+]
 
HTML
Pobierz
1. <td>
2. <img src="mini/foto-002.jpg" onmouseover="show_popup(this, event);"
   onmousemove="move_popup(event);" onmouseout="hide_popup();" alt="" />
3. </td>

Parametr this zawiera wskaźnik do klikniętego obrazu, zaś event umożliwia odczyt współrzędnych wskaźnika myszy.

22 kwietnia 2008

Powiązane publikacje

AJAX Kurs od podstaw - wymiana fragmentu strony

AJAX Kurs od podstaw - wymiana fragmentu strony

AJAX Kurs od podstaw - wyszukiwarka

AJAX Kurs od podstaw - wyszukiwarka

AJAX Kurs od podstaw - interaktywne aplikacje WWW

AJAX Kurs od podstaw - interaktywne aplikacje WWW

 
Skomentuj
ten artykuł

Komentarzy: 8

Kod obrazkowy
(Kliknij, aby zmienić)
 
Przejdż do tego postu na forum Friday, 19.03.2010 14:44Maciej xD

hej wie ktoś czemu mi nie wyświetla powiększenia zdjęcia. I jeszcze jedno w tym kodzie poniżej jest błąd:
for ($i = 0; $i < $ile_wierszy; $i++) {
echo '<tr>';
for ($j = 0; $j < $ile_kolumn; $j++) {
if (isset($plks[$i][$j]) && ($plks[$i][$j] != '')) {
echo '<td><img src="' . $plks[$i][$j] ' onmouseover="show_popup(this, event);"'. ' onmousemove="move_popup(event) ;"'. ' onmouseout="hide_popup();"'. ' alt="" /></td>';
} else {
echo '<td></td>' . "n";
}
}
echo '</tr>';
}
Czy nie powinno być tak?:
for ($i = 0; $i < $ile_wierszy; $i++) {
echo '<tr>';
for ($j = 0; $j < $ile_kolumn; $j++) {
if (isset($plks[$i][$j]) && ($plks[$i][$j] != '')) {
echo '<td><img src=" . $plks[$i][$j] " onmouseover="show_popup(this, event);"'. ' onmousemove="move_popup(event) ;"'. ' onmouseout="hide_popup();"'. ' alt="" /></td>';
} else {
echo '<td></td>' . "n";
}
}
echo '</tr>';
}
A jeszcze dodam że mam serwer na kompie i znam php a ajax-a się dopiero uczę smile.gif
Proszę o odp smile.gif

Przejdż do tego postu na forum Sunday, 13.12.2009 01:46FIREMAN

Też nie mogłem nigdzie znaleść funkcii function array_1dim_to_2dim(); to sobie ją napisałem
Udostępniam kod, bardzo proszę o zachowanie praw autorskich)))

/* Written by Andrew Stetsyk 12.10.2009
Copyright © 1989, 1991 Free Software Foundation, Inc., 675 Mass Ave,
Cambridge, MA 02139 USA.
*/
function array_1dim_to_2dim($table, $ile_kolumn){
$ile_obrazow = count($table);
$ile_wierszy = ceil($ile_obrazow / $ile_kolumn);
echo "ILE WIERSZY".$ile_wierszy;
$index=0;
$tmp=Array();
for ( $rzad = 0; $rzad < $ile_wierszy ; $rzad++ )
{
$tmp[$rzad] = Array();
for ( $kolumna = 0 ; $kolumna < $ile_kolumn ; $kolumna++,$index++){
if ($index < $ile_obrazow){
$tmp[$rzad][$kolumna]=$table[$index];}
}
}
return $tmp;
}

Przejdż do tego postu na forum Saturday, 4.10.2008 19:45D

Czy ktoś może wie, jak za pomocą Ajaxa i php napisać coś w stylu pokoju graczy, tzn. dwie osoby wchodzą na jeden adres url i jest między nimi interakcja- jak jedna z nich kliknie coś, to innej coś innego się wyświetla.

Przejdż do tego postu na forum Wednesday, 10.09.2008 19:17pony

witam serdecznie. możecie mi podać kod do funkcji: array_1dim_to_2dim(). nigdzie nie mogę jej znaleźć

Przejdż do tego postu na forum Monday, 5.05.2008 13:36blogihno

Bo mi sie tak podoba. Mój wniósł o wiele wiecej do dyskusji niż Twój....

Przejdż do tego postu na forum Monday, 5.05.2008 11:10MateuszM

CYTAT(Bolo @ 5.05.2008)
Malo rozumiesz i nie chce Ci sie zrozumiec... to po co ten komentarz?


Od tak, bo każdy ma prawo do wyrażenia swojej opinii na dany temat.

Niestety muszę również przyznać rację blogihno odnośnie nieczytelności kodów dodawanych do artykułów, choć o wiele więcej mam do zarzucenia wersjom drukowanym niż tej internetowej.

Poprę go również jeśli chodzi o niską wartość merytoryczną takich artykułów, które tak na prawdę nic nie wnoszą nowego do tematu (no może w komentowanym artykule ciekawa jest funkcja przesuwająca okienko) i sprawiają wrażenie wariacji na temat szablonu AJAX+PHP. Należy jednak zrozumieć, że artykuły takie są skierowane do szerokiej grupy początkujących i niedoświadczonych użytkowników internetu, którzy dopiero zaczynają swoją przygodę z "programowaniem". Pewnym wyjściem byłoby przygotowanie osobnej serii materiałów opatrzonych klauzulą "zaawansowane...", skierowanych właśnie do osób, które w temacie siedzą już długo i pragną poczuć swędzenie pod czaszką lub uciechę z odkrycia czegoś czego jeszcze nie widzieli.


Pozdrawiam,
MateuszM

Przejdż do tego postu na forum Monday, 5.05.2008 09:31Bolo

Malo rozumiesz i nie chce Ci sie zrozumiec... to po co ten komentarz?

Przejdż do tego postu na forum Monday, 5.05.2008 08:55blogihno

Szczerze mówiać, jak przeglądam takie tutoriale, ktore maja troche kodu tu, troche tam, kawełek na jednej stronie, kawałek na drugiej to mało rozumiem z tego co tu jest napisane i może nie chce mi się rozumieć. AJAX w takiej dość podstawowej wersji jak obsługa formularzy, czy galerie, jakieś dociąganie danych jest dość prosty i nie wymaga wlasciwie podstawowej wiedzy o Js i PHP(tzn troche wiecej niż echo 'hello world'). Składa się właściwie na 4 kroki:
1. funkcja ktora ustawi dane ktore chcemy przesłać do php
2.funkcja ktora obsłuży nam readyState
3.funkcja która wysle dane do php-a
4.Php ktory odbierze i obsłuży dane no i w funkcji readyState odbieramy to co nam wyslal php badz nie... .

Sądząc po zmiennych artykuł inspirowany na książce do Ajaxa.

Zobacz wszystkie komentarze »

Autor

Włodzimierz Gajda

Artykuły tego autora:

Newsletter

Jesli chcesz być na bieżąco z tym co się dzieje na stronie magazynu INTERNET Maker zapisz się do naszego newslettera.