Zend Framework 2 – KrakSpot TECH #6

Już w najbliższy czwartek 6 października o godzinie 18:30 odbędzie się w Albotak KrakSpot TECH #6.

Jest to o tyle ciekawe wydarzenie gdyż będę miał przyjemność poprowadzenia już po raz drugi prezentację na KrakSpot TECH.
Temat mojej 15 minutowej prezentacji będzie związaną z nadchodzącą odsłoną Zend Framework 2.

Zapraszam wszystkich programistów PHP tworzących swoje aplikacje w ZF będzie dużo fajnych informacji i będzie konkurs z fajnymi mini nagrodami :)

UPDATE: Niestety KrakSpotTECH został odwołany… ale już wiem, że na zaprezentuję informację o ZF2 na nowej konferencji organizowanej w Krakowie! bądźcie czujni! :)

Zend Framework DataGrid – „Out of the box”

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ń :) )

Poniżej przedstawiam najszybszą drogę  do wy-renderowania prostej prezentacji danych tabelarycznych:

// prosty przykład
$dataGrid = KontorX_DataGrid::factory($dbTable);
$dataGrid->render();

Zainteresowanych źródłami zapraszam do strony projektu na Google Code: http://code.google.com/p/kontorx

Zawijanie tekstu w Zend_Pdf

W dniu dzisiejszym pracowałem nad generowaniem plików PDF w swojej aplikacji. Wybrałem do tego celu Zend_Pdf dlatego że backend jest oparty na Zend Framework.

Współprace z tą biblioteką mogę ocenić na 4/6. Przyjemnie. Jednak brakuje w niej kilku kluczowych elementów jednym z nich jest możliwość zawijania długiego tekstu. W sposób natywny ZF nie ma zaimplementowanej takiej metody.

Poniżej przedstawiam prostą funkcję, która w szybki i sprawny sposób zawinie (przełamie) przekazany tekst po określonej długości znaków.

/**
* Zawin tekst po określonej długości znaków.
*
* @param Zend_Pdf_Page $page
* @param string $text
* @param int $x
* @param int $y
* @param int $width
* @param string $brake
* @param bool $cut
* @return void
*/
function drawTextWrap($page, $text, $x, $y, $width, $brake = "\n", $cut = true)
{
// przygotuj tekst
$text = wordwrap($text, $width, $brake, $cut);
$token = strtok($text, $brake);

$fontSize = $page->getStyle()->getFontSize();

// rysuje każdą linię tekstu niżej od poprzedniej
// o wysokośc (wielkość) czcionki
while (false !== $token)
{
$y -= $fontSize;

$page->drawText($token, $x, $y);

$token = strtok("\n");
};
}

Jeżeli ktoś pracował z Zend_Pdf to wytłumaczenie jak użyć w/w kawałek kodu jest zbyteczne. Pozdrawiam.