Showing posts with label CakePHP. Show all posts
Showing posts with label CakePHP. Show all posts

Sunday, March 3, 2013

CakePHP i18n and l10n

最近為了要幫Flirq出中文版. 所以開始在研究CakePHP的i18n跟l10n. 這個link是CakePHP i18n跟l10n的說明. 整體上來講還算簡單. 但是中途還是會遇到一些有的沒的問題. 這邊記錄一下我實驗的過程. 基本上一開始要做的, 就是把ctp檔案裡, 會隨著locale改變的字串照著這個link裡的方式標記. 接著要做的就是到cake console去跑一個shell command把需要localize的字串都找出來. 跑完之後, 會跑出一個po檔. 再來就是自己create一些不同locale的folder. 然後把po檔丟到對的路徑下. 這邊要注意的是, 如果是要處理中文. 目錄名是chi (不能用zho). 另外, 用Poedit修改po檔內容的時候. 有一些CakePHP自己用到的字串不知道為什麼會造成錯誤(Sorry...沒有深入去研究原因). 不過因為用不到. 所以拿掉就OK了. 最後, 就是照著這個link裡的說明. 在程式裡設定locale. 那ctp裡需要localize的字串. 就會動態的換成對的localized的字串. 以上是前兩天實驗的心得. 接下來得真的套到Flirq上. 有別的狀況, 再上來跟大家分享.  

Wednesday, February 27, 2013

Browser Locale Detection

之前在做作的side project, 計劃要有三種語言: 英/西/中. 但是不想要每個語言出一個版本, 所以本來是打算在Android app端抓使用者目前的語言, 然後在發http request的時候一起帶上來. 後來想一想, 這樣還要upgrade目前的已經release的版本. 雖然通知使用者upgrade跟真正進行upgrade這等事Android Market跟Android都處理掉了, 只需要upload新的apk上去就好. 但是我連這件事都有點懶XD. 所以最後用了另一個方法, 就是用PHP的$_SERVER['HTTP_ACCEPT_LANGUAGE']吐出來的結果. 這邊其實有點取巧. 因為這邊收到的資訊理論上是browser prefer的語言, 並不一定是使用者真正在用的語言. 而且這個參數是browser傳上來的. 不過很巧的是, 我目前就是開一個browser連到網頁, 而在我有限的實驗裡, 這個參數剛好也跟Android系統的language參數跑(至少Android Browser是這樣). 所以剛好適合我用. :D 這樣一來, backend改一改之後. 我目前的apps就能夠自動根據使用者手機的語言設定來顯示英文跟西班牙文囉. 希望中文的資料趕快好. 這樣我就可以試著在中文市場promote一下我的side project囉! :)

Tuesday, February 26, 2013

Crontab with CakePHP

這兩天在處理Flirq寄Notification email的feature. CakePHP提供了Shell class, 讓Unix/Linux的Shell可以呼叫. 而實作出來的CakePHP Shell功能, 可以利用 Path/To/cake ShellFunction (ex. /var/www/html/cakephpapp/cake/console/cake mytestshell) 來執行. 不過在加到Crontab的時候, 要注意路徑的問題. 不然會出現沒辦法load class的錯誤. 這邊是一個加入到Crontab的例子(每分鐘執行一次)

* * * * */var/www/html/cakephpapp/cake/console/cake -app /var/www/html/cakephpapp/app/ mytestshell

(Image from flickr's kojotomoto under CC license) 

SwiftMailer, Great CakePHP email component

本來試著要用CakePHP內建的Email component來實作Flirq的email通知功能. 但是不小心發現了SwiftMailer這個更好用的component. (重點是, example提供的很完整XD) 雖然還沒做完相關的功能. 但是有了SwiftMailer跟它的範例. 應該只是時間的問題. 在此特別推一下囉! :) 

(Image from flickr's matthewspiel under CC license)

Sunday, February 24, 2013

CakePHP Auto Refresh Page Content with jQuery

今天晚上試著要讓我們的一個重要功能的頁面能夠自動的更新特定區域的內容. 花掉了我兩三個小時的時間研究. 最後用了一個jQuery的.load配合上javascript的TimeInterval達到了目的. 簡單來講, 就是定時呼叫jQuery.load, 然後load的參數指向資料來源. 不確定是不是一個好方法. 不過目前暫時符合我的需要. 有機會再回來研究可以怎麼改進. 最後的code沒幾行. 但是花了我不少時間. 經驗, 有的時候真的很重要. XD

(Image from flickr's Patrick Goossens under CC license)

Saturday, February 23, 2013

CakePHP Facebook Integration: Permission

這兩天繼續跟CakePHP Facebook的整合奮鬥, 這次主要是要試著讀到FB使用者的一些資料. 還是試著繼續用WebTechNick的CakePHP Facebook plugin來達到目的. 因為一開始沒有仔細看plugin的說明跟範例, 就下去改了. 浪費了不少時間. 不過也趁機看了不少FB Graph API跟相關permissions(這兩個links可能都得要login才看得到)的文件. 希望之後能夠用得上. :) 最後找到自己程式裡的bug. 總算是在今天結束前弄出了本來要試出來的結果. 接下來幾天要繼續搞定之前的login/logout的問題. 還有搞定朋友列表跟讓使用者從朋友列表裡選朋友等功能. 加油!!

CakePHP Facebook Integration 2nd Attempt

昨天傍晚開始, 又試著要整合上次沒搞成功的CakePHP Facebook Connect plugin. 不過這次運氣比較好一點. 先是看到了CakePHP的最基本debug方式, 用debug()去印出變數內容. 加上總算是比較認份一點. 因為用的plugin是open source project, source code就在那邊. 有問題? 自己看了就對了XD. 所以就很快的追了一下code. 發現原來是plugin的某些function吐回來的是要自己印在view裡的字串. 加上了echo. 就可以動了...(所以說, 有的時候還是不要偷懶:Q) 不過接下來照著範例作login/logout的功能, 還是沒有很成功. 所以看起來還有得搞囉. :)

CakePHP Facebook Integration 1st Attempt

因為我們的online dating site, TraRoma.com, 最後決定要用Facebook當作註冊跟登入的方法. 所以今天計畫要試著整合CakePHP跟Facebook Connect. 在網路上找到了WebTechNick的Facebook plugins, 可惜試了一下午沒有成功. 也找不出問題所在. 只好明天再繼續試試. 希望能夠趕快試出些結果來. 因為時間不多囉~ :Q 

CakePHP AWS installation tips

昨天為了我們的Online Dating Website TraRoma.com設定好AWS instance跟LAMP的環境之後, 今天第一件事是試著在AWS上把CakePHP裝起來. 前面幾步問題不大, 就是1)下載cakephp, 2)解開cakephp到webroot裡, 3) 把app/tmp的讀寫權限設定好. 本來以為這樣就可以開始玩了(因為之前在自己laptop的Ubuntu裡這樣就夠了). 但是沒想到出現了奇怪的錯誤.

 

Warning (2): strtotime() [http://php.net/function.strtotime]: It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'UTC' for 'UTC/0.0/no DST' instead [CORE/cake/libs/cache.php, line 597]

Notice: Trying to get property of non-object in /var/www/html/cakephp/cake/libs/cache/file.php on line 248 Fatal error: Call to a member function cd() on a non-object in /var/www/html/cakephp/cake/libs/cache/file.php on line 248

後來查了一下, 原來是app/config/core.php裡的date_default_timezone_set要設定. 有人說這是因為PHP的版本的原因造成的. (我的Ubuntu上是5.3.5, AWS上的是5.3.6). 不過把這個搞定之後, 就可以正常看到index.php的畫面了. 最後就是把URL rewriting搞定. 這部分就是照著index.php裡link到的tutorial網頁把httpd.conf設定好. 然後重開httpd就搞定了! 喔耶! 可以開始在AWS上面來烤蛋糕了!!