On twitter

RT @beichen: 温家宝回应“谷歌”事件说,让外企享受到公民待遇。看来谷歌是铁定是要滚蛋了。

follow me on twitter

Archive for the ‘CodeIgniter’ Category

ORM library for CodeIgniter 7

DataMapper
http://stensi.com/datamapper/

IgnitedRecord
http://www.assembla.com/wiki/show/bnqonahgCr3zI3ab7jnrAJ

這兩個 ORM library 可以試試看, 不過目前我好像偏好直接寫 SQL, 長長一串好像看起來比較爽 …

不過我是覺得, CodeIgniter namespace 的問題… 會在使用這些 ORM 的時候造成一些困擾 囧rz

像是 CodeIgniter 的 Controller, Library 跟 Model 的 class name 本來就不能一樣了, 但至少 Model 的名稱叫做 foo_model 之類的, 還可以避開, 但是 ORM 多個 postfix …不是很奇怪?

倒是希望 CodeIgniter 可以解決 name space 這個問題先 ~”~

November 3rd, 2008 CodeIgniter Tags: , , , ,

CodeIgniter Database 跟 Model 怎麼用? 4

其實最早在剛接觸 CodeIgniter 的時候記得是版本 1.5.2, 那時候 Model 都這麼寫, 例如下面的 User_Model。

class User_model extends Model {
    function __construct() {
        parent::__construct();
    }

    function get_by_name($name) {
        $this->db->where('name', $name);
        $query = $this->db->get('users');
        if ($query->num_rows()) {
            return $query->row();
        }

        return false;
    }

    function get_all() {
        $query = $this->db->get('users');
        if ($query->num_rows()) {
            return $query->result();
        }

        return array();
    }
}

Read the rest of this entry »

September 18th, 2008 CodeIgniter Tags: , ,

CodeIgniter Layout 的做法 4

由於在開發網站過程中, 通常都有個 template 或稱作 layout, layout 包含了整個網站的外觀, 而網站的 layout 通常會切分為 header, content, footer 甚至還有 menu。 而這當中的 content view 則是會隨著不同頁面、功能而變動, 而 layout 則為固定, 這樣可以維持同一個網站界面的一致性, 然而 CodeIgniter 並沒有對這種所謂 partial view 有較好的處理方式。

所以通常都會是像下面這樣的寫法。 載入 foo 這個 content view 到變數之後, 丟到 template view, 最後在 render 出來。

$data['foo'] = $foo;
$view['heading'] = 'heading text';
$view['content'] = $this->load->view('foo', $data, true);
$this->load->view('template', $view);

所以每個頁面就都得寫上兩行 load view 的動作, 寫久了便覺得繁瑣, 其實這個動作透過下面這個 Layout library 是可以簡化的。 這個 library 是在 CodeIgniter wiki 上看來的, 只修改了幾個變數。

<?php
class Layout
{
    var $obj;
    var $layout;

    function Layout($layout = "template")
    {
        $this->obj =& get_instance();
        $this->layout = $layout;
    }

    function setLayout($layout)
    {
      $this->layout = $layout;
    }

    function view($view, $data=null, $return = false)
    {
        $data['content'] = $this->obj->load->view($view, $data, true);

        if($return)
        {
            $output = $this->obj->load->view($this->layout, $data, true);
            return $output;
        }
        else
        {
            $this->obj->load->view($this->layout, $data, false);
        }
    }
}
?>

有了這個 Layout library 之後變可以將載入 view 的程式簡化如下:

$data['foo'] = $foo;
$data['heading'] = 'heading text';
$this->layout->view('foo', $data);

基本上以這個 library 為範例的話, 預設的 template 檔案就要命名為 template.php, 你也可以修改這個 library 的程式碼來符合你現在 template 的檔案名稱, 不過我是覺得就叫 template 還滿直覺的。
而 template.php 裡面則是需要放入 $content 這個變數來存放 foo.php 這個 view。 簡單的 template.php 的範例如下:

<html>
<body>
<?=$content?>
</body>
</html>

當然這個 template 可以像文章一開始講到的, 另外做更細的切分, 我們可以另外開一個 template 的目錄, 裡面存放 header.php, footer.php, 然後在 template.php 裡面載入, template.php 如下:

$this->load->view('template/header');
<?=$content?>
$this->load->view('template/footer');

hmm… 這篇應該要有寫過 view in view 的人才看得懂吧? 超懶畫圖 XD

August 30th, 2008 CodeIgniter Tags: ,

設定 CodeIgniter 透過 Gmail 發信 5

由於自己租的 slicehost 只有 256MB 的記憶體, 架 mail server 又很麻煩 (因為我也不懂 XD), 又似乎 mail 有啥反解的問題, 而直接透過 sendmail 這樣寄信會被當成垃圾信, 所以就申請了 Google app, 然後用申請到的帳號透過 SMTP 來發送信件。 由於 Gmail 的 SMTP 又跟一般的設定稍微不一樣(有 SSL), 所以記錄一下。

CodeIgniter 上面其實就只是設定個 config 檔就可以了, 設定檔如下:

application/config/email.php


$config['protocol'] = 'smtp';
$config['smtp_host'] = 'ssl://smtp.gmail.com';
$config['smtp_user'] = 'your_email';
$config['smtp_pass'] = 'your_password';
$config['smtp_port'] = '465';
$config['smtp_timeout'] = '5';
$config['newline'] = "\r\n";
$config['crlf'] = "\r\n";

Read the rest of this entry »

July 17th, 2008 CodeIgniter Tags: , , ,

CodeIgniter 1.6.3 released 5

這次主要是加強安全性的更新, 除了加強了 xss_clean 函式, 另外也可以用 xss_clean 來測試上傳的圖片是否安全。 詳細的資訊可以看看 change log

在 library 方面:
pagination library 加上了可以用 query string 來作分頁的功能, 但還是覺得用 uri_segment 來做比較漂亮, 不過用 query string 也許有他方便的地方。

input library 則是加入了 get_post() 可以用來取得 $_GET 跟 $_POST 的資料, 而我已經用了好一陣子的 get() 也終於加上了文件說明, 畢竟 CodeIgniter 設計是不用 get 來傳資料的。

在 helper 方面:
增加了 Number helper

Form helper 中的 from_input 函式, 自動加入 size 跟 maxlength 這兩個 attributes 的功能, 在這個版本也已經拿掉了。 size 拿掉是不錯, 省了每次都要去設定 size 的動作, 因為預設的size是 30 稍微長 了點, 不過我倒是覺得 maxlength 應該留著阿 ~”~

June 27th, 2008 CodeIgniter Tags: , ,
Partners of Oceanic / 人生海海

jiwo sca wellmeet