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

Autor wpisu: Tomasz Kowalczyk, dodany: 17.05.2011 23:24, tagi: symfony, javascript, php

Framework symfony to bezsprzecznie jeden z najlepszych frameworków, jakie miałem okazję testować. Zarówno poziom zaawansowania kodu, jak też łatwość tworzenia nowych funkcjonalności w stronach internetowych czynią go naprawdę genialnym narzędziem w rękach programisty. W dzisiejszym wpisie chciałbym pokazać, jak w prosty sposób zintegrować edytor WYSIWYG - CKEditor z polami <textarea> w poszczególnych modułach panelu administracyjnego [...]

Autor wpisu: sokzzuka, dodany: 16.05.2011 16:33, tagi: php

Już niedługo – 31 maja (wtorek) w Klubie Lizard King w Krakowie (ulica Św. Tomasza 11a) odbędzie się piąty KrakSpot Tech. Jest to spotkanie ludzi z branży technologicznej utrzymane w luźnej atmosferze tzw. Bar Camp. Oznacza to mniej więcej tyle, że można, a nawet zalecane jest spożywanie w jego czasie złocistego napoju (bez przesady oczywiście). Dodatkowym atutem tego spotkania jest DARMOWA PIZZA dla wszystkich uczestników. Spotkanie nie wymaga rejestracji.

Dlaczego wspominam o tym evencie na swoim blogu ? Szczęśliwie się składa, że wygłoszę na nim swoją prezentację na poruszany już tutaj temat bazy danych MongoDb. Oczywiście oprócz mojej prezentacji będzie jeszcze kilka ciekawych rzeczy, oto program:

1. Prezentacje:

Jacek Czarnecki z  Empathy „Dlaczego HTML 5, a nie Flash?” Wojtek Soczyński  z SoInteractive „Alternatywne podejście do bazy danych – MongoDb” Grzegorz Szczepańczyk z Hidden Data „Akcja wirtualizacja: efektywne wykorzystywanie zasobów” Łukasz Cepowski z iLoop Mobile „Praktyczna realizacja rozproszonego klastra do budowania i testowania projektu informatycznego

2. Panel dyskusyjny:

iOS vs. Android” prowadzony przez Krzysztofa Helaka

Uważam, że program jest ciekawy dla każdego kto w jakikolwiek sposób związany jest z branża internetową od strony technologicznej. Warto się wybrać i serdecznie zapraszam wszystkich.

Jeżeli ktoś by chciał wziąć udział w panelu dyskusyjnym to polecam zapisać się pod adresem marketing@empathy.pl .

Więcej informacji na stronie spotkania (rejestracja nie jest obowiązkowa)

http://www.empathy.pl/pl/aktualnosci/rok2011.html

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

Autor wpisu: batman, dodany: 15.05.2011 20:45, tagi: php

W jednym z ostatnich komentarzy pod wpisem Agile Toolkit – interesujący framework PHP napisałem, że framework ten nie do końca spełnia pokładane w nim przeze mnie nadzieje. Postanowiłem dać mu jeszcze jedną szansę i spędziłem z nim nieco więcej czasu niż poprzednio. Tym razem przygotowałem od zera najprostszą z możliwych aplikacji, które nie robi nic innego ponad wypisanie w przeglądarce tekstu “Hello World”. Od razu zaznaczę, iż podtrzymuję opinię, że jest to framework w wersji beta.

Instalacja

Instalacja frameworka wbrew pozorom nie jest taka banalna jakby się mogło na początku wydawać. Wszystko zaczyna się od pobrania najnowszej wersji frameworka i rozpakowania go do katalogu znajdującego się na serwerze. W tym samym miejscu musimy utworzyć plik index.php oraz katalogi lib, page oraz templates.

Konfigurowanie projektu

Na serwerze znajdują się już wszystkie niezbędne pliki i katalogi, pora przejść do konfiguracji naszej aplikacji. Najpierw musimy utworzyć główną klasę, powołującą naszą aplikację do życia. Nie będę tutaj oryginalny i posłużę się nazwą z dokumentacji. Klasa wygląda w sposób następujący, a jej położenie to stworzony wcześniej katalog lib.

class Frontend extends ApiFrontend
{
    public function init()
    {
        parent::init();
        $this->initLayout();
    }
}

W zależności od zapotrzebowania, klasa może dziedziczyć po jednej z kilku przygotowanych na różne okoliczności klas. Mamy do dyspozycji ApiWeb, ApiCli, ApiAdmin oraz ApiFrontend. Sami również możemy przygotować odpowiednią klasę.

Główną klasę wywołujemy w pliku index.php

include 'atk4/loader.php';
$app = new Frontend('my_project', 'my_theme');
$app->main();

Najbardziej interesującym elementem na powyższym listingu jest drugi parametr przekazany do konstruktora. Określa on nazwę skórki/tematu (theme) z jakiego będziemy korzystać w aplikacji. Jak za chwilę się dowiecie, tematy są całkowicie odseparowane od reszty kodu, dzięki czemu łatwo je podmieniać.

Ostatnim etapem konfigurowania projektu jest utworzenie katalogu o nazwie tematu (tutaj jest to my_theme) w katalogu templates.

Pierwsza strona

Framework zainstalowany, projekt skonfigurowany, można przystąpić do pracy. Zaczniemy od przygotowania pierwszej (i jedynej) strony. W katalogu page utwórzmy plik index.php, a do środka wprowadź następującą treść

class page_index extends Page
{
    public function init()
    {
        parent::init();
        $this->add('HtmlElement');
    }

    public function defaultTemplate()
    {
        return array('page/index');
    }
}

Zgodnie z konwencją przyjętą w Agite Toolkit, index jest domyślą stroną i jest wymagany do poprawnego działania aplikacji.

Treść do strony dodawana jest w metodzie init, przy czym musimy pamiętać, aby wywołać metodę init rodzica. W sumie Agile Toolkit na każdym kroku wymaga aby wywołać metodę rodzica. Po pewnym czasie staje się to dosyć irytujące. Druga metoda jest wymagana tylko jeśli chcemy oprócz treści wygenerowanej przez stronę dodać dodatkowe informacje do szablonu.

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

Autor wpisu: Tomasz Kowalczyk, dodany: 13.05.2011 23:17, tagi: framework, php

Kiedy programuję aplikacje z wykorzystaniem różnego rodzaju frameworków, zawsze zastanawiam się, jak to jest, że ich twórcy potrafią wymyślić rozwiązania, dzięki którym codziennie oszczędzamy cenny czas. Na pewno jest to doświadczenie, na pewno swój wkład ma także talent danego programisty, ale istotną częścią jest także dogłębna znajomość języka programowania, w którym rzeczony framework jest tworzony. [...]

Autor wpisu: sokzzuka, dodany: 12.05.2011 15:41, tagi: php

Od czasu rozpoczęcia się wątku o PHP 5.4 na liście php.internals, jak bumerang powrócił temat adnotacji. Nasi drodzy deweloperzy doszli do nowego konsensusu (poprzedni odrzucał adnotację) i stwierdzili, że może nie są jednak one takie złe. W efekcie tego powstała nowa propozycja RFC, główne zmiany jakie w niej widzę, to zmiany składniowe (o które były największe bitwy ostatnim razem). W nowej propozycji adnotacje mają postać miksu phpDoc i formatu JSON. Nowa składnia behold:

/**
 * Foo class.
 *
 * @Entity {repositoryClass: "FooRepository"}
 * @Table  {name: "foos"}
 *
 * @author "Guilherme Blanco"
 */
class Foo
{
  // ...
}

Na pierwszy rzut oka zdaję się być kompatybilna z istniejącym rozwiązaniem (phpDoc). Jednak wszystko zależy od konkretnej implementacji parsera. Wykorzystanie:

$reflClass = new \ReflectionClass('Foo');
var_dump($reflClass->getAnnotations());

/*
array(3) {
  ["Entity"]=>
  object(ReflectionAnnotation)#1 (1) {
    ["value"]=>
    object(stdClass)#1 (1) {
      ["repositoryClass"]=>
      string(13) "FooRepository"
    }
  }
  ["Table"]=>
  object(ReflectionAnnotation)#2 (1) {
    ["value"]=>
    object(stdClass)#1 (1) {
      ["name"]=>
      string(4) "foos"
    }
  }
  ["author"]=>
  object(ReflectionAnnotation)#3 (1) {
    ["value"]=>
    string(16) "Guilherme Blanco"
  }
}
*/

Propozycja będzie jeszcze pewnie wiele razy dyskutowana, oczekujcie więc więcej informacji z tego pola bitwy ;)

Autor wpisu: sokzzuka, dodany: 11.05.2011 11:00, tagi: php

Ostatnio w pracy zajmuję się ciekawym projektem, przy okazji którego, będziemy zbierać pewne dane statystyczne. Danych tych będzie z pewnością bardzo dużo. Wobec tego bazując na swoich poprzednich doświadczeniach, zdecydowaliśmy, że najlepiej będzie przenieść nasze statystyki w chmury. Wybór padł na bardzo popularną i znaną usługę Amazona, a konkretnie – SimpleDb. Jest to nierelacyjny magazyn danych, idealnie nadający się do naszych zastosowań – nieograniczona pojemność i duża szybkość. Jego zaletą również jest to, że w każdym miesiącu dostajemy 25 maszyno-godzin i 1Gb storage’u za free. Można więc go testować w zasadzie za darmo bez ograniczeń. Ile to jest maszyno-godzina mnie nie pytajcie, ale sądzę, że do testów tak czy inaczej wystarczy :) . By używać usługi SimpleDb, najłatwiej zaopatrzyć się w jakiś napisany w PHP adapter, ponieważ „czysta” komunikacja z jej API odbywa się za pomocą REST lub SOAP-a, co może być trochę uciążliwe. Mój wybór padł na komponent w ramach Zend Framework – Zend_Service_Amazon_SimpleDb. Niestety nie ma do niego żadnej oficjalnej dokumentacji. Pomyślałem więc, że to dobry temat na wpis.

By zacząć zabawę z SimpleDb, należy przede wszystkim  utworzyć sobie konto, przy okazji czego zostanie nam wygenerowana para kluczy – accessKey i secretKey, które potem posłużą do autoryzacji przy łączeniu się z dowolnymi usługami Amazona. Muszę jeszcze nadmienić, że do korzystania z tej chmury potrzebujemy karty kredytowej i bez podania jej numeru nie uda nam się z niej skorzystać. Z innych kwestii bilingowo-finansowych warto jeszcze zwrócić uwagę na pewien szczegół – każdy xml (przynajmniej dla SimpleDb) zawiera pole „box usage”, w którym zwraca nam czas jaki zajęło chmurze wykonanie zapytania. Dzięki temu możemy odliczać sobie ile jeszcze z darmowych 25 maszyno-godzin nam zostało do zabawy ;) .

Czas przejść do najbardziej interesującej nas części – kodu. Zanim pokaże jak używać Zend_Service_Amazon_SimpleDb, pragnąłbym ostrzec Was przed jedną rzeczą, mianowicie, z tego jak korzystałem z tej klasy mam wrażenie, że jest ona jeszcze w fazie beta i jest tam sporo błędów implementacyjnych (nie mówiąc już o mało intuicyjnym API).

By skorzystać z klasy Zend_Service_Amazon_SimpleDb należy najpierw utworzyć jej instancję w następujący sposób:


$accessKey = 'SampleAccessKey';
$secretKey = 'SampleSecretKey';

$service = new Zend_Service_Amazon_SimpleDb($accessKey, $secretKey);

Gdzie secretKey i accessKey są odpowiednio kluczami, które dostaliśmy przy zakładaniu konta.

Nim wprowadzimy jakieś dane do naszej bazy należy utworzyć tzw. domenę. Czym jest owa domena ? Domena jest tak-jakby odpowiednikiem tabeli w klasycznej bazie danych, z tą różnicą, że nie ma żadnego schematu, tj. dane które w niej przechowujemy nie muszą (ale powinny) być w jakikolwiek sposób podobne. By pobrać listę domen należy wykonać następujący kod:

$page = $service->listDomains();
$domains = $page->getData();
var_dump($domains); //array(0 => 'domena1',  1=> 'domena2');

Oczywiście rozpoczynając naszą zabawę z SimpleDb nie mamy jeszcze żadnych domen utworzonych dla naszej instancji bazy. By je utworzyć należy wykonać:

$result = $service->createDomain('test');
var_dump($result); //boolean true

Gdy mamy już utworzoną domenę, możemy zapisywać dane w naszej bazie. By coś zapisać, najpierw należałoby się zapoznać ze strukturą danych jakie przyjmuje SimpleDb. Każdy „wiersz” w tej bazie składa się z identyfikatora (nazwy) oraz atrybutów. Pojedynczy atrybut dla wiersza, może mieć wiele wartości (być tablicą). Nazwę / identyfikator niestety (a może i stety) musimy wygenerować sobie sami. Osobiście moja strategia generacji ID polega na hashowaniu aktualnego czasu z mikrosekundami (microtime(true)). Skoro już wiemy jak wygląda struktura naszych danych, czas by coś wpisać.

$itemName = sha1(microtime(true));
$data = array(
    'foo' => 'bar',
    'baz' => 'boo',
    'gaz' => array(1,2,3,4,5)
);

$attributes = array();
foreach($data as $name => $values){
    $attributes [] = new Zend_Service_Amazon_SimpleDb_Attribute($itemName, $name, $values);
}
$service->putAttributes('test', $itemName, $attributes);

Jedna mała uwaga co do zapisywania pól, które mają więcej niż jedną wartość – jeżeli będzie to tablica asocjacyjna to klucze zostaną utracone. W takim przypadku najlepiej po prostu serializować takie pole (o ile nie będziemy po nim wyszukiwać).

Zapisane dane można wydobywać z bazy na dwa sposoby. Pierwszy:

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

Autor wpisu: batman, dodany: 10.05.2011 08:00, tagi: php

Nie tak dawno temu pisałem na gorąco o PHP Fog, a już są pojawiły się pierwsze interesujące tematy z tym projektem związane. Dzisiaj na Twitterze PHP Fog zadał pytanie o nieznanym mi frameworku PHP o nazwie Agile Toolkit. Poświęciłem kilka minut na przejrzenie przykładów oraz zerknąłem do licencji. Okazało się, iż twórcy frameworka wymyślili sobie, że będą pobierać za niego opłatę (i to nie małą). Odłóżcie pochodnie, albowiem dostępna jest również wersja darmowa, która różni się tym, iż nie posiada wsparcia technicznego. Niemniej żądanie sporej gotówki za framework PHP spowodowało, że krew się we mnie zagotowała i odćwierkałem, dosyć niegrzecznie, co myślę o takiej licencji. Dosyć szybko moje ćwierknięcie zostało zauważone przez osoby związane z Agile Toolkit i wywiązała się krótka dyskusja na temat frameworka. Koniec końców, ściągnąłem ATK (skrót od Agile Toolkit) i zacząłem w nim dłubać.

Po godzinie zabawy z ATK okazało się, że jest to bardzo interesująca pozycja dla osób tworzących małe stronki. Agile w nazwie frameworka jest tutaj jak najbardziej na miejscu. Byłem w stanie bez większego problemu stworzyć prostą stronę z kilkoma podstronami.

Ciekawie prezentuje się funkcjonalność polegająca na dodawaniu nowych elementów do aplikacji. ATK rozwiązał to przy pomocy metody add, która jest w stanie dodać wszystko do wszystkiego. Możemy stworzyć stronę (klasę dziedziczącą po Page) i osadzić ją jako fragment większej całości w innej stronie. Do strony możemy dodać (również przy pomocy tej samej metody add) formularz, kod HTML, model, itd.

Skoro przy modelach już jesteśmy, nie można nie wspomnieć możliwości powiązania widoku z modelem. W najprostszej postaci wygląda to następująco.

$f=$p->add('MVCForm');
$f->setModel('Employee',array('name','salary'));
if($f->isSubmitted()){
    $f->update();
    $f->js()->univ()
        ->successMessage('Employee added')
        ->execute();
}

Prawda, że proste?

Kolejnym interesującym elementem frameworka jest możliwość tworzenia skryptów JavaScript z poziomu PHP. Co więcej, mamy do dyspozycji bibliotekę jQuery, która również została opakowana w PHP.

Godzina to za mało aby poznać framework. Po tak krótkim czasie jedyne co mogę stwierdzić, to to, że nie była to stracona godzina. ATK sprawia wrażenie dobrze przemyślanego. Spróbuję stworzyć w nim coś większego i bardziej wymagającego. Jeśli ATK się sprawdzi, to w końcu będę miał coś małego, do błyskawicznego tworzenia niewielkich projektów.

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