Pokazywanie postów oznaczonych etykietą php. Pokaż wszystkie posty
Pokazywanie postów oznaczonych etykietą php. Pokaż wszystkie posty

środa, 12 listopada 2008

Zend_View_Helper_HeadScript->appendFile() psuje integrację z Google Maps API

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;amp;v=2&amp;amp;key=ABQIAAAAnCqO9l1WMOgTCJlg9kVlMRREqxHjot-MVdGv4W7rNtdAWxNh4hS2-gRBnLrWFzhAC8SpBzYmGVYZgA" type="text/javascript"/>


a powinien

<script src="http://maps.google.com/maps?file=api&amp;v=2&amp;key=ABQIAAAAnCqO9l1WMOgTCJlg9kVlMRREqxHjot-MVdGv4W7rNtdAWxNh4hS2-gRBnLrWFzhAC8SpBzYmGVYZgA" type="text/javascript"></script>


jak łatwo zauważyć problem leży w &amp; -> &.
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...

// &amp; -> & 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.

piątek, 17 października 2008

Eclipse Ganymede + PDT2.0 na ubuntu 64bit

PHP Development Tools w wersji 2.0 ujrzy światło dzienne 29 grudnia 2008 roku, ale to mi nie przeszkadza by pracować na wersji rozwojowej (:.
Poniżej przedstawiam przetłumaczony poradnik instalacji PDT2.0 na najnowszej wersji mojego ulubionego IDE Eclipse.

Pobieramy i rozpakowujemy Eclipse IDE for Java EE Developers (162 MB) do wybranego katalogu.
Do pełni szczęścia brakuje nam jeszcze trzech paczek.

  1. DLTK (Integration) link bezpośredni do paczki
  2. PDT2.0 (2.0.0 Integration Builds) link bezpośredni
  3. WTP (tą paczkę sugeruję pominąć, bo w Java EE już jest!)
Powyższe paczki rozpakowujemy i dodajemy do managera pakietów
  1. Help > Software Updates... > Available Software
  2. Add Site... > Local > dodajemy katalog rozpakowanego pakietu DLTK
  3. Add Site... > Local > dodajemy katalog rozpakowanego pakietu PDT2.0
  4. Add Site... > Local > dodajemy katalog rozpakowanego pakietu WTP
  5. Gdy odświeżenie listy pakietów nie wykona się automatycznie - wciskamy "Refresh"
  6. Zaznaczamy pakiet the "Dynamic Languages Toolkit - Core Frameworks .."
  7. Zaznaczamy pakiet "PDT Feature"
  8. Zaznaczamy "WTP Feature" (jeżeli jeszcze nie jest jest zainstalowany)
  9. Klikamy "Install"
Gdy wszystko przebiegnie pomyślnie uruchamiamy ponownie Eclipse i mamy PHP Development Tools w wersji 2.0 :). Teraz tylko New PHP Project i zabawa się zaczyna (:.

Uwaga na koniec, w Eclipse Ganymede w okienku "Software Updates" jest możliwość wpisywania nazw pakietów należy w tym polu wpisywać pełne nazwy pakietów do instalacji a nie ich akronimy tj. zamiast DLTK należy wpisać Dynamic Languages Toolkit

piątek, 19 września 2008

Eclipse SVN vs. NetBeans SVN

Kilka projektów WWW na głowie, przeskakiwanie z jednego do drugiego i kontrolowanie zmian wprowadzonych w każdym z nich.
Nic prostego SVN!
Google umożliwia hosting SVN OpenSource'owych projektów.

W utrzymaniu wszystkiego pod kontrolą pomoże nam NetBeans 6.5 z wsparciem dla PHP lub plugin do Eclipse Subversive.

Pomijam proces instalacji SVN na komputerze i inne programy wspierające jak np. RapidSVN gdyż zależy mi wyłącznie na integracji SVN z IDE.

NetBeans 6.5 jest w wersji deweloperskiej ale obsługa SVN jest nadzwyczajnie przyjemna!

  • automatyczne wykrywanie katalogów SVN w projekcie i oznaczanie odpowiednią wizualizacją zakładek, plików, katalogów


    kolory
    • zielony - nowy plik
    • niebieski - plik zmodyfikowany różny od wersji SVN

  • wizualizacja katalogów podpiętych pod SVN

    Jak można zuwazyć na załączonym obrazku, nie koniecznie cały projekt (np.: "kontorx-cms") musi być podpięty do repozytorium SVN jako całość (np.: "widmogrod.info") jest możliwość wyselekcjonowania pojedynczego katalogu w projekcie (np. "KontorX" czy "application") poddanego kontroli wersji.
  • szybka analiza zmian (można sprawdzić określoną gałąź projektu np.: wybrany plik lub katalog)
  • wizualizacja różnic wersji lokalnej i na serwerze, IDEALNA!


Eclipse Subversive
  • wizualizacja projektu jako SVN
    W przeciwieństwie do NetBeans brak możliwości posiadania kilku oddzielnych repozytoriów SVN w jednym projekcie.
  • Analiza zawartości zdalnego repozytorium SVN

  • Nie znalazłem wizualizacji różnic pomiędzy wersją lokalną a serwerową
    brak diff .. chyba że jestem ślepy ..

Głownem kryterium, na którym bazuje jest możliwość posiadania w projekcie kilku oddzielnych bibliotek, które są wsparte obsługa SVN.
Ponadto brak kontroli różnic lokalnych i zdalnych w Eclipse dyskwalifikuje je całkowicie.

Wygrywa NetBeans 6.5 z wczesnym wsparciem dla PHP!

Dla zainteresowanych konfiguracją Subversive na Eclipse źródła, z których korzystałem.

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.

poniedziałek, 18 sierpnia 2008

mktime - w przyładach

Jak ugryźć funkcję php mktime?

W poniższych przykładach zmienna $time posiada postać.

$time = time();


Początek dnia
np.: 2008-08-18 00:00:00

$startDay = date('Y-m-d H:i:s', mktime(0,0,0,date('m', $time), date('d', $time), date('Y',$time)));


Koniec dnia
np.: 2008-08-18 00:00:00

$endDay = date('Y-m-d H:i:s', mktime(0,0,0,date('m', $time), date('d', $time)+1, date('Y',$time)));


Początek tygodnia
np.: 2008-08-18 00:00:00

$startWeek = date('Y-m-d H:i:s', mktime(0,0,0,date('m', $time), date('d', $time), date('Y',$time)));


Koniec tygodnia
np.: 2008-08-25 00:00:00

$endWeek = date('Y-m-d H:i:s', mktime(0,0,0,date('m', $time), date('d', $time)+1, date('Y',$time)));



Pierwszy dzień miesiąca
np.: 2008-08-01 00:00:00

$firstDayInMonth = date('Y-m-d H:i:s', mktime(0,0,0,date('m', $time), 1, date('Y',$time)));


Ostatni dzień miesiąca
np.: 2008-08-29 00:00:00

$lastDayInMonth = date('Y-m-d H:i:s', mktime(0,0,0,date('m', $time)+1, -1, date('Y',$time)));


Gdzie zastosować?
System statystyk. Wyłowienie z bazy danych rekordów z danego dnia, tygodnia, miesiąca.

SELECT * FROM stats WHERE time BETWEEN '$startDay' AND '$endDay'


Jedno pytanie mnie nurtuje. Czy 00:00:00 tj. północ - jest traktowana jako początek czy koniec dnia? wydaje mi się ze to jest ostatnia godzina danego dnia.

piątek, 1 sierpnia 2008

Backend - jak wygląda twoje zaplecze?

Na początku mojej przygody z PHP i tworzeniem paneli administracyjnych towarzyszył mi mały niedosyt. Zawsze byłem ciekaw jak wyglądają zaplecza, zarządzające, profesjonalne serwisy internetowe. Jakie rozwiązania stosują? w jakim stopniu są to rozwiązania innowacyjne a w jakim stare sprawdzone, użyteczne wzorce. Czy mój PA nie jest za skąpy czy zbyt lamerski.
Teraz mamy możliwość zaobserwowania jak prezentują się różnego rodzaju rozwiązania w wielu otwartych systemach zarządzania treścią. Weźmy pierwsze z brzegu


Teraz troszeczkę zmieniłem podejście do tworzenia backendów. Od czasu do czasu gdy nie mam natchnienia przeglądam już istniejące rozwiązania i szukam drogi środka - by wszystko bez nadmiaru niosło ze sobą intuicyjność i wygodę pracy.

Przegląd paneli administracyjnych jakie stworzyłem w roku 2008.

KontorX GWT - wszystko szło rewelacyjnie GWT zawładnęło moim sercem ale sam fakt płynącego czasu i ograniczeń EXT GWT i zachcianek klięta spowodował że ..
  • Strona głowna

  • Zarządzanie stronami
  • Dodanie nowego produktu
  • Zarządzanie produktami


.. powstał panel ..

KonotrX HTML
  • Zaraz po zalogowaniu wita nas mały dashbord

  • Kategorie w sklepie

  • Zarządzanie produktami
  • Załanczanie grafiki do produktu




WiDooM - prostota przeźroczystość to jest to!
  • Logujemy się

  • Strona głowna panelu administracyjnego
  • Zarządzanie treścią na stronie

A jak wygląda Twoje zaplecze?

czwartek, 8 maja 2008

Trochę historii - www i ja

Internet ... co to było! pierwszy rok studiów stałe łącze, nieograniczone możliwości surfowania po sieci ... ach .. miło się to wspomina :)

Pierwszy raz (...) yhym .. ;) pierwsza strona WWW powstała w okresie Szkoły podstawowej - ślad po niej zaginął.

Pierwsza strona, od której zabawa zaczeła się na dobre to:
http://x100help.za.pl (jeszcze działa! ach te darmowe hostingi ;])
wykonana w: HTML



Następnie kontynuacją były jej modyfikacje
http://sghx100.za.pl - już wzobagacona w proste skryty PHP
wykonana w: HTML, CSS, PHP(wstawki)



Co to jest CMS? - też to chcę mieć! - zaczeło się powstała kolejna odsłona strony o samsung x100

http://www.widoom-cms.freehost.pl/x100/ - oparta na prostym CMS-ie
wykonana w: HTML, CSS, PHP(CMS WiDooM v1)




który napędzał też stronę:
http://www.widoom-cms.freehost.pl/
wykonana w: HTML, CSS, PHP(CMS WiDooM v1)




.. w międzyczasie
http://testament.za.pl/
wykonana w: HTML, CSS, PHP(wstawki)



miała być to strona o zespole TestAmenT .. wyszła strona z ogłoszeniami dla mojego kierunku .. hehe zabawne :P ..

Z serii stron dla ZiIP powstały jeszcze:

http://www.widoom-cms.freehost.pl/ziip/
wykonana w: HTML, CSS, PHP(CMS WiDooM v1)


http://www.widoom-cms.freehost.pl/ziip2/
wykonana w: HTML, CSS, PHP(CMS WiDooM v2)



http://samsung.ovh.org/ziip3/
wykonana w: HTML, CSS, PHP(CMS WiDooM v3)



Dwie powyższe strony zostały oparte na txtdb v1 - tekstowej bazie danych, wersja 1 obslugowala proste zapytania SQL, w puźniejszych z tego zrezygonowałem (nie działało to optymalnie wersja 3.1 dorobiła się jojnowania, sortowania, obsługi struktury hierarhicznej i wielu wielu bajerów :)

Teraz kolej na strony pod tytułem "dla innych" ;) nie zawsze za $

maszyny-jaro.prv.pl - strona wykonana w połączeniu PHP i MySQL, miała być katalogiem produktów sprzedawanych przez firmę Jaro - umarł projekt
wykonana w: HTML, CSS, PHP, MySQL


wpktuning.pl
wykonana w: HTML, CSS, PHP, txtdb v3.1



firmawpk.pl
wykonana w: HTML, CSS (blueprint - jak widać ;])



krzysztofzaba.pl -niedziala - ktoś czegoś nie opłacił ..
wykonana w: HTML, CSS, PHP

(znaleść screanshot ^^)

Dla promotor.krakow.pl

dietetyka.krakow.pl
wykonana w: HTML, CSS, jQuery, PHP(CMS Light v1)



psychodynamika.pl
wykonana w: HTML, CSS, jQuery, PHP(CMS Light v1.2)



http://www.eu1.pl/
wykonana w: HTML, CSS, jQuery, PHP(Light Framework)


http://krakkable.pl/
wykonana w: HTML, CSS, PHP
wkład: nie szablon :P


http://kalendarze.kr.com.pl/
wykonana w: HTML, CSS


kcp.krakow.pl
wykonana w: HTML, CSS, jQuery, PHP(CMS Light v1.5)


Dla kreatywni.net.pl

ramy-verso.pl
wykonana w: HTML, CSS, jQuery, PHP(CMS Light v1.3)
wkład: oparcie na CMS



fotorowecki.pl
wykonana w: HTML, CSS, jQuery, PHP(CMS Light v1.3)
wkład: oparcie na CMS


http://optotechmedical.pl/
wykonana w: HTML, CSS, PHP(CMS KontorX), Light Framework (czyli domowa produkcja ;)), jQuery
wkład: kodowanie od A-Z, cięcie szablonu


salonagd.com
wykonana w: HTML, CSS, PHP(CMS KontorX), Zend Framework, jQuery
wkład: kodowanie od A-Z, cięcie szablonu


Z tego projetu jestem zadowolony, nauczyłem się przy nim ZF + panel administracyjny w wersji pierwotnej był wykonany za pomocą GWT + EXT jednak z powodu - brak rąk do pomocy - zrezygnowałem z GWT i postawiłem na HTML + biblioteję jQuery

Wyciągłem z niego jeszcze jedną mądrą naukę, własne framework-i są ok, ale co jest dziełem tak ogromnej społeczność wychodzi poza wymiar ok!

Jest już kilka innych tytułów w drodze, nieomieszkam ich nie opisać.

niedziela, 24 lutego 2008

HTTPRequest.asyncPost

Nie myślałem że trzeba się tak natrudzić by wysłać dane POST z poprawnymi nagłówkami.

Dokumentacja mówi:

asyncPost(java.lang.String url, java.lang.String postData, ResponseTextHandler handler)

Makes an asynchronous HTTP POST to a remote server.
Zastosowanie trywialne ..
HTTPRequest.asyncPost("http://example.pl","id=2",new MyResponseTextHandler());
..prawie, bo żadne dane nie zostały przesłane.

Firebug pokazuję jakie dane POST zostały wysłane (nie do w/w przykładu):

a powinny one wyglądać mniej więcej tak:

Pomyślałem że 2gi parametr postData powinien być jako JSON ale - też nie :/.
Nie ma tego złego bo nauczyłem się generować JSON w GWT :)

Google.pl pomogły znaleźć rozwiązanie - link
wystarczy dodać w kodzie php takie 2 linie kodu i wszystko działa :)

$postData = array();
parse_str(file_get_contents('php://input'), $postData);