Wow no troszkę się nazbierało materiału. W czasie trwania konkursu nauczyłem się wielu przydatnych rzeczy odnośnie frameworków, php, baz danych. Uzyskałem wiele informacji na temat urządzeń GPS o zapisie drogi w formacie KML lub KMZ. Dowiedziałem się iż pozycja w zdjęciach zrobionych w urządzeniach wyposażonych w funkcje geotagingu z gps (nie wliczam tu telefonów se w których kwestia ta jest różnie rozwiązana i nie zawsze informacje o geotagingu są przechowywane w formacie EXIF) jest zapisywana w formacie EXIF. Dowiedziałem się również jak umieszczać mapy google na swojej stronie oraz jak je konfigórować, uczyłem się api google maps. Uczyłem się api facebooka. Poznałem sposoby manipulowania informacjami w portalu facebook o tym iż każdy obiekt w portalu ma unikatowy numer i mogę się do niego odwołać po tym numerze. Dowiedziałem się jak działają aplikacje w portalu. Cała ta wiedza jest przydatna w procesie tworzenia programu. Jest tego dużo ale znów nie aż tak dużo żeby to strasznie przytłaczało. Powiem iż dzięki temu konkursowi udoło mi się poszerzyć swoją wiedzę w znaczny sposób i za to dziękuje pomysłodawcą projektu.
Pisze posta podsumowując w wielkim skrócie to co udało mi się wyszperać i nauczyć. Jeżeli ktokolwiek jest zainteresowany szczegółowymi informacjami o rzeczach jakie tu wymieniam to zapraszam do przeglądnięcia szczegółowych postów na ten temat.
Wiem już że mogę się nie wyrobić z aplikacją z względów czasowych do końca konkursu ale nawet jak nie zdążę to i tak przedstawię ją na łamach bloga. Mam nadzieję że informacje które tu przedstawiam przydają się komukolwiek chodź wiem ze wiedza tu zawarta nie jest może na jakimś wysmakowanym poziomie.
Do końca października zamierzam wprowadzać na blogu tematy już konkretnie związane z alikacją mam nadzieje że zdążę :), a mniej wiedzy teoretycznej tak jak miło to miejsce do tej pory.
Wiem że dzisiejszy post jest mało związany z konkretami ale od czasu do czasu podsumowanie oraz zebranie wszystkiego w jednym miejscu jest potrzebne.
Najważniejsze jest to, iż wiedza jaką zdobyłem była niesamowicie potrzebna. Bez informacji na temat geolokalizacji projekt najprawdopodobniej wcale nie poszedłby do przodu. Jeśli ktoś ma jakiekolwiek materiały na temat geolokalizacji lub formatu exif, to chętnie poczytam. W internecie są co prawda materiały na ten temat ale może ktoś ma coś bardziej interesującego.
Blog jest poświęcony rozwijaniu projektu portalu który ma za zadanie pomagać rowerzystą w znajdywaniu najlepszych dla nich tras rowerowych i w rozeznaniu się gdzie najlepiej jest wybrać się na przejażdżkę rowerem. Serwis ma utworzyć społeczność cyklistów wymieniających się spostrzeżeniami na temat tras rowerowych.
niedziela, 10 października 2010
niedziela, 3 października 2010
Zabezpieczamy symfony
Symfony ma jedną dość dobrą zaletę . Mianowicie pluginy. Zauważyłem ze jest jedno przewodnie zdanie które doskonale reprezentuje symfony a mianowicie "po co wymyślać znów koło? ". No tak po co mamy je wymyślać skoro możemy z niego korzystać :).
Dziś zajmiemy się autentyfikacją użytkownika. I nie będę pisał skomplikowanych wierszy kodu :) bo po co skoro są pluginy :). Zaczynajmy więc:
Pierwsza sprawa to zabezpieczenia wejścia dla konkretnej aplikacji w symfony co robimy za pomocą zmiany kodu w:
apps/nazwa/config/security.yml
default:
is_secure: false //oczywiscie zmieniamy na true
Tym sposobem gdy będziecie chcieli wejść sobie po adresie na aplikacje w tym przypadku "nazwa" wyskoczy informacja iż strona nie jest dostępna publicznie.
Następnie przydałby się nam plugin. W tym celu w pierwszej kolejności sprawdźmy czy mamy zainstalowany PEAR ponieważ jest on wymagany dla następującego polecenia dla symfony:
php symfony plugin:install sfDoctrinePlugin
Jeżeli korzystamy z tego sposobu instalacji to automatycznie zostaje zmieniona
// config/ProjectConfiguration.class.php
zatem nie mamy się już czym przejmować. Jeżeli natomiast robimy to w innym sposobem to musimy pamiętać o włączeniu pluginu ręcznie co prezentuje poniżej:
Po zainstalowaniu pluginu wykonujemy standardowe polecenie:
php symfony doctrine:build --all --and-load --no-confirmation
Następnie zmieniamy ustawienia w settings.yml na odpowednie :
Po tych zabiegach powinniśmy po odświeżeniu strony zobaczyć formularz logowania :) I to jest właśnie urok symfony :)
Następnie utwórzmy jakiegoś usera do logowania:
php symfony guard:create-user abc SecrestPass
php symfony guard:promote abc
Od teraz możemy posługiwać się metodą isAuthenticated() która zwara czy jesteśmy zalogowaniu czy nie:) zatem jeżeli chcemy aby tylko zalogowani wdzieli np menu to zwyczajnie w layoucie dajemy:
Jak widać prawie nie pisząc kodu można zrobić w symfony ładnie wyglądający skrypt logowania.
Pozostało jeszcze aby zalogowani użytkownicy mogli się wylogowac:
wiec dodajmy w miejscu "cos w menu" <?php echo link_to('Logout', 'sf_guard_signout') ?>
Prawda że to proste. Jeżeli ktoś chce bardziej zainteresować tą tematyką to zapraszam do studiowania tego adresu: http://www.symfony-project.org/jobeet/1_4/Doctrine/en/13.
Dziś zajmiemy się autentyfikacją użytkownika. I nie będę pisał skomplikowanych wierszy kodu :) bo po co skoro są pluginy :). Zaczynajmy więc:
Pierwsza sprawa to zabezpieczenia wejścia dla konkretnej aplikacji w symfony co robimy za pomocą zmiany kodu w:
apps/nazwa/config/security.yml
default:
is_secure: false //oczywiscie zmieniamy na true
Tym sposobem gdy będziecie chcieli wejść sobie po adresie na aplikacje w tym przypadku "nazwa" wyskoczy informacja iż strona nie jest dostępna publicznie.
Następnie przydałby się nam plugin. W tym celu w pierwszej kolejności sprawdźmy czy mamy zainstalowany PEAR ponieważ jest on wymagany dla następującego polecenia dla symfony:
php symfony plugin:install sfDoctrinePlugin
Jeżeli korzystamy z tego sposobu instalacji to automatycznie zostaje zmieniona
// config/ProjectConfiguration.class.php
zatem nie mamy się już czym przejmować. Jeżeli natomiast robimy to w innym sposobem to musimy pamiętać o włączeniu pluginu ręcznie co prezentuje poniżej:
// config/ProjectConfiguration.class.php class ProjectConfiguration extends sfProjectConfiguration { public function setup() { $this->enablePlugins(array( 'sfDoctrinePlugin', 'sfDoctrineGuardPlugin' )); } }
Po zainstalowaniu pluginu wykonujemy standardowe polecenie:
php symfony doctrine:build --all --and-load --no-confirmation
Następnie zmieniamy ustawienia w settings.yml na odpowednie :
# apps/nazwa/config/settings.yml
all:
.settings:
enabled_modules: [default, sfGuardAuth]
# ...
.actions:
login_module: sfGuardAuth
login_action: signin
# ...Po tych zabiegach powinniśmy po odświeżeniu strony zobaczyć formularz logowania :) I to jest właśnie urok symfony :)
Następnie utwórzmy jakiegoś usera do logowania:
php symfony guard:create-user abc SecrestPass
php symfony guard:promote abc
Od teraz możemy posługiwać się metodą isAuthenticated() która zwara czy jesteśmy zalogowaniu czy nie:) zatem jeżeli chcemy aby tylko zalogowani wdzieli np menu to zwyczajnie w layoucie dajemy:
// apps/nazwa/templates/layout.php <?php if ($sf_user->isAuthenticated()): ?> <div id="menu">
//cos w menu :)
</div> <?php endif ?>
Jak widać prawie nie pisząc kodu można zrobić w symfony ładnie wyglądający skrypt logowania.
Pozostało jeszcze aby zalogowani użytkownicy mogli się wylogowac:
wiec dodajmy w miejscu "cos w menu" <?php echo link_to('Logout', 'sf_guard_signout') ?>
Prawda że to proste. Jeżeli ktoś chce bardziej zainteresować tą tematyką to zapraszam do studiowania tego adresu: http://www.symfony-project.org/jobeet/1_4/Doctrine/en/13.
EXIF FILE
Dziś powiem o formacie pliku który trochę daje mi w kość a mianowicie o plikach EXIF. Jest do rozszerzenie pliku np: jpg które zawiera wiele przydatnych informacji dodatkowych do zdjęcia. Z mojego punktu widzenia najbardziej przydatnymi informacjami będą informacje zapisywane z gps czyli po prostu geotaging zdjęć.
Dzięki tym informacją będę mógł osadzić zdjęcie na mapie w punkcie w którym zostało ono zrobione.
Tak przygotowane Fotki można bezproblemowo zamieścić na mapie google dzieki portalom takim jak http://www.panoramio.com/. Jeżeli zdjęcie zawiera dane geograficzne (pozycje z GPS) zapisana w exif to automatycznie po odczytaniu zdjęcia zostanie one przydzielone do współrzędnych geograficznych.
Nie udało mi się jednak dojść jeszcze do sposobu w jakim mógłbym wyświetlić jednocześnie zdjęcie oraz trasę zapisaną w postaci plików KML.
Istnieje parser napisany dla pythona ale ja bym potrzebował coś bardziej pod php jakąś bibliotekę.
Zwracam się z prośbą do uczestników konkursu może ktoś się interesował taką tematyką ? Jeżeli tak to proszę o podpowiedz gdzie szukać odpowiedzi.
Dzięki tym informacją będę mógł osadzić zdjęcie na mapie w punkcie w którym zostało ono zrobione.
Tak przygotowane Fotki można bezproblemowo zamieścić na mapie google dzieki portalom takim jak http://www.panoramio.com/. Jeżeli zdjęcie zawiera dane geograficzne (pozycje z GPS) zapisana w exif to automatycznie po odczytaniu zdjęcia zostanie one przydzielone do współrzędnych geograficznych.
Nie udało mi się jednak dojść jeszcze do sposobu w jakim mógłbym wyświetlić jednocześnie zdjęcie oraz trasę zapisaną w postaci plików KML.
Istnieje parser napisany dla pythona ale ja bym potrzebował coś bardziej pod php jakąś bibliotekę.
sobota, 2 października 2010
symfony vs facebook
Dziś przytoczę kilka cennych uwag związanych z instalacja a właściwie uruchomieniem symfony na facebooku.
Generalnie nie jest to jakaś trudna sztuka ale jest kilka aspektów o jakich należy pamiętać podczas próby wpakowania symfony do okienka facebooka.
Pierwszą ważną sprawą jest sama konfiguracja facebooka wspominałem o niej już wcześniej ale przypomnę tylko najważniejsze rzeczy.
Musimy gdzieś umieścić aplikacje. Wiadomo przecież ze facebook na swoim portalu nie oferuje nam hostingu zatem musimy mieć jakieś miejsce w sieci gdzie przepakujemy sobie pliki symfony.
Jeśli już posiadamy takie miejsce to musimy stworzyć aplikacje w facebooku o tym pisałem na początku wiec jak ktoś nie wie jak to robić to niech przejrzy pierwsze posty. W panelu edycji aplikacji zakładce Facebook Integration podajemy ważny parametr nazwany Canvas URL. Tu znajduje się a w zasadzie zostaje wpisany adres do plików symfony znajdujących się gdzieś na "naszym" serwerze w internecie.
No i przyszedł czas na wybranie opcji wyświetlania naszej strony w portalu, do wyboru mamy FBML albo pływająca ramka. Jeżeli wybierzemy pływającą ramkę to możemy już korzystać z efektów naszej pracy ale przecież my chcemy aby tagi facebooka także były interpretowane ( <fb > ) wiec to nie jest wybór dla nas.
Wybieramy więc FBML. Wszytko pięknie no może poza faktem że po odpaleniu adresu http://apps.facebook.com/MOJA_APLIKACJA/ symfony ruszy ale bez obrazków. Wiemy już dlaczego się tak dzieje wiec szybko podajemy ścieżkę dla obrazków no i wiadomo co dalej czyli udostępnianie cache i tak dalej czyli wszystko co jest w normalnym procesie instalacji.
Niby ok ale jednak coś jest nie tak. No przecież nie możemy sobie pozwolić na to iż user będzie miał dostęp do wszystkich plików naszego frameworka przecież to mogło by być niebezpieczne !!. Zatem musimy wyciągnąć wszystkie składowe frameworka przed tak zwany public_html. Ściślej mówiąc chodzi o przechowanie plików symfony wyżej niż dostępne dla użytkownika foldery i elementy.
W moim przypadku folder który jest dla usera nazywa się public_htm. Zatem wszystkie elementy symfony (foldery) nie wliczając "web" dajemy na tym samym poziomie co public_html. Zawartość folderu web dajemy do public_html. Odświeżamy stronę i? :) i nic :D.
A to dlatego że musimy "powiedzieć symfony iż teraz folder "web" to folder public_html.
Zmiany takiej dokonamy przechodząc do config/ProjectConfiguration.class.php następni edytujemy ten plik i dopisujemy w metodzie setup następującą linie kodu:
$this->setWebDir($this->getRootDir().'/public_html');
To wystarczy do tego aby symfony wiedziało ze teraz to public_html jest właściwym folderem.
Dodatkowo należy pamiętać o zrobieniu linka w folderze public_html do obrazków. Ja to zrobiłem umieszczając w nim link o nazwie "sf" do katalogu 0:/public_html/uploads/.
W layaut należy pamiętać ze niemożna używać tagów html-owych nie możemy mieć <html> czy <body> bo już jesteśmy przecież w takiej strukturze portalu (facebooka)
Słowem końca powiem że jest jeszcze kilka elementów dotyczących prawidłowego postawienia symfony dla facebooka ale więcej informacji napisze kiedy indziej ze względy na ograniczoność czasową jaka mnie ostatnio dotyka :)
Generalnie nie jest to jakaś trudna sztuka ale jest kilka aspektów o jakich należy pamiętać podczas próby wpakowania symfony do okienka facebooka.
Pierwszą ważną sprawą jest sama konfiguracja facebooka wspominałem o niej już wcześniej ale przypomnę tylko najważniejsze rzeczy.
Musimy gdzieś umieścić aplikacje. Wiadomo przecież ze facebook na swoim portalu nie oferuje nam hostingu zatem musimy mieć jakieś miejsce w sieci gdzie przepakujemy sobie pliki symfony.
Jeśli już posiadamy takie miejsce to musimy stworzyć aplikacje w facebooku o tym pisałem na początku wiec jak ktoś nie wie jak to robić to niech przejrzy pierwsze posty. W panelu edycji aplikacji zakładce Facebook Integration podajemy ważny parametr nazwany Canvas URL. Tu znajduje się a w zasadzie zostaje wpisany adres do plików symfony znajdujących się gdzieś na "naszym" serwerze w internecie.
No i przyszedł czas na wybranie opcji wyświetlania naszej strony w portalu, do wyboru mamy FBML albo pływająca ramka. Jeżeli wybierzemy pływającą ramkę to możemy już korzystać z efektów naszej pracy ale przecież my chcemy aby tagi facebooka także były interpretowane ( <fb > ) wiec to nie jest wybór dla nas.
Wybieramy więc FBML. Wszytko pięknie no może poza faktem że po odpaleniu adresu http://apps.facebook.com/MOJA_APLIKACJA/ symfony ruszy ale bez obrazków. Wiemy już dlaczego się tak dzieje wiec szybko podajemy ścieżkę dla obrazków no i wiadomo co dalej czyli udostępnianie cache i tak dalej czyli wszystko co jest w normalnym procesie instalacji.
Niby ok ale jednak coś jest nie tak. No przecież nie możemy sobie pozwolić na to iż user będzie miał dostęp do wszystkich plików naszego frameworka przecież to mogło by być niebezpieczne !!. Zatem musimy wyciągnąć wszystkie składowe frameworka przed tak zwany public_html. Ściślej mówiąc chodzi o przechowanie plików symfony wyżej niż dostępne dla użytkownika foldery i elementy.
W moim przypadku folder który jest dla usera nazywa się public_htm. Zatem wszystkie elementy symfony (foldery) nie wliczając "web" dajemy na tym samym poziomie co public_html. Zawartość folderu web dajemy do public_html. Odświeżamy stronę i? :) i nic :D.
A to dlatego że musimy "powiedzieć symfony iż teraz folder "web" to folder public_html.
Zmiany takiej dokonamy przechodząc do config/ProjectConfiguration.class.php następni edytujemy ten plik i dopisujemy w metodzie setup następującą linie kodu:
$this->setWebDir($this->getRootDir().'/public_html');
To wystarczy do tego aby symfony wiedziało ze teraz to public_html jest właściwym folderem.
Dodatkowo należy pamiętać o zrobieniu linka w folderze public_html do obrazków. Ja to zrobiłem umieszczając w nim link o nazwie "sf" do katalogu 0:/public_html/uploads/.
W layaut należy pamiętać ze niemożna używać tagów html-owych nie możemy mieć <html> czy <body> bo już jesteśmy przecież w takiej strukturze portalu (facebooka)
Słowem końca powiem że jest jeszcze kilka elementów dotyczących prawidłowego postawienia symfony dla facebooka ale więcej informacji napisze kiedy indziej ze względy na ograniczoność czasową jaka mnie ostatnio dotyka :)
niedziela, 26 września 2010
Trasy Rowerowe
Dziś powiem jak zamierzam publikować trasy rowerowe w aplikacji. Praca jest przewidziana dla osób lubiących jeździć na rowerze. Sam proces wprowadzania danych do programy o miejscach pobytu nie może być zatem zbyt skomplikowany. Najlepszym z możliwych rozwiązań jest korzystanie z urządzeń GPS. A te oferują całkiem niezły mechanizm komunikacji z aplikacjami :).
Pisze trochę tajemniczo wiec już zaczynam tłumaczyć. Część odbiorników GPS zapisuje w pamięci najczęściej na karcie pamięci informacje o tym gdzie aktualnie się znajduje. Dzięki takiemu zapisowi dostajemy zbiór informacji w postaci pojedynczego pliku o trasie jaką już pokonaliśmy. Plik taki zapisywany jest w rozszerzeniu kml . Jest to plik dzięki któremu możemy wyświetlić dane geograficzne np w google maps, google earth czy google maps dla urządzeń mobilnych. Dzięki uprzejmości google oraz ich otwartemu api dla map bez problemu mogę ustawić swoją mapę google na stronie mojego projektu a dzięki plikom kml zostaje uproszczone zadanie podawania danych do aplikacji.
Sama struktura wewnętrzna pliku jest bazowana na plikach xml i dla przykłądu zostanie pokazana poniżej:
Przykład ten jest zaczerpnięty z tutoriala dotyczącego obsługi map google oraz plików kml znajdującego się na stronie: http://code.google.com/apis/kml/documentation/kml_tut.html.
Kolejną stroną warta do przeglądnięcia jest http://econym.org.uk/gmap/ .
Dzięki zastosowaniu api google maps oraz sposobu zamieszczania map uzyskałem prosty oraz nie wymagający dużej ilości kodowania sposób na prezentacje map.
Pisze trochę tajemniczo wiec już zaczynam tłumaczyć. Część odbiorników GPS zapisuje w pamięci najczęściej na karcie pamięci informacje o tym gdzie aktualnie się znajduje. Dzięki takiemu zapisowi dostajemy zbiór informacji w postaci pojedynczego pliku o trasie jaką już pokonaliśmy. Plik taki zapisywany jest w rozszerzeniu kml . Jest to plik dzięki któremu możemy wyświetlić dane geograficzne np w google maps, google earth czy google maps dla urządzeń mobilnych. Dzięki uprzejmości google oraz ich otwartemu api dla map bez problemu mogę ustawić swoją mapę google na stronie mojego projektu a dzięki plikom kml zostaje uproszczone zadanie podawania danych do aplikacji.
Sama struktura wewnętrzna pliku jest bazowana na plikach xml i dla przykłądu zostanie pokazana poniżej:
<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
<Placemark>
<name>Simple placemark</name>
<description>Attached to the ground. Intelligently places itself
at the height of the underlying terrain.</description>
<Point>
<coordinates>-122.0822035425683,37.42228990140251,0</coordinates>
</Point>
</Placemark>
</kml>Przykład ten jest zaczerpnięty z tutoriala dotyczącego obsługi map google oraz plików kml znajdującego się na stronie: http://code.google.com/apis/kml/documentation/kml_tut.html.
Kolejną stroną warta do przeglądnięcia jest http://econym.org.uk/gmap/ .
Dzięki zastosowaniu api google maps oraz sposobu zamieszczania map uzyskałem prosty oraz nie wymagający dużej ilości kodowania sposób na prezentacje map.
niedziela, 19 września 2010
Praca z frameworkiem cz 3
W poprzednim poście pisałem o formularzach oraz o możliwości generowania formularzy z bazy danych oraz o kilku możliwościach konfiguracji formularza w metodzie configure(). W tym poście chce poświecić jeszcze trochę miejsca w tematyce formularzy. Kładę nacisk specjalnie na ten temat ponieważ będzie on stanowił on integralną część powstającego programu.
Dziś opisze działanie przydatnej metody do konfigurowania widoku, wyglądu formularza.
Przykładowo aby wyświetlić formularz należy zastosować prosty kod
Na szczęście symfony pozawala na używanie wielu przydatnych metod w celu łatwego konfigurowania formularza.
Poniżej przedstawię kilka pomocnych metod oraz opisze do czego one służą:
render() - wyświetlanie formularza odpowiednik echo $from
renderHiddenFields() - wyświetlanie ukrytych pól
hasErrors() - zwraca true jesli formularz ma jakieś błędy
hasGlobalErrors() - zwraca true jeśli formularz ma błedy globalne
getGlobalErrors() - zwraca tablice błędów globalnych
renderGlobalErrors() - wyświetla błędy globalne
Formularz często zachowuje się jak tablica pól . Aby otrzymać dostęp do pola "pola" należy posłużyć się zwrotem $form['pola']. Obiekt ma możliwość użycia kilku metod które działają na każdym elemencie pola. Funkcje te to:
renderRow()
render()
renderLabel()
renderError()
renderHelp()
nazwy funkcji mówią w zasadzie same za siebie tak że nie widzę potrzeby ich opisywania. Jednak jeżeli znajdzie się ktoś ciekawy to odsyłam do dokumentacji symfony.
To wszystko na dziś ale obiecuje że do tematu formularzy powrócę jeszcze w przyszłych postach już w opisie gotowej aplikacji a nie założeń teoretycznych jak ma to miejsce teraz.
Dziś opisze działanie przydatnej metody do konfigurowania widoku, wyglądu formularza.
Przykładowo aby wyświetlić formularz należy zastosować prosty kod
<?php echo $form ?>Jednakże zastosowanie tylko takiego fragmentu kodu spowoduje wyświetlenie formularza jako wiersze tabeli. Nie zawsze takie rozwiązanie nam pasuje i większość czasu jaki potrzebny jest do utworzenia formularza spędzamy na ustawianiu layautu dla niego.
Na szczęście symfony pozawala na używanie wielu przydatnych metod w celu łatwego konfigurowania formularza.
Poniżej przedstawię kilka pomocnych metod oraz opisze do czego one służą:
render() - wyświetlanie formularza odpowiednik echo $from
renderHiddenFields() - wyświetlanie ukrytych pól
hasErrors() - zwraca true jesli formularz ma jakieś błędy
hasGlobalErrors() - zwraca true jeśli formularz ma błedy globalne
getGlobalErrors() - zwraca tablice błędów globalnych
renderGlobalErrors() - wyświetla błędy globalne
Formularz często zachowuje się jak tablica pól . Aby otrzymać dostęp do pola "pola" należy posłużyć się zwrotem $form['pola']. Obiekt ma możliwość użycia kilku metod które działają na każdym elemencie pola. Funkcje te to:
renderRow()
render()
renderLabel()
renderError()
renderHelp()
nazwy funkcji mówią w zasadzie same za siebie tak że nie widzę potrzeby ich opisywania. Jednak jeżeli znajdzie się ktoś ciekawy to odsyłam do dokumentacji symfony.
To wszystko na dziś ale obiecuje że do tematu formularzy powrócę jeszcze w przyszłych postach już w opisie gotowej aplikacji a nie założeń teoretycznych jak ma to miejsce teraz.
Praca z frameworkiem cz 2
Wspomniałem wcześniej że do rozpoczęcia pracy najpierw uczę się opanować obsługę frameworka. Wybranym frameworkiem jak pisałem wcześniej jest symfony. W wcześniejszym poście podałem również link do idealnego i chyba najlepszego kursu jaki jest dostępny o symfony czyli kursie joobet. Kurs jest bardzo klarowny i dobrze skonstruowany jednak chciałem poruszyć pewną kwestie w kursie a dokładnie chodzi o tworzenie formularzy.
Formularze w symfony składają się z trzech części:
- validation (walidatora) jest to zbiór klas przeznaczonych do sprawdzania wejścia czyli do sprawdzania poprawności danych wpisywanych do formularza.
- widget : jest to zbór klas których zadaniem jest umieszczenie odpowiednich pól formularza np ( textareea, select czy input).
- forms: klasa form reprezentuje formularz stworzony z widgetow i walidatorów oraz metod pomagających zarządzać formularzem. Każde pole formularza ma swój własny widget i validator.
W symfony formularz jest klasa zrobioną z pól. Każde z tych pól ma nazwe , walidator, widgeta. Przykładem prostego formularza może być następująca klasa.
Na przykładzie pola email wiać iż jest ono tworzone widgetem (sfWidgetFormInputText) oraz poprawność tego pola jest przeprowadzana poprzez validator (sfValidatorEmail).
Ponieważ symfony "wie" dokładnie wszytko na temat naszej bazy danych bazując na modelu bazy, moze on automatycznie stworzyć formularz na podstawie tego jakie pola znajdują się w naszej bazie danych. W symfony służy do tego polecenie php symfony doctrine:build --forms. Jednak większość użytkowników korzystających z tego frameworka użyła polecenie php symfony doctrine:build -all które zawiera poprzednie polecenie w sobie.
Polecenie to tworzy klase w katalogu lib/form. Każdy model klasy ma swój odpowiedni formularz. Znaczy to tyle iż dla instancji np mojprojekt zostanie utworzony formularz mojprojektForm który domyślnie jest pusty i dziedziczy z klasy bazowej.
Oczywiście możemy wyłączyć generowanie formularzy jeżeli nie potrzebujemy takiej możliwości. Należy w tym celu przejść do pliku yaml z schematem naszej bazy i dopisać następujące właściwości.
Wiemy już ze aby konfigurować formularze musimy przejść do metody configure() zatem przejdźmy tam i dla przykładu pokaże tu kod usuwający z formularza 4 pola ( kod pobrany jest z kursu joobet).
Pola zawarte w tablicy to nazwy pół z bazy danych które mają zostać prze generowane na pola formularza.
Kolejną przydatną rzeczą jest ustawiania sprawdzania pól. Przykładowo jeżeli w schemacie pole email jest oznaczone jako varchar a my chcemy aby kolumna byla sprawdzana jako email to musimy w metodzie configure() dodać nastepująca linie.
najpierw ustawiamy możliwe wartości w pliku xxxxxxTable.class. Przykład tu pobrany z kursu joobet.
To tyle. W wolnej chwili przygotuje jeszcze dalszy opis pracy z formularzami. Wybrałem ten temat ponieważ wydał mi się interesujący pyzatym na pewno wykorzystam te możliwości w swoim projekcie. W następnym Poście powrócę jeszcze do tej tematyki.
Formularze w symfony składają się z trzech części:
- validation (walidatora) jest to zbiór klas przeznaczonych do sprawdzania wejścia czyli do sprawdzania poprawności danych wpisywanych do formularza.
- widget : jest to zbór klas których zadaniem jest umieszczenie odpowiednich pól formularza np ( textareea, select czy input).
- forms: klasa form reprezentuje formularz stworzony z widgetow i walidatorów oraz metod pomagających zarządzać formularzem. Każde pole formularza ma swój własny widget i validator.
W symfony formularz jest klasa zrobioną z pól. Każde z tych pól ma nazwe , walidator, widgeta. Przykładem prostego formularza może być następująca klasa.
Pola formularza są konfigurowane w metodzie configore() poprzez używanie metod setValidators() oraz setWidgets().class ContactForm extends sfForm { public function configure() { $this->setWidgets(array( 'email' => new sfWidgetFormInputText(), 'message' => new sfWidgetFormTextarea(), )); $this->setValidators(array( 'email' => new sfValidatorEmail(), 'message' => new sfValidatorString(array('max_length' => 255)), )); } }
Na przykładzie pola email wiać iż jest ono tworzone widgetem (sfWidgetFormInputText) oraz poprawność tego pola jest przeprowadzana poprzez validator (sfValidatorEmail).
Ponieważ symfony "wie" dokładnie wszytko na temat naszej bazy danych bazując na modelu bazy, moze on automatycznie stworzyć formularz na podstawie tego jakie pola znajdują się w naszej bazie danych. W symfony służy do tego polecenie php symfony doctrine:build --forms. Jednak większość użytkowników korzystających z tego frameworka użyła polecenie php symfony doctrine:build -all które zawiera poprzednie polecenie w sobie.
Polecenie to tworzy klase w katalogu lib/form. Każdy model klasy ma swój odpowiedni formularz. Znaczy to tyle iż dla instancji np mojprojekt zostanie utworzony formularz mojprojektForm który domyślnie jest pusty i dziedziczy z klasy bazowej.
Oczywiście możemy wyłączyć generowanie formularzy jeżeli nie potrzebujemy takiej możliwości. Należy w tym celu przejść do pliku yaml z schematem naszej bazy i dopisać następujące właściwości.
SomeModel:
options:
symfony:
form: false
filter: falseJeżeli zdecydujemy się na wykorzystanie jednak automatycznie generowanych formularzy a chyba po to między innymi praujemy z frameworkami to może się okazać że nie chcemy aby wszystkie pola bazy danych były zawarte w formularzu. Np nie potrzebujemy pól takich jak "id" przynajmniej nie w formularzu.Wiemy już ze aby konfigurować formularze musimy przejść do metody configure() zatem przejdźmy tam i dla przykładu pokaże tu kod usuwający z formularza 4 pola ( kod pobrany jest z kursu joobet).
Jest to wygodna i czytelna metoda usuwania pól w formularzu. Istnieje również możliwość podania po prostu które pola nas interesują i te pola zostaną tylko wyświetlone w formularzu. Możliwość taka przedstawiona zostanie poniżej.
class JobeetJobForm extends BaseJobeetJobForm { public function configure() { unset( $this['created_at'], $this['updated_at'], $this['expires_at'], $this['is_activated'] ); } }
class JobeetJobForm extends BaseJobeetJobForm { public function configure() { $this->useFields(array('category_id', 'type', 'company', 'logo', 'url', 'position', 'location', 'description', 'how_to_apply', 'token', 'is_public', 'email')); } }
Pola zawarte w tablicy to nazwy pół z bazy danych które mają zostać prze generowane na pola formularza.
Kolejną przydatną rzeczą jest ustawiania sprawdzania pól. Przykładowo jeżeli w schemacie pole email jest oznaczone jako varchar a my chcemy aby kolumna byla sprawdzana jako email to musimy w metodzie configure() dodać nastepująca linie.
Kto się zna na symfony to na pewno zauważy że jest tu jednak coś nie tak. No pewnie skoro ustawiamy nowy validator do pola email jako validator sfValidatorEmail() to tracimy te validatory ustawione domyślnie przez generator. Lepszym sposobem jest dodanie nowego walidatora do już istniejących. Aby to uczynić do metody configure dopisujemy np taki fragment kodu.
public function configure() { // ... $this->validatorSchema['email'] = new sfValidatorEmail(); }
Jeżeli pole w schemacie jest oznaczone jako varchar i chcemy ograniczyć to pole do listy wyborów przygotowanej przez nas to należny się posłużyć przykładem poniżej:public function configure() { // ... $this->validatorSchema['email'] = new sfValidatorAnd(array( $this->validatorSchema['email'], new sfValidatorEmail(), )); }
najpierw ustawiamy możliwe wartości w pliku xxxxxxTable.class. Przykład tu pobrany z kursu joobet.
Następnie ustawiamy widgeta
class JobeetJobTable extends Doctrine_Table { static public $types = array( 'full-time' => 'Full time', 'part-time' => 'Part time', 'freelance' => 'Freelance', ); public function getTypes() { return self::$types; } // ... }
$this->widgetSchema['type'] = new sfWidgetFormChoice(array( 'choices' => Doctrine_Core::getTable('JobeetJob')->getTypes(), 'expanded' => true, ));
To tyle. W wolnej chwili przygotuje jeszcze dalszy opis pracy z formularzami. Wybrałem ten temat ponieważ wydał mi się interesujący pyzatym na pewno wykorzystam te możliwości w swoim projekcie. W następnym Poście powrócę jeszcze do tej tematyki.
niedziela, 12 września 2010
Prostym Okiem na api facebooka
O symfony bedę pisał następnym razem. Dziś powiem co nieco o facebooku i jego api. Posłużę się tu banalnym przykładem ale chyba oddającym to co trzeba żeby zrozumieć ze api facebooka jest dość logicznie skonstruowane.
W wcześniejszych postach podałem link do polskiego opisu jak stworzyć prostą aplikacje z PHP pod facebooka.
Dziś chce wyjaśnić tym którzy nie rozumieją jej działanie. Nie chce tu przytaczać całego kodu aplikacji. Powinien on być zrozumiały. Chce pokazać jak prosto można wyciągać interesujące nas informacje i na nich pracować. Przykładowymi informacjami niech będzie imię i nazwisko naszych znajomych. Jak je zdobyć ?. Jest to bardzo proste zadanie.
Należy jednak pamiętać iż wcześniej musimy pobrać biblioteke dla PHP z strony facebook dla developerów. Link do strony jest umieszczony w jednym z początkowych postów.
Następnie dołączamy jak każdą inna bibliotekę w PHP za pomocą komendy require_once 'facebook.php';
musimy pamiętać iż aby facebook nas rozpoznał i wiedział ze nasza aplikacja jest naszą aplikacją to nalezy podać 2 istotne parametry:
$appapikey = 'twój apikey'; // z wiadomych przyczyn nie podaje tu prawdziwych kodów tylko podaje miejsce gdzie nalezy je wpisać. Kody znajdziecie w panelu developera.
$appsecret = 'twój secret';
$facebook = new Facebook($appapikey, $appsecret);
skoro pojawia się słówko new to wiemy ze tworzymy nowy obiekt na którym będziemy pracować a ponieważ parametry tego obiektu to klucze, wiec tak właśnie facebook wie ze nasza aplikacja jest naszą aplikacja :).
Kolejna linijka to linia mówiąza o tym iż aby zobaczyć efekt działania pracy skryptu w facebooku wymagany jest login.
$user_id = $facebook->require_login();
A teraz trochę magii czyli api; Chce aby z $user_id pokazało mi się na ekranie nazwa użytkownika który uruchamia program. Nic prostszego, poniższa linia to załatwi :)
<fb:name uid='<?php echo $user_id; ?>' useyou='false' possessive='true' />
tagi <fb> to włansie taki facebooka . Powyższa linia mówi alby wyświetlić nazwę użytkownika jako parametr uid podajemy identyfikator użytkownika zapisany w zmiennej user_id dodatkowo np dzięki parametrowi possessive do naszej nazwy dodamy charakterystyczny w angielskiej pisowni symbol ('s)
na końcu. Prawda że łatwe :).
Ale wróćmy do celu. Chcemy wyświetlić imiona i nazwiska naszych znajomych nie siebie samego.
Wiec powiedzmy facebookowi że chcemy listę naszych znajomych.
$friends = $facebook->api_client->friends_get();
$friends = array_slice($friends, 0, 25);
Proszę bardzo i już ją mamy. Teraz zostało tylko przepuszczenie $friends przez pętle i już. Proponuje np tak:
foreach ($friends as $friend) {
echo "<br>";
$userinfo = $facebook->api_client->users_getInfo($friend, 'first_name');
echo $userinfo[0]['first_name'];
echo $userinfo[0]['last_name'];
}
echo "</p>";
To tyle. Powstanie piękna lista znajomych. Dostęp do poszczególnych elementów jak zdjęcia naszych znajomych czy cokolwiek innego nie jest trudniejszy ponieważ w facebooku wszystko nawet zdjecia są traktowane jak obiekty i każdy z nich ma swoją unikatową nazwę.
Jest to proste pokazanie co można zrobić. I że nie jest to wcale takie trudne. Do mojej aplikacji oczywiście potrzeba znacznie bardziej skomplikowanych struktur ale ten prosty przykład pokazuje ze api facebooka jest przystępne i logiczne a obiekty są nazywane z sensem. W trakcie budowy mojej aplikacji od czasu do czasu będę pokazywać na blogu jak niektóre rzeczy zostały napisane przeze-mnie. Kod całej aplikacji i tak będzie dostępny ale najbardziej interesujące fragmenty doczekają się szerszego opisu.
W wcześniejszych postach podałem link do polskiego opisu jak stworzyć prostą aplikacje z PHP pod facebooka.
Dziś chce wyjaśnić tym którzy nie rozumieją jej działanie. Nie chce tu przytaczać całego kodu aplikacji. Powinien on być zrozumiały. Chce pokazać jak prosto można wyciągać interesujące nas informacje i na nich pracować. Przykładowymi informacjami niech będzie imię i nazwisko naszych znajomych. Jak je zdobyć ?. Jest to bardzo proste zadanie.
Należy jednak pamiętać iż wcześniej musimy pobrać biblioteke dla PHP z strony facebook dla developerów. Link do strony jest umieszczony w jednym z początkowych postów.
Następnie dołączamy jak każdą inna bibliotekę w PHP za pomocą komendy require_once 'facebook.php';
musimy pamiętać iż aby facebook nas rozpoznał i wiedział ze nasza aplikacja jest naszą aplikacją to nalezy podać 2 istotne parametry:
$appapikey = 'twój apikey'; // z wiadomych przyczyn nie podaje tu prawdziwych kodów tylko podaje miejsce gdzie nalezy je wpisać. Kody znajdziecie w panelu developera.
$appsecret = 'twój secret';
$facebook = new Facebook($appapikey, $appsecret);
skoro pojawia się słówko new to wiemy ze tworzymy nowy obiekt na którym będziemy pracować a ponieważ parametry tego obiektu to klucze, wiec tak właśnie facebook wie ze nasza aplikacja jest naszą aplikacja :).
Kolejna linijka to linia mówiąza o tym iż aby zobaczyć efekt działania pracy skryptu w facebooku wymagany jest login.
$user_id = $facebook->require_login();
A teraz trochę magii czyli api; Chce aby z $user_id pokazało mi się na ekranie nazwa użytkownika który uruchamia program. Nic prostszego, poniższa linia to załatwi :)
<fb:name uid='<?php echo $user_id; ?>' useyou='false' possessive='true' />
tagi <fb> to włansie taki facebooka . Powyższa linia mówi alby wyświetlić nazwę użytkownika jako parametr uid podajemy identyfikator użytkownika zapisany w zmiennej user_id dodatkowo np dzięki parametrowi possessive do naszej nazwy dodamy charakterystyczny w angielskiej pisowni symbol ('s)
na końcu. Prawda że łatwe :).
Ale wróćmy do celu. Chcemy wyświetlić imiona i nazwiska naszych znajomych nie siebie samego.
Wiec powiedzmy facebookowi że chcemy listę naszych znajomych.
$friends = $facebook->api_client->friends_get();
$friends = array_slice($friends, 0, 25);
Proszę bardzo i już ją mamy. Teraz zostało tylko przepuszczenie $friends przez pętle i już. Proponuje np tak:
foreach ($friends as $friend) {
echo "<br>";
$userinfo = $facebook->api_client->users_getInfo($friend, 'first_name');
echo $userinfo[0]['first_name'];
echo $userinfo[0]['last_name'];
}
echo "</p>";
To tyle. Powstanie piękna lista znajomych. Dostęp do poszczególnych elementów jak zdjęcia naszych znajomych czy cokolwiek innego nie jest trudniejszy ponieważ w facebooku wszystko nawet zdjecia są traktowane jak obiekty i każdy z nich ma swoją unikatową nazwę.
Jest to proste pokazanie co można zrobić. I że nie jest to wcale takie trudne. Do mojej aplikacji oczywiście potrzeba znacznie bardziej skomplikowanych struktur ale ten prosty przykład pokazuje ze api facebooka jest przystępne i logiczne a obiekty są nazywane z sensem. W trakcie budowy mojej aplikacji od czasu do czasu będę pokazywać na blogu jak niektóre rzeczy zostały napisane przeze-mnie. Kod całej aplikacji i tak będzie dostępny ale najbardziej interesujące fragmenty doczekają się szerszego opisu.
niedziela, 5 września 2010
Praca z frameworkiem cz 1
Postanowiłem wykorzystywać w pracy nad projektem framework. Zdecydowałem się na symfony. Dlaczego akurat framework? Aby odpowiedzieć sobie na to pytanie wystarczy przyjrzeć się założeniom projektu. Po pierwsze projekt jest realizowany w ramach mojej pracy dyplomowej. Nie wchodzą wiec w gre błędy takie jak niepoprawne sprawdzanie zawartości formularzy, niepoprawne odwołania do bazy danych. Ponadto jak wcześniej wspomniałem projekt jest realizowany na zasadach MVC (model - widok - kontoroler) . Wszystko to można by pisać od zera ale po co ? . Każdy z tych elementów jest zaimplementowany w framework. O możliwościach samego frameworka będę pisał jeszcze kilka postów. Sam dopiero uczę się jego obsługi. Jednak mogę już przedstawić kilka zalet płynących z stosowania właśnie tego frameworka.
Pierwszą jest fakt iż kod który piszemy jest logicznie poukładany wiec jeśli wchodzi do gry refaktoring lub testy programu to symfony nadaje sie do tego idealnie. Kolejną pozytywną rzeczą jest przekształcanie bazy danych do postaci obiektów. Co prawda jest już bardzo dobre rozwiązanie tego problemu jakim jest propel ale po co korzystać z osobnego działa jak można dokonać tego samego w frameworku. W trakcie pracy nad projektem będę z pewnością rozwijał swoją wiedzę dotyczącą możliwości jakie oferuje symfony. Każdy większy blok informacji będę opisywać w kolejnych działach.
Dla tych którzy nie chcą czekać na moje odkrycia polecam oczywiście świetny kurs który zainspirował mnie do korzystania z symfony jest on dostępny pod adresem http://www.symfony-project.org/jobeet/1_4/Doctrine/en/
Pierwszą jest fakt iż kod który piszemy jest logicznie poukładany wiec jeśli wchodzi do gry refaktoring lub testy programu to symfony nadaje sie do tego idealnie. Kolejną pozytywną rzeczą jest przekształcanie bazy danych do postaci obiektów. Co prawda jest już bardzo dobre rozwiązanie tego problemu jakim jest propel ale po co korzystać z osobnego działa jak można dokonać tego samego w frameworku. W trakcie pracy nad projektem będę z pewnością rozwijał swoją wiedzę dotyczącą możliwości jakie oferuje symfony. Każdy większy blok informacji będę opisywać w kolejnych działach.
Dla tych którzy nie chcą czekać na moje odkrycia polecam oczywiście świetny kurs który zainspirował mnie do korzystania z symfony jest on dostępny pod adresem http://www.symfony-project.org/jobeet/1_4/Doctrine/en/
poniedziałek, 30 sierpnia 2010
Co można w Facebooku
Witam, szukając interesujących mnie informacji doszedłem do wniosku że bardzo mało jest konkretnych pomocy i informacji na temat projektowania app na facebooka. Widziałem na forach w większości angielsko języcznych bo o polskich to można zapomnieć iż jest wiele pytań dotyczących platformy facebook. Odpowiem na kluczowe z nich z tego co udało mi się już nauczyć głównie dzięki uprzejmości internautów którzy w temacie są zorientowani bardziej niż ja :), a więc:
1) Czy można osadzić mapy Google w aplikacji? - tak
2) Jak pisać na Facebooka? - Tak jak zwykłą stronę, poza elementami w których się integruje aplikację z Facebookiem (np. pobieranie znajomych albo publikacja czegoś na wallu)
3) Czy można korzystać z Frameworków? Tak
4) Czy można pisać w strukturze MVC ? Tak
5) Czy można korzystać z CSS? Tak , normalnie jak na stronie
Mam nadzieje że wszystkim szukającym informacji przydadzą się te kluczowe wiadomości.
1) Czy można osadzić mapy Google w aplikacji? - tak
2) Jak pisać na Facebooka? - Tak jak zwykłą stronę, poza elementami w których się integruje aplikację z Facebookiem (np. pobieranie znajomych albo publikacja czegoś na wallu)
3) Czy można korzystać z Frameworków? Tak
4) Czy można pisać w strukturze MVC ? Tak
5) Czy można korzystać z CSS? Tak , normalnie jak na stronie
Mam nadzieje że wszystkim szukającym informacji przydadzą się te kluczowe wiadomości.
wtorek, 24 sierpnia 2010
Facebook a serwer (dlaczego dokumentacja upiera sie ze serwer to klient ) :)
Napisanie aplikacji Facebooka jest momentami proste a momentami bardzo trudne
W Facebooku musimy wybrać Canvas URL, jest to adres w stylu: http://apps.facebook.com/moja-aplikacja/
Co ciekawe adresy http://apps.facebook.com/moja-aplikacja/COŚTAMDALEJ są automatycznie mapowane na http://moj-server.com/aplikacja-facebooka/COŚTAMDALEJ .
Facebook natomiast nie wyświetla dokładnie tego, co zaserwuje moj-server.com tylko jeszcze trochę obrabia wynik zapytania.
Schemat jest taki:
Kliknięcie tego napisu spowoduje dodanie aplikacji do zakładek i dodanie jej ikony obok istniejących. UWAGA: jakaś aplikacja może zniknąć z zakładek, gdyż na Facebooku można mieć tylko 5 ulubionych aplikacji. Aplikacja powinna być jednak dalej wyświetlana w menu Applications.
Jeśli ustawiłeś w ustawieniach aplikacji, że aplikacja zapewnia taba, to użytkownicy aplikacji bo zabookmarkowaniu aplikacji, będą mogli wejść w jej ustawienia (Applications > Edit > Bookmarks > Twoja aplikacja) i dodać sobie taba do swojej profilowej strony.
UWAGA: aby zadziałało dodanie taba, użytkownik musi autoryzować Twoją aplikację. Można to zrobić tak:
Po kliknięciu na link, użytkownik zostanie zapytany o to, czy autoryzować aplikację. Po zautoryzowaniu aplikacji, dodanie taba będzie miało swój przewidywany skutek (w przeciwnym wypadku tab jest niby dodany ale nigdzie się nie wyświetla).
Podstawą do napisania aplikacji, jest zrozumienie architektury tego rozwiązania. Na stronach Facebooka Twój serwer jest nazywany klientem i nie powinno Cię to mylić. Pomimo, że to serwer Facebooka odpytuje Twój serwer — czyli ma ewidentną rolę klienta, dokumentacja upiera się, że jest to serwer. Należy o tym pamiętać.
- Aby napisać aplikację Facebooka, trzeba mieć konto na Facebooku
- Trzeba się zapisać jako developer pod adresem: http://www.facebook.com/developers/
- Tam można stworzyć swoją pierwszą aplikację
W Facebooku musimy wybrać Canvas URL, jest to adres w stylu: http://apps.facebook.com/moja-aplikacja/
Co ciekawe adresy http://apps.facebook.com/moja-aplikacja/COŚTAMDALEJ są automatycznie mapowane na http://moj-server.com/aplikacja-facebooka/COŚTAMDALEJ .
Facebook natomiast nie wyświetla dokładnie tego, co zaserwuje moj-server.com tylko jeszcze trochę obrabia wynik zapytania.
Schemat jest taki:
- Użytkownik wchodzi na http://apps.facebook.com/moja-aplikacja/coś
- Serwer Facebooka odpytuje http://moj-server.com/aplikacja-facebooka/coś przekazując zmienne HTTP POST zawierające dane autoryzujące użytkownika, listę jego znajomych i inne rzeczy
- Twój serwer może zweryfikować dane autoryzujące użytkownika łącząc się przez Facebook API z serwerem Facebooka. W kazdym połączeniu musi używać specjalnego klucza API (do pobrania ze strony Twoich aplikacji Facebooka).
- Twój serwer może odpytywać serwer Facebooka o potrzebne szczegóły lub korzystać z własnych zasobów, aby serwować treść
- Treść serwowana jest w specjalnym dialekcie HTML-a: FBML.
- Serwer Facebooka odbiera wygenerowany przez Twój serwer FBML, zamienia go na HTML (np. wstawiając imię osoby o facebookowym id 19394 zamiast <fb:name id="19394"/>) i wstawia go do swojego szablonu, np. do taba w profilu użytkownika, bądź tzn. canvasu — gdy aplikacja jest wołana z http://apps.facebook.com/moja-aplikacja
- Serwer Facebooka przesyła wygenerowany HTML (i Javascript) do przeglądarki.
Kliknięcie tego napisu spowoduje dodanie aplikacji do zakładek i dodanie jej ikony obok istniejących. UWAGA: jakaś aplikacja może zniknąć z zakładek, gdyż na Facebooku można mieć tylko 5 ulubionych aplikacji. Aplikacja powinna być jednak dalej wyświetlana w menu Applications.
Jeśli ustawiłeś w ustawieniach aplikacji, że aplikacja zapewnia taba, to użytkownicy aplikacji bo zabookmarkowaniu aplikacji, będą mogli wejść w jej ustawienia (Applications > Edit > Bookmarks > Twoja aplikacja) i dodać sobie taba do swojej profilowej strony.
UWAGA: aby zadziałało dodanie taba, użytkownik musi autoryzować Twoją aplikację. Można to zrobić tak:
- Ustalić TOS URL w ustawieniach aplikacji
- w generowanym przez http://apps.facebook.com/moja-aplikacja/ FBML-u możesz zwrócić link
<a href="coś" requiredLogin="true">musisz mnie autoryzować</a>Podstawą do napisania aplikacji, jest zrozumienie architektury tego rozwiązania. Na stronach Facebooka Twój serwer jest nazywany klientem i nie powinno Cię to mylić. Pomimo, że to serwer Facebooka odpytuje Twój serwer — czyli ma ewidentną rolę klienta, dokumentacja upiera się, że jest to serwer. Należy o tym pamiętać.
poniedziałek, 23 sierpnia 2010
Facebook Czy warto ?
Zastanawiam się nad zbudowaniem aplikacji w oparciu o portal społecznościowy. Pewnie zastanawiacie się po co ? . Można przecież szybko załatwić sobie serwer bądź domenę, postawić tam ładnie wyglądający serwis. Wykorzystać swoje umiejętności w PHP i MySQL i zrobić dokładnie to samo co chce osiągnąć czyli aplikacje zarządzającą trasami rowerowymi z mozliwościami komentarzy. Pytanie wiec po co ten facebook?. A odpowiedz jest prosta. Przecież pisze tą aplikacje dla kogoś nie dla siebie. Patrząc na to, iż to ja jestem programistą to ja pisze aplikacje dla kogoś, możliwe że chce na niej zarobić bądź po prostu pokazać na co mnie stać. Tak czy inaczej aplikacja jest pisana dla kogoś!! . Poco więc budować bazę danych użytkowników skoro już mam gotową właśnie na facebooku. Mogę skorzystać z społeczności oraz zobaczyć czy aplikacja jest warta swojej ceny. Jeśli się nie przyjmie wśród tak wielkiej liczby "facebookówców" to zmusza mnie do refleksji czy napeweno jest dobra ? Facebook daje olbrzymie możliwości z punktu widzenia developerów. Ciekawskich, lub zainteresowanych tematem odsyłam pod adresy:
Tutorial: http://developers.facebook.com/
Facebook Tools: http://developers.facebook.com/tools.php
Facebook Wiki: http://wiki.developers.facebook.com/index.php/Main_Page
Dokumentacja prowadzona jest w języku angielskim, lecz jest dokładna i wyczerpująca temat. Osoby które tematem się zainteresowały ale mają problem z językiem niech spróbują poćwiczyć na polskim odpowiedniku facebooka oczywiście w mniejszej skali społeczności, jakim jest "grono.pl" . Dysponuje polskim objaśnienia i dokumentacja api.
Tutorial: http://developers.facebook.com/
Facebook Tools: http://developers.facebook.com/tools.php
Facebook Wiki: http://wiki.developers.facebook.com/index.php/Main_Page
Dokumentacja prowadzona jest w języku angielskim, lecz jest dokładna i wyczerpująca temat. Osoby które tematem się zainteresowały ale mają problem z językiem niech spróbują poćwiczyć na polskim odpowiedniku facebooka oczywiście w mniejszej skali społeczności, jakim jest "grono.pl" . Dysponuje polskim objaśnienia i dokumentacja api.
niedziela, 15 sierpnia 2010
Co chce stworzyć
Projekt jest częścią pracy dyplomowej którą będę zajmować się w okresie od września do lutego 20011r. Projekt będzie pisany z wykorzystaniem języka PHP oraz będzie zintegrowany z witryną facebook.pl. Projekt będzie rozwijany stopniowo. Założenia serwisu to przede wszystkim:
- możliwość dodawania i usuwania tras rowerowych poszczególnych urzytkowników
- możliwości oceniania tras
- portal ma zbierać społeczność cyklistów i pomagać im w wymoże trasy najładniejszej i możliwej do pokonania dla poszczególnych grup cyklistów
Zamieszczam tu jak narzazie tylko zarys całego projektu. Systematycznie jednak będę uzupełniał blog o detale dotyczące całego projektu.
- możliwość dodawania i usuwania tras rowerowych poszczególnych urzytkowników
- możliwości oceniania tras
- portal ma zbierać społeczność cyklistów i pomagać im w wymoże trasy najładniejszej i możliwej do pokonania dla poszczególnych grup cyklistów
Zamieszczam tu jak narzazie tylko zarys całego projektu. Systematycznie jednak będę uzupełniał blog o detale dotyczące całego projektu.
Subskrybuj:
Posty (Atom)