Grupa
MagazynyInternetowe.pl
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
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. 2. Okno pop-up wyskakujące po wskazaniu jednej
z miniatur
|
Rozwiązanie takie znajdziemy m.in. w serwisach Template Monster, iStockphoto oraz WebHandel.
W omawianej galerii:
glob()),
onmouseover, onmousemove oraz onmouseout,
onmouseover pojawia się wyskakujące okienko pop-up,
onmousemove okienko pop-up jest przesuwane do nowego położenia,
onmouseout ukrywa okienko pop-up,
XMLHttpRequest,
XMLHttpRequest.
Rys. 3. Okno pop-up wyświetlane na innej z miniatur
|
Rys. 4. Fotografie zawarte w oknie pop-up mogą mieć
dowolny rozmiar
|
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.:
1. mini/foto-03.jpg 2. duze/foto-03.jpg
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:
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:
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ń:
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.
Powiązane publikacje
Komentarzy: 7
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;
}
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.
witam serdecznie. możecie mi podać kod do funkcji: array_1dim_to_2dim(). nigdzie nie mogę jej znaleźć
Bo mi sie tak podoba. Mój wniósł o wiele wiecej do dyskusji niż Twój....
Malo rozumiesz i nie chce Ci sie zrozumiec... to po co ten komentarz?
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.
Artykuły tego autora:
Wykorzystanie technologii AJAX niesie wiele korzyści. Oferuje on znacznie więcej niż zwijane menu i ładowane na bieżąco zdjęcia. Bardzo ważne jest asynchroniczne przesyłanie informacji i nowe sposoby w podejściu do usług online.
Polecamy:
Na skróty:
Magazyny Internetowe| Co za ile| Programy| Praca| Magazyn Internet| Internet Maker| Web Toster| ForumNasze serwisy: