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: 8
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ę ![]()
Proszę o odp ![]()
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....
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: