Archive for the 'Programming' Category

Zend_Form 的一些紀錄

如果是自己搞網站 (程式美術都自己來),用 設定完後,透過 render() 將 HTML code 呈現的確不錯,畢竟強迫你要用 CSS 去處理頁面呈現。不過,如果是請別人先做好美術版面,產生 HTML 後才要轉成 Zend_Form 生出來的話,就會用到很多 manual 裡不會教的「壞方法」XD

目前用到的方法是在 view 裡面 (我用 ) 直接顯示 Element,像是這樣:

<?= $this->post_form->post_title ?>

但只用上面的方法會產生一堆 dt + dd 之類的東西,這是因為 Element 預設的 Decorator 太多,所以需要重設只用 ViewHelper:

$element->setDecorators(array('ViewHelper'));

其他的在原來的 tutorial 都有寫。

另外有點很重要,因為 Zend_Form 在 1.5 版才納入,所以文件並不一定能夠涵蓋所有的方法,看 source code 瞭解用法的能力很重要…

PIXNET 徵正職 PHP 工程師

幫我們公司徵人 :p

要徵熟悉 ,以及 的正職 coder 兩名,工作地點在台北市民生東路二段這邊,有興趣的人請將履歷寄到 104@pixnet.tw,標題請寫上「應徵 PIXNET 程式設計師」。

這份工作主要的內容是寫 PHP,如果熟悉 (目前我們用這個開發) 或其他 Framework 更好。

有問題除了可以在 comment 問以外,也可以直接寫信到 gslin at pixnet.tw 問我。

很多地雷的 Zend_Form…

本來要寫「一些 地雷」,結果整理起來還不少,還是改成「很多地雷」比較合理。

第一個地雷是 select 元素:

$el = $this->createElement('select', 'siteshow');
$el->setLabel('是否顯示下一頁');
$el->addMultiOption('1', '顯示');
$el->addMultiOption('0', '不顯示');
$this->addElement($el);

對這個元素設定值時,要記得用 intval() 轉成數字,像這樣:

$f->siteshow->setValue(intval($dbval['siteshow']));

第二個地雷是 setRequired() 的處理,假設你這樣寫:

$el = $this->createElement('text', 'article_title');
$el->setLabel('文章標題');
$el->setRequired(TRUE);
$this->addElement($el);

因為 setRequired 是使用 判斷,所以標題取 “0″ 時就會過不去。目前的解法是用 指定最小與最大長度:

$el->addValidator('stringLength', FALSE, array(1, 255));
$el->addValidator('stringLength', FALSE, array(1)); # 沒有最大長度限制

第三個… 忘記了,想到再寫 Q_Q

PHP 的 array_merge

在「」這篇的 comments 看到 裡兩個 array 相加的處理,實際寫了一些小程式玩過後發現一些以前不知道的東西 :p

associated array 用 $a + $b 時,如果有重複的 key 會優先取前者 ($a),要優先取 $b 就用 $b + $a

Google App Engine

幾天前就一直有消息, 打算要把 的服務拿出來給大家用。結果拿出來的餅比預期的更大,直接幫你 Hosting 整個服務:

Google App Engine 目前以 為語言 (更仔細的說,是以 為參考的標準,所以有用過 Django 的人會蠻熟悉的),後端則是以 與 BigTable 支撐整個系統。Hosting 的服務以 appspot.com 這個獨立域名避免 Cookie 與 XSS 安全性的問題,看起來是呼應 blogspot.com。

昨天一睡醒看到有一萬個人的註冊限制,就先丟進去註冊,出門到公司就發現已經申請到了。

另外,這個系統有一些限制:500MB storage、200M CPU cycle/day、10GB bandwidth/day,這個量對於自己玩看起來是沒什麼問題,等到收費後要看看價錢到底如何。

在開始玩之前,看看 可以知道 BigTable 可以做到的事情,其實還蠻有趣的,像是不支援「!=」… XD

Update:在「」這篇裡面有後台的畫面,可以看到相當多資訊!

參考:

Zend_Json + Zend_Config + Zend_Db

如果使用 放設定檔,這「可能」是一個比較好的解法:

public function __construct()
{
    $j = file_get_contents(dirname(__FILE__) . '/db.json');
    $conf = Zend_Json::decode($j);
    $conf = new Zend_Config($conf['Db']);
    $this->rDb = Zend_Db::factory($conf->rDb);
    $this->wDb = Zend_Db::factory($conf->wDb);
}

參考:

Zend_Db 的參數 (與 Zend_Config、Zend_Json)

::factory() 可以吃兩種語法,第一種是用兩個參數指定所有的資訊,像這樣:

$params = array('host' => 'localhost', 'username' => 'my_username', 'password' => 'my_password', 'dbname' => 'my_database');

$db = Zend_Db::factory('pdo_mysql', $params);

第二種是吃一個參數, (或者繼承他的 class):

$conf = Zend_Config_Ini('filename.ini');
$db = Zend_Db::factory($conf);

如果想把資料庫設定放在檔案裡,再用 Zend_Config 讀進來傳給 Zend_Db,目前官方有 兩種方法,不過這兩種方法我都不喜歡,用 找 “Zend_Config_Yaml”,沒有什麼人在研究這個 (在是有看到一份,不過沒看到其他人用的心得)。

於是退而求其次,用 讀進來後用第一種方式傳進去。

PIXNET Album Expander

除了幫寫以外,也幫自己公司 () 寫 Album Expander,這樣我自己看圖片才方便 XD

這隻程式請配合 服用:

另外在 trace DOM 的時候有一些感想,照片的部份全部都是 ul + li,再用 CSS 做出來的,當初設計這個 Template 的人不賴啊 XD

Update:修正了兩個問題,第一個是 今天一直噴 502 而讀不到 ,所以只好用 code.jquery.com。第二個是修正相本 .thumgBox 與 .thumbImg span 裡設定 width/height 時會產生的 bug。

Zend Framework 的 Zend_Db

這個週末都在研究 的用法,然後套用到新的系統上。

的三個架構裡,Controller 透過 .htaccess 配合,效果還算可以。View 目前是用 ,不過會看情況改用 或是 ,基本上都沒什麼問題。

最大的問題在於 Model: 的功能看起來很多 (在說明文件的份量裡,算是相當厚的一個模組),但實際上有不少缺陷沒辦法光靠 Zend_Db 目前內附的模組解決,需要自己寫 Adapter 處理。在沒時間研究 Zend_Db 的 Adapter 怎麼寫的情況下,只能先把他當作非常小的 使用。

Zend_Db 主要的兩個問題是:Master-Slave 時讀寫必須分開,以及多台時 Failover 及 Load sharing 的處理。雖然這兩個問題都可以用 解決,但我不是很喜歡 MySQL Proxy 的解法,所以…

Anyway,目前該解決的都解決掉了,如果有遇到其他的模組不好用,我再寫文章抱怨好了… XD

一些雜記

如果 bug 愈找愈久,代表那個 bug 一定很笨 XD

像是今天一整天跟 ronnywang 在找一個 Zend_Db 會爛掉的 bug,最後發現是因為 PDO_MYSQL 沒裝… XD

愈來愈多關節打通了,接下來就來衝吧…