CodeIgniter 轉移版本控制到 Github 順便 Release 2.0.3

CodeIgniter
在我上禮拜 8/20,8/21 參加

COSCUP 2011 會議的時候,CodeIgniter 偷偷 Release 了 2.0.3 版本,也不算偷偷 Release,因為剛好8月20,21號也是 CICON 2011 會議,CodeIgniter 想給來聽演講的學員們一個驚喜吧,也因為這個 CodeIgniter Con 2011 會議,官方也宣佈將轉換版本控制,原本放在 bitbucket 的程式碼也都轉換到 Github 上面了,另外順便把 CodeIgniter Reactor 取消後面 Reactor 字串,改成 CodeIgniter 了,那 Reactor 呢,就變成 Develop 分支,這個消息真的是太棒了,轉換到大家所熟悉的 Git 版本控制,有些常常在貢獻程式碼的開發者,都是在使用 Github。不管是不是 CodeIgniter,其他許多 opensource 包含 jQuery, phpBB…等都是在使用 github。 [

直接下載 2.0.3 玩看看吧]1 參考:

繁體中文 CodeIgniter 官方公告

JavaScript Reference Select and Option objects 用法介紹

在網頁裡面用 Select 是很常遇到的,之前也寫了一篇如何利用 jQuery 動態增加 option 或取值jQuery 部份就不介紹了,那是需要搭配 jQuery Plugin: Select box manipulation,今天要介紹的是如何用 javascript 動態取值或者是增加 option 選項。因為我發現有使用者直接利用 innerHtml 的方式來把資料塞入到 Select 裡面,雖然 FireFoxChrome 都可以正常運作,但是遇到 IE 還是沒辦法動。

如何取得 select element 底下很多方法可以取得 select element: 1. 透過 form name + element name

document.myform.selectname
2. 透過 form name + element 陣列(注意看 select 是位在 form element index 值多少)
document.myform.elements
3. 透過獨一無二的 ID
document.getElementById("selectid")
[Read More]

推薦一本書籍 Master Mobile Web Apps with jQuery Mobile

master-mobile-web-apps-with-jqm 在這裡跟大家推薦一本國外的書籍,也就是 Elated.com 網站作者 Matt Doyle 推出的一本新書 Master Mobile Web Apps with jQuery Mobile,此作者也有推出 PHPPhotoshop 的書籍,本人相當佩服有美工天份又會寫程式人才。然而現在當紅的 Mobile Device,大家相繼為了 iOS, Android 或其他手持式裝置撰寫 Web 介面,目前網路上大家推的其中一套就是 jQuery Mobile,而我呢,正在摸索另一套強大的 Web App Framework: Sencha Touch,功能來比的話,個人覺得 Sencha Touch 優勢比較多,之後有機會再來寫一系列的 Sencha Touch 文章。此書有提供目錄可以參考,該作者會教大家如何搭配 PHP 跟 MySQL 結合 jQuery Mobile API 來撰寫程式,書籍應該是蠻完整的,目前售價美金19元,如果有興趣的人可以上網下單。

無痛安裝 NodeJS 和 Node Framework Express

nodejs-light

NodeJS 是目前當紅的 Web 2.0 技術,去年 COSCUP 2010 就有 KKBOX 資深工程師 ericpi 來探討這個議題,NodeJS 背後使用了 V8 引擎為基礎,沒看過用純 JS 來當 Server-Side 吧,台灣很紅的 Plurk 也是大量使用 NodeJS,然而每開發一種語言,就會想開始找搭配的 Framework,那就首推 Node Framework Express 來撰寫程式,本篇是要介紹如何在 Ubuntu 10.10 無痛安裝 nodejs + express。

下載 Nodejs 原始碼 直接到

官網下載 Stable 的版本吧,目前是 node-v0.4.10.tar.gz,也可以先看看 API Document

# wget http://nodejs.org/dist/node-v0.4.10.tar.gz
[Read More]

PHP function 參數 default value

2011.08.06 Update: 感謝 jaceju 指正筆誤 自己定義 PHP Function 的時候,假設該函式有1個參數,您可以傳入該參數或者是不傳,但是函式裡面如何判斷是否有傳入該參數呢?先看看底下例子: function test($arg_1 = NULL) { // 判斷 $arg_1 參數是否傳入 $arg_1 = $arg_1 || 'test'; echo $arg_1; } 你會發現上面結果會是 1,而不是 test,大家會懷疑為什麼這樣寫不行呢,那是因為 || 是 boolean operators,他只會 return true 或是 false,而不是回傳 string,如果想這這樣寫,大概可以用 javascript 或 perl 語言來寫,javascript 可以參考之前的文章 [Javascript] 在函數裡設定參數預設值,然而 PHP 的正確寫法要用 ?: 來取代 function test($arg_1 = NULL) { // 判斷 $arg_1 參數是否傳入 $arg_1 = (isset($arg_1)) ? $arg_1 : 'test'; // 或者是 $arg_1 = $arg_1 ? [Read More]

深入探討 CodeIgniter Input Class 核心程式流程

codeigniter_2
為什麼會寫到這篇呢?當然是有網友希望可以幫他解決困難,由於問題的解答需要比較長的文章解釋,就寫出這一篇啦。在我 2009 年開始推廣到現在,相信在台灣已經有不少人開始使用

CodeIgniter,自己覺得非常感動 XD,也非常欣慰,希望把好東西推廣給大家知道。廢話不多說,先來說說問題點,先前發表的一篇 [CodeIgniter] 利用 jQuery 簡易驗證使用者帳號/Email 最後有人留言針對 input->post() 在中文官網上面的 Input Class 教學有些疑慮,底下我先來說明網友的問題點。

input->post 如果為空,則塞進去資料庫竟然是 0 該網友引用了 Input Class 中文文件的內容

使用 POST, COOKIE, 或 SERVER 資料CodeIgniter 提供三個讓你取出 POST, COOKIE 或 SERVER 中項目的補助函數。使用這些函數的主要便利性在於, 它們會確認並檢視是否這些項目已被設定並且在未設定時回傳 false (boolean) , 而不是直接取出 ($_POST[‘something’]),官方範例↓這讓你可以方便地使用資料而不必預先測試它們是否存在。不然, 通常你可能會像這樣做:if ( ! isset($_POST[‘something’])) { $something = FALSE; } else { $something = $_POST[‘something’]; } 網友敘述:

但是為什麼還是為設定為0呢??這應該是檢查資料有沒有被設定而已,那我如果沒有輸入,又怎麼會出現 0 呢?? 網友希望 $username = $this->input-post(“username”); 能幫他判斷如果 username 沒有資料,就直接回傳 NULL,Insert 到資料庫時,應該是 NULL 而不是 0。

程式範例 網友其實沒有錯,根據文件上顯示,如果 $something =

$this->input->post(“something”); 取值過後,如果系統沒有 $_POST[‘something’],則會回傳 FALSE,我猜網友在跟 model 作搭配的時候使用了底下的寫法來塞值進入資料庫:

$data = array(
    "username" => $this->input->post('username'),
    "passwd" => $this->input->post('passwd'), 
    "email" => $this->input->post('email'),
);
$this->load->model('members'); 
$this->members->register($data);  
假設如果沒有 $_POST['email'] 的話,該欄位就會被設定為 0,原因很簡單,就是出在要塞值進入資料庫的時候,程式針對資料的型態判斷啦,底下從最開始取得

$_POST 資料開始說起。

[Read More]

Linux 程式開發編輯器 Geany + Fuse 遠端掛載

自己買的筆電灌上了 Ubuntu 作業系統,Linux 系統好處多多,指令自己也熟悉,想架什麼站都可以,但是最主要還是要找一套程式開發編輯器,網路上看了大部份文章,我決定用 Geany 這套免費的編輯器,在 Windows XP 底下我則是使用 PSPad 搭配內建的 FTP 功能遠端編輯寫程式,但是 Geany 並沒有支援 FTP 功能,可以詳細看到官方網站 Q&A,官方建議搭配 Fuse 或 LUFS,這樣並不只是 Geany 可以使用,其他 Application 也可以任意使用了。 在介紹 Fuse 之前可以先參考過去寫的一篇教學: [SSHFS] 好用的 SSH Filesystem fusefs-sshfs in FreeBSD or Linux,裡面分享了 FreeBSD 跟 Linux 底下的 tarball 安裝方式,當然現階段 Ubuntu 安裝就很容易了,透過 Apt 管理的方式安裝: $ apt-cache search sshfs sshfs - filesystem client based on SSH File Transfer Protocol sshfs-dbg - filesystem client based on SSH File Transfer Protocol (with debbuging symbols) sbackup-plugins-fuse - Simple Backup Suite FUSE plugins $ apt-get install sshfs 安裝完成,透過底下指令把遠端資料夾 mount 過來吧。 $ mkdir /home/appleboy/tmp $ sshfs -p 22 appleboy@XXX. [Read More]

PHP 將長期宣導程式設計師將 ext/mysql 改用 pdo_mysql 和 mysqli

php-logo
今天看到一篇 PHP-Dev 公佈一篇

[PHP-DEV] deprecating ext/mysql,大意就是 PHP 官方未來將打算移除 ext/mysql 的所有相關文件及功能,作者相信很多程式開發者都是用 mysql 套件下去開發,聽到這消息會非常錯愕吧。 官方 documentation team 討論移除的原因在於安全性的考量,在 DK 大神那邊看到是使用 ext/mysql 必須自己處理 mysql_real_escape_string 和 mysql_escape_string,所以官方希望教育使用者不要再使用 ext/mysql 了,底下是官方會做的事情

  • 增加說明指出 ext/mysql 已過時
  • 建議和取代方案
  • 包含取代方案的範例 官方提供了兩個解決方案

pdo_mysqlmysqli,官方列了幾點說明:

  • 從現在開始教育使用者及增加說明文件
  • 在 5.4 版本增加 E_DEPRECATED 訊息,甚至 5.5 6.0 都可以
  • 提供 pdo_mysql 轉換的說明文件
  • 專注於整理 pdo_mysql 跟 mysqli 的線上文件
  • 增加 “The MySQL situation” 的文件說明現況 看完這篇,大家現在趕快轉換到 mysqli 或者是使用 PDO 來開發程式吧
MySQL  PDO  php 

簡易 CodeIgniter Layout Library for Template

在 Web 開發網站,最重要的就是切割版面 CSS 化,制定共同部份 header 跟 footer…等,如果是用在 CodeIgniter Controller 裡面,呼叫 Views 的時候,如底下程式碼: $data = array( "title" => "Welcome to Test" ); $this->load->view("header"); $this->load->view("welcome", $data); $this->load->view("footer"); 大家可以發現只要任何一個 Controller 的函式都必須寫上面的程式碼,這樣是不是重複率太高了呢?在 CodeIgniter Wiki 裡面發現一個不錯用的簡易 layout library,他的作法就是利用 $this->load->view 裡面的第三個參數來達成,可以參考線上文件 - Views 最後一個段落 Returning views as data,我們參考看看底下官網提供的程式碼: obj =& get_instance(); $this->layout = $layout; } function setLayout($layout) { $this->layout = $layout; } function view($view, $data=null, $return=false) { $loadedData = array(); $loadedData['content_for_layout'] = $this->obj->load->view($view,$data,true); if($return) { $output = $this->obj->load->view($this->layout, $loadedData, true); return $output; } else { $this->obj->load->view($this->layout, $loadedData, false); } } } ? [Read More]

用 git 指令產生 Change log 格式

Git 真的是一套非常好用的版本控制工具,在網路上看到一篇 Making a Changelog from Git commit messages 裡面提到一篇新手必看的 git branch model,剛好這篇我也寫了中文解說的部份『Git 版本控制 branch model 分支模組基本介紹』,回歸正題,此篇是介紹如何用 git 指令產生 Change log 檔案,平常 Change log 都會寫成類似底下的 format: - Add Chinese Traditional language file - Changed to use count_all_results. - Added permissions checking to activation in example controller. - Fixed an example in the userguide - changed phrases to more typical ones 在 git log 裡面寫了很多 commit message 該如何 format 成上面的格式呢,其實很簡單,只要打入下面指令 # #--no-merges: 不要秀出 merge message #--pretty=format:' - %s' : 關鍵 format git log --no-merges --pretty=format:' - %s' 另外我們還可以透過 --graph 顯示圖形式的 log 顯示,指令如下: git log --graph --pretty=format:'%s - %Cred%h%Creset %Cgreen(%cr)%Creset %an' --abbrev-commit --date=relative 顯示結果如下 * Add Chinese Traditional language file - 1767c60 (4 months ago) Bo-Yi Wu * Changed to use count_all_results. [Read More]