Dekoderek

Teraz my

Dlaczego w studio tego programu jest tak ciemno? U Kuby w TVN też jest ciemniej niż było w Polsacie (albo mi się wydaje). Chyba w innych talkshow (głównie za oceanem, przynajmniej tych, które widuję), jest jaśniej. I choćby przez to jakoś tak weselej. Nawet nie zwracając uwagi na tematykę. Dla mnie odbiór przyjemniejszy.

Ja zmieniłem design blogu niedawno i... ciemny jest. Chyba znów powalczę, chociaż o kolory. Teraz największym zyskiem było przywrócenie sidebaru po ponad roku jego braku.


Homoheterodyskusja

O co chodzi z tą całą dyskryminacją homoseksualistów w kontekście zawierania małżeństw?


AJAX i JSON w Zend Framework

Zacząłem niedawno nowy projekt. Kolejny oparty o Zend Framework, a tym razem w znacznym stopniu wykorzystujący tzw. AJAX. Jednak zamiast zwracać XML wolę dane dostawać jako JSON. Jak to robię, wykorzystując dobrodziejstwa ZF? Pokażę na przykładzie akcji logowania.

Akcja logowania nie generuje u mnie żadnych formularzy ani tekstu. Służy tylko do wywołania przez zapytanie asynchroniczne i zwrócenia danych jako JSON.

Oto kod akcji:

  1. class AccountController extends Zend_Controller_Action
  2. {
  3.     function signinAction()
  4.     {
  5.         if($this->view->checkLogin())die();
  6.         $this->_helper->layout->setLayout('json');
  7.         $this->view->json = array('error'=>0, 'signin'=>false, 'message'=>'');
  8.         if($this->_request->isPost())
  9.         {
  10.             $f = new Zend_Filter_StripTags();
  11.             $login = $f->filter($this->_request->getPost('login',''));
  12.             $password = $f->filter($this->_request->getPost('password',''));
  13.             if(!empty($login))
  14.             {
  15.                 $authAdapter = new Zend_Auth_Adapter_DbTable(Zend_Db_Table::getDefaultAdapter(), 'users', 'email', 'passwd', 'MD5(?) AND is_deleted = 0');
  16.                 $authAdapter->setIdentity($login);
  17.                 $authAdapter->setCredential($password);
  18.                 $auth = Zend_Auth::getInstance();
  19.                 $result = $auth->authenticate($authAdapter);
  20.                 if($result->isValid())
  21.                 {
  22.                     $data = $authAdapter->getResultRowObject(array('id_user', 'email', 'name', 'user_role'));
  23.                     $auth->getStorage()->write($data);
  24.                     $this->view->json['signin']=true;
  25.                 }
  26.             }
  27.         }
  28.         if(!$this->view->json['signin'])
  29.             $this->view->json['message']='Podane e-mail i hasło nie pasują do siebie.';
  30.     }
  31. }

Po kolei

Cała magia zaczyna się od

  1. $this->_helper->layout->setLayout('json');
  2. $this->view->json = array('error'=>0, 'signin'=>false, 'message'=>'');

czyli wybrania layoutu dla tej akcji i zainicjowania tablicy json w obiekcie view. Dalej odbywa się logowanie za pomocą modułu Zend_Auth (o tym może przy innej okazji) i odpowiednie wypełnianie tablicy json.

A po co był ten wybór layoutu? To nowość w wersji 1.5 frameworka. W pliku bootstrap (zazwyczaj index.php) należy go zainicjować dodając linijkę:

  1. Zend_Layout::startMvc(array('layoutPath'=>ROOT_DIR.'/application/views/layouts/'));

Domyślny layout należy umieścić w pliku /application/views/layouts/layout.phtml - będzie on wczytywany dopóki go dla danej akcji nie wyłączymy lub nie zmienimy. To drugie zrobiłem właśnie w akcji logowania. A w pliku /application/views/layouts/json.phtml wrzuciłem tylko:

  1. <?=$this->json(isset($this->json)?$this->json:array())?>

i wtedy cała odpowiedź akcji to przerobiona tablica json za pomocą zendowego helpera json(). Reszta to już kwestia JS i odpowiedniego odczytania zwróconego obiektu. Korzystam z mootools i tamtejszej metody Json.evaluate(); pobieranie danych za pomocą Json.Remote generowało błędy.

  1. /*
  2.  * url - adres akcji logowania - w przykładzie /account/signin/
  3.  * params - informacje logowania
  4.  */
  5. new Ajax(url, {'data':params, 'method': 'post', 'onComplete': function(t){
  6.         var data = Json.evaluate(t);
  7.         if(!data)
  8.                 alert('Wystąpił błąd podczas logowania!');
  9.         if(data.error)
  10.                 alert('Wystąpił błąd podczas logowania!');
  11.         if(data.signin)
  12.                 alert('Zalogowany!');
  13.         else
  14.                 alert(data.message);
  15. }

Podsumowanie

Oczywiście logowanie to tylko przykład tworzenia wyniku JSON. Najważniejsze elementy to:

  • zainicjowanie Zend_Layout;
  • utworzenie tablicy json (tylko ten krok należy wykonać w każdej akcji, pozostałe wykonają się automagicznie);
  • zdefiniowanie layoutu jsonowego;
  • przekształcenie tablicy do JSON w layoucie;
  • skrypt akcji w views może zostać pusty.

Bahu?

Wam też przychodzi zaproszenie do bahu.com? Niby ktoś ze znajomych. Ale to już kolejne do mnie. Dzisiaj moje słońce takie samo dostało. A całość przychodzi z domeny bahu.emv2.net WTF?

Kiedyś, z tego co pamiętam, Facebox tak spamował ludzi. Taką miał złą opinię w necie, że musiał zmienić nazwę ma Netlog. A teraz to. Na razie chyba jedyny serwis społecznościowy, który znam, a nie założyłem konta.

PS. Konta zakładam, żeby być na bieżąco z takimi serwisami - sprawy zawodowe. ;)


Wiosna

...chyba nadchodzi. Jest zarąbiście na zewnątrz. Czas nabyć lżejszą kurtę i w teren. Jutro pierwszy wypad (jeśli pogoda nie zjepsuje się).


Ciężki wybór

Chciałbym pobrać Safari bez QuickTime. Ale nie mogę się zdecydować, którą opcję wybrać...

Apple Safari - wybór wersji


Pokażmy, jak zdychają

Przepraszam za wyrażenie w tytule, ale cały czas mam wrażenie, że takie coś w głowie chodzi redaktorom TVN24. Pokazują chorych w czasie ewakuacji. Dla newsa zrobią wszystko. Lubię tę stację, nie ukrywam, ale momentami przesadzają.

Swoją drogą jak to jest z wizerunkiem? Z tego co wiem, istnieje oczywiście ochrona wizerunku i bez mojej zgodny nikt mnie nie może pokazać, ale wyjątek stanowią programy informacyjne. Może ktoś to zweryfikować?


Badziki na kampanię.

Nic dodać, nic ująć...

I'm voting Republicans. The Democrats left a bad taste in my mouth…

Źródło: DailyWebb.com


Zend PHP Framework

Kończę pierwszy projekt wykorzystujący Zend Framework. Ma swoje wady, ale ma bardzo dużo zalet. Tworzony przez gości od samego PHP - to już brzmi kusząco. No i nie zawiodłem się.

Teraz będę zaczynał drugi projekt z tą biblioteką. Chciałbym jednak trochę usystematyzować swoją widzę o frameworku, a nie opierać się tylko na własnych próbach i błędach - za mało czasu. Szukałem jakiejś książki, ale 4 znane mi adresy, które mogłyby pomóc, raczej wypadły średnio. Dla szukanej frazy zend tylko merlin.pl dał wyniki - 6 pozycji związanych z programowaniem. EMPiK, Traffic Club i helion - pusto. A dokumentacja, mimo że świetnie zrobiona i nie raz mi pomogła, to nie to samo, bo trzeba raczej wiedzieć czego się szuka, a ja bym chciał wskazówek ogólnych jak jedno z drugim optymalnie połączyć. Zostaje więc ta garstka dokumentów, które podpowiadają wyszukiwarki i zbiorek na zftutorials.com, który jednak jest niewiele lepszy od dokumentacji.

Ktoś używa tej biblioteki? Macie jakieś swoje źródła? Pewnie macie też swoje ulubione frameworki, chętnie usłyszę, mimo że wielu próbowałem wcześniej.


Another one bites the dust...

Coraz więcej pomysłów mam na jakiś serwis WWW. Spisuję je w jednym miejscu. Ale moja lista wcale się bardzo nie wydłuża. Nie mam czasu na robienie wszystkich, ani kasy na programistów (jeszcze). A jak mam wolną chwilę, to kończę ten jeden jedyny, który już jako tako żyje. A przez to coraz częściej gdzieś w Internecie pojawia się serwis oparty na dokładnie takim pomyśle, jak ja miałem. I zazwyczaj kończy się to wykreśleniem mojego pomysłu z magicznej listy.

Właśnie znalazłem kolejny. Ech, cierpię.