Zend Framework umożliwia specjalizację finalnego widoku(layoutu) dla każdej z akcji poprzez tzw. helpery("pomocniki") widoku. Jak to się dzieje odsyłam do podręcznika.
Wszystko działało idealnie do dnia gdy nadeszła chwila integracji stronki z Google Maps API.
W widoku akcji korzystam z wymiotnego w temacie pomocnika:
$this->headScript()
->appendFile('http://maps.google.com/maps?file=api&v=2&key='.$this->apiKey);
nagłówek strony produkuje mi coś takiego:
<script src="http://maps.google.com/maps?file=api&amp;v=2&amp;key=ABQIAAAAnCqO9l1WMOgTCJlg9kVlMRREqxHjot-MVdGv4W7rNtdAWxNh4hS2-gRBnLrWFzhAC8SpBzYmGVYZgA" type="text/javascript"/>
a powinien
<script src="http://maps.google.com/maps?file=api&v=2&key=ABQIAAAAnCqO9l1WMOgTCJlg9kVlMRREqxHjot-MVdGv4W7rNtdAWxNh4hS2-gRBnLrWFzhAC8SpBzYmGVYZgA" type="text/javascript"></script>
jak łatwo zauważyć problem leży w & -> &.
Inicjowanie map googla tej zmiany nie lubi. Problem tkwi w funkcji htmlspecialchars, użytej w Zend_View_Helper_HeadScript::append() itd.
Żeby nie ingerować w kod w/w klasy można zastosować funkcję htmlspecialchars_decode w szablonie w następujący sposób...
// & -> & becouse gmaps crash!
print htmlspecialchars_decode($this->headScript());
.. i wszystko działa, tak jak powinno od samego początku.
(Zastanawiam się czy ZF nie jest aż nad to ostrożny w wszystkim [ma to plusy .. i minusy])
Pozdrawiam.
środa, 12 listopada 2008
Zend_View_Helper_HeadScript->appendFile() psuje integrację z Google Maps API
czwartek, 21 sierpnia 2008
Zend_View_Helper_Action jako aplet + Zend_View_Helper_Url = niespodzianka
Wykorzystując Zend_View_Helper_Action w layout-cie (jako aplet w layout)
$this->action('list','index','calendar', array('rowCount' => 5));
dostałem wyjątek
Zend_Controller_Router_Exception: module is not specified in ..
O co chodzi?
Na początku anializy myślałem że jest błąd w tym helperze i dispachowaniu akcji ale naszczęście się myliłem. Rozwiązanie problemu okazało się dużo bardziej trywialne jak i zaskakujące!
Wykorzystując pomocnik widoku Zend_View_Helper_Url w pliku widoku dla wywoływanej akcji (czyli list.phtml) nie można korzystać z "skróconej" wersji generowani url!
tj. zamiast
$this->url(array('action' => 'display','id' => $row->id),'frontend')
należy stosować pełny zapis
$this->url(array('module' => 'calendar','controller' => 'index','action' => 'display','id' => $row->id),'frontend')
EDIT:
Można stosować skróconą wersję pomocnika widoku dla akcji tylko 2gi parametr określający url w/w przykładzie nie może być 'frontend' tylko musi być domyślnym tj. musi zostać pominięty
dixi.
piątek, 30 maja 2008
jQuery + Zend_Form = Form generator
Form generator demo
Wykorzystane biblioteki: Zend_Form od Zend Framework i jQuery
v0.3 - pierwsze publiczne wydanie (prezentacja)
Jest to nowy projekt, który wykonuję w ramach zlecenia.
Podstawową cechą tej aplikacji ma być (i mam nadzieje że jest ;)) intuicyjna możliwości tworzenia ankiet/formularzy, oczywiście bez wymaganej znajomości HTML przez użytkownika. Tak stworzony formularz ma być oddany w ręce potencjalnego klienta w celu wypełnienia i wysłania go na zdefiniowany adres e-mail.
Po raz kolejny w wykonaniu projektu posłużyłem się biblioteką jQuery. Pierwszą opublikowaną na tym blogu aplikacją, w której również została użyta w/w biblioteka jest jQuery ankieter.
Generowaniem formularzy zajmuje się świetny komponent od zend'a Zend_Form.
Kolejnym zastosowaniem tego skryptu, które nota bene wynika z jego charakteru jest przyśpieszenie tworzenia projektu z ZF.