Niezalogowany [ logowanie ]
Subskrybuj kanał ATOM Kanał ATOM    Subskrybuj kanał ATOM dla tagu zend_framework Kanał ATOM (tag: zend_framework)

Autor wpisu: batman, dodany: 11.08.2010 19:42, tagi: zend_framework

Problem “Select query cannot join with another table” jest dosyć powszechny, a jego rozwiązanie wyjątkowo banalne. Niemniej wymaga kilku/kilkunastu minut na analizę i wprowadzenie poprawki. Błąd pojawia się w momencie, gdy chcemy na obiekcie Zend_Db_Table_Select, skorzystać z metody join. Najprostszym obejściem tego problemu jest użycie metody setIntegrityCheck z argumentem false. Warto również pamiętać o przekazaniu do metody select argumentu true (Zend_Db_Table_Abstract::SELECT_WITH_FROM_PART), gdyż w przeciwnym razie zapytanie nie będzie zawierało klauzuli join. Poniżej prosty przykład.

$model = new Application_Model_Db_Foo();
$select = $model->select(Zend_Db_Table_Abstract::SELECT_WITH_FROM_PART);
$select->setIntegrityCheck(false);
$select->joinLeft(array('b' => 'bar'), 'b.id = idbar');

Autor wpisu: batman, dodany: 09.08.2010 20:00, tagi: zend_framework

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.

Autor wpisu: batman, dodany: 06.08.2010 22:03, tagi: zend_framework

Dzisiaj w serwisie Zend Developer Zone pojawiła się informacja o wydaniu pierwszego milestone’a Zend Frameworka 2. Ze zmian jakie się pojawiły można wymienić:

  • usunięcie wszystkich wywołań require_once
  • migracja do przestrzeni nazw
  • całkowita przebudowa pakietu testującego
  • przepisanie modułu Zend\Session oraz dodanie nowego komponentu Zend\SignalSlot odpowiedzialnego za obsługę obserwatorów
  • dodanie przestrzeni nazw Zend\Stdlib zawierającej interfejsy dla klas rozszerzających klasy Spl

Ponadto opublikowana została mapa drogowa (roadmap) projektu zawierająca kolejne etapy powstawania drugiej wersji ZF.

Zend Framework 2.0 został udostępniony do pobrania w dwóch wersjach:

ZendFramework 2.0.0dev1 zip package ZendFramework 2.0.0dev1 tar.gz package

Autor wpisu: Śpiechu, dodany: 20.07.2010 21:54, tagi: php, zend_framework

Dzisiaj ostatni wpis dotyczący programowania zgodnego z Zend. Będzie mowa o dokumentacji. Sporo informacji będzie pochodziło z Czystego Kodu [dalej CK]. Przede wszystkim bloki dokumentacji muszą być zgodne z formatem phpDocumentor, czyli /** * Coś tam dokumentuję... */ Współczesne IDE nie mają problemu z pilnowaniem zgodności z tym formatem. Wpisujesz /** naciskasz Enter i masz [...]

Autor wpisu: widmogrod, dodany: 11.07.2010 20:29, tagi: php, zend_framework

Niezależnie od rodzaju, wielkości i skomplikowania aplikacji internetowej można wyróżnić w niej kilka podstawowych (prawie zawsze występujących) elementów; autoryzacja, model, prezentacja danych, itp.

Przykład wyglądu i zastosowania KontorX_DataGrid

KontorX_DataGrid

Ten wpis chciałbym poświęcić bardzo powszechnemu elementowi – prezentacji, a dokładniej prezentacji danych tabelarycznych z j.ang. „data grid”. Notorycznie napotykamy ten element w prawie każdym panelu administracyjnym. Przybiera on różne formy w zależności od postawionych wymagań. Można wyróżnić:

Formy prezentacji danych tabelarycznych

  • Podstawową – dane są prezentowane w tabeli HTML bez możliwości sortowania, filtrowania i stronicowania
  • Rozszerzoną - tabela z możliwościami stronicowania i filtrowania kolumn danych
  • Dedykowaną- rozwiązanie jest połączeniem w/w typów z elementami rozszeżającymi, np.:
    • tabelę z możliwościami eksportowania danych tabelarycznych do różnych formatów (csv, pdf, itp…)
    • spersonalizowany wygląd komórek danych w zależności od typu: data, godzina, waluta, url, grafika, ….
    • możliwość edycji danych w bezpośrednio w wierszu tabeli (inline editing)
    • prezentacja danych za pomocą biblioteki JavaScript (np. Ext.DataGrid i inne,… )

Rodzaje istniejących bibliotek poruszających ten problem

Natywne PHP:

JavaScript + PHP:

Powyższe biblioteki implementują mniej lub więcej form prezentacji danych. Każda z nich wymaga wykonania kilku „ruchów” by je skonfigurować ale czy można prościej?… Tak. Dlatego chciałbym w tym wpisie omówić bibliotekę – KontorX – jest to biblioteka, którą nieprzerwanie rozwijam od  prawie 3 lat. Bibliotekę KontorX zawiera w sobie wiele elementów a jednym z nich jest KontorX_DataGrid.

Czym jest biblioteka KontorX_DataGrid

Biblioteka umożliwia elastyczne prezentowanie danych tabelarycznych w dowolny sposób i prawie w dowolnej formie. Poniżej przedstawiam główne cechy biblioteki:

  • Adaptowanie danych różnych typów np. Doctrine, Zend_Db_Table, Zend_Db_Select, natywna tablica – array, …. (więcej w budowie :) )
  • Różnorodna forma prezentacji danych. Data_Grid prezentuje dane jako czysty HTML oraz dynamiczny widok ExtJS Grid. Biblioteka pozwala również na implementacje nowych sposobów prezentacji danych np. jako plików .csv, .xls, .pdf.
  • Integracja z Zend_Form.
  • Zbiór gotowych rozwiązań. Biblioteka posiada już zaimplementowane elementy odpowiedzialne za filtrowanie, grupowanie i stronicowanie danych.
  • Elastyczność i rozszerzalność poprzez dopisywanie plugin’ów.

Powyższy opis może nie wiele mówić dlatego zapraszam do przykładów demonstrujących, niektóre możliwości komponentu: http://kontorx.widmogrod.info/#http://kontorx.widmogrod.info//KontorX/DataGrid/example1.php

DataGrid – „Out of the box”

Jeżeli korzystasz z ZF wystarczy że pobierzesz bibliotekę z Google Code umieścisz ją w include_path aplikacji i zaimplementujesz powyższy kod w kontrolerze wybranej akcji przekazując model danych (na chwilę obecną zaimplementowałem obsługę Zend_Db_Table, Zend_Db_Select, array).

Biblioteka posiada już zaimplementowany domyślny sposób prezentacji danych więc niczym nie musisz się martwić  (jedynie tabelę możesz ostylować w/g własnych upodobań :) )

Czytaj dalej tutaj (rozwija treść wpisu)
Czytaj dalej na blogu autora...

Autor wpisu: Śpiechu, dodany: 30.06.2010 19:46, tagi: php, zend_framework

W drugiej części napiszę co nieco na temat nazewnictwa klas i metod. Jak nazywać i czego unikać. Do tego na koniec dodam kilka zaleceń Roberta C. Martina z Czystego Kodu [Gliwice : Helion, 2010]. Klasy Składnikiem nazwy klasy nie powinien być żaden czasownik. Mało tego, nie powinien to być również fragment nazwy implementowanego interfejsu lub [...]

Autor wpisu: batman, dodany: 24.06.2010 07:00, tagi: zend_framework

Zend Framework dostarcza ogrom gotowych komponentów, które pokrywają zapotrzebowanie większości programistów. Pośród nich, można znaleźć m.in. Zend_Mail. Jest to komponent odpowiedzialny przede wszystkim za wysyłanie wiadomości e-mail. Znajdują się w nim również klasy odpowiedzialne za pobieranie poczty. Klasy te umożliwiają sprawdzenie, czy na wskazanym koncie znajdują się nieprzeczytane wiadomości e-mail bez konieczności korzystania z Zend_Gdata (który swoją drogą nie oferuje bezpośredniej możliwości sprawdzania poczty). W zasadzie wszystkie niezbędne informacje można znaleźć w dwóch miejscach – dokumentacji Gmaia oraz dokumentacji Zend_Mail.

Zanim będzie można sprawdzić, czy na wskazanym koncie znajdują się nowe wiadomości, należy włączyć w Gmailu obsługę IMAP. Można to zrobić w “Ustawieniach”, w zakładce “Przekazywanie i POP/IMAP”. W sekcji “Dostęp IMAP” wystarczy zaznaczyć opcję “Włącz IMAP”. Resztę pracy wykona Zend_Mail.

Kod sprawdzający czy na koncie Gmail znajdują się nowe wiadomości, jest bardzo prosty. Składa się na niego utworzenie nowego obiektu Zend_Mail z odpowiednimi parametrami oraz pętla foreach, w której zliczane są nieprzeczytane wiadomości. Całość wygląda następująco:

$mail = new Zend_Mail_Storage_Imap(
	array(
		'host' => 'imap.gmail.com',
		'port' => 993,
		'user' => 'nazwa.uzytkownika@gmail.com',
		'password' => 'haslo.uzytkownika',
		'ssl' => 'SSL'
	)
);

$i = 0;
foreach($mail as $message) {
	if($message->hasFlag(Zend_Mail_Storage::FLAG_SEEN)) continue;
	$i++;
}
echo $i;

Gwoli wyjaśnienia. Tablica przekazana do konstruktora zawiera parametry wymagane do  połączenia się z Gmailem. Pętla natomiast sprawdza czy pośród wszystkich wiadomości, znajdują się nieoznaczone flagą “przeczytane”. Jeśli tak, to dla każdej takiej wiadomości zwiększany jest licznik, który zawiera liczbę nieprzeczytanych wiadomości,

Wszystkie wpisy należą do ich twórców. PHP.pl nie ponosi odpowiedzialności za treść wpisów.