Dzisiejszym wpisem z serii “Poradniki” wracam do pierwotnych założeń, jakie przyświecały powstaniu tej kategorii, czyli “wpisy ku pamięci”. Ich celem jest pozostawienie w ogólnodostępnym miejscu informacji na temat konkretnego zadania tak, by nie musieć ponownie szukać rozwiązania, które na ogół jest banalne. Tyle tytułem wstępu, do rzeczy.
Każdy kto miał do zrobienia stronę z galerią zdjęć, stawał przed wieloma problemami z tym związanymi. Począwszy od stworzenia bezpiecznego i funkcjonalnego formularza, na przechowywaniu zdjęć kończąc. Wszystkie problemy można rozwiązać w bardzo prosty sposób w kilkunastu wierszach kodu.
Co musimy zrobić? Stworzyć galerię zdjęć w serwisie Picasaweb, a następnie dodać do niej zdjęcia. Jeśli zdjęć mamy dużo, korzystamy z aplikacji desktopowej – Picasa. Na koniec pozostanie napisanie prostego skryptu, który pobierze zdjęcia.
/* cache */
$frontendOptions = array(
'lifetime' => 3600 * 3,
'automatic_serialization' => true
);
$backendOptions = array(
'cache_dir' => APPLICATION_PATH . '/../data/cache'
);
$cache = Zend_Cache::factory('Core', 'File', $frontendOptions, $backendOptions);
/* utworzenie obiektu, ktory pobierze zdjecia */
$service = new Zend_Gdata_Photos();
$photos = array();
/* jesli nie ma zdjec w cache, pobierz je z Picasy */
if(!$photos = $cache->load('photos')) {
/* obiekt zapytania do albumow zdjec */
$query = new Zend_Gdata_Photos_AlbumQuery();
/* ustawienie nazwy uzytkownika, z konta ktorego beda pobierane zdjecia */
$query->setUser('some.username');
/* ustawienie nazwy albumu, z ktorego beda pobierane zdjecia */
$query->setAlbumName('SomeAlbumame');
/* pobranie zdjec */
$albumFeed = $service->getAlbumFeed($query);
/* pobranie informacji o sciezce do zdjec */
foreach($albumFeed as $photo) $photos[] = (string)$photo->content->src;
/* zapisanie danych do cache */
$cache->save($photos, 'photos');
}
Uważni obserwatorzy na pewno zauważą, iż scieżki, kierują do zdjęć pełnowymiarowych. Na szczęście Picasa tworzy miniaturki zdjęć i “przechowuje” je w folderach o nazwach zawierających szerokość zdjęcia. Aby dostać się do miniaturek, wystarczy użyć funkcji pathinfo.
$info = pathinfo($photo);
$mini = $info['dirname'] . '/s150/' . $info['basename'];
W miejscu s150 można wstawić dowolny inny rozmiar zdjęcia poprzedzony małą literą s, np s237.