2015-12-13 / JSN / 0 Comments / 658 次瀏覽
Codeigniter 本身有支援多國語言的切換。例如
|
$this->lang->load('讀取語言分類的檔案名稱', '語言'); echo $this->lang->line('辨識鍵'); |
這樣是不是有點難懂又麻煩?如果我要顯示『正體中文』底下『選單檔案』中的『Hello』為 『哈囉,你好!』,我們要這麼寫
|
$this->lang->load('menu', 'chinese_zh'); echo $this->lang->line('hello'); |
如果你想要直覺一點的話,想要這麼用
那就使用我擴充的涵式庫 Translg 啦!你就可以直接這麼使用
|
$translg = new Translg(); echo $Translg->chinese_zh->menu->hello; //顯示 哈囉,你好! echo $Translg->english->menu->hello; //顯示 Hello World |
目前可以透過套件管理器 Composer 下載,也可以直接去 Github 下載。其他教學方式也都放在 Github 喔!
2015-11-11 / JSN / 2 Comments / 2,295 次瀏覽
前言
主旨是 把陣列的寫法,改為使用物件的寫法風格,而且隨時還可以使用陣列的風格使用。例如
|
$user['phone'] = "0933-333-333"; // 指定使用者的電話是 0933-333-333 |
改用這種寫法來取代:
|
$user->phone = "0933-333-333"; echo $user['phone']; // 輸出 0933-333-333 echo $user->phone; // 仍然輸出 0933-333-333 |
或是交換寫…..
|
$user['phone'] = "0933-333-333"; echo $user->phone; // 輸出 0933-333-333 echo $user['phone']; // 仍然輸出 0933-333-333 |
我們打這些符號 [”] 會比箭頭符號 -> 要來的手指頭不靈活--而且大量程式碼擠在一起時畫面很髒。所以我希望透過改寫風格,讓程式碼更乾淨、手指頭負擔更小、開發速度更快。
其實之前前幾篇有提到 PHP 的 ArrayObject 原生功能(是的,原生 PHP 有支持只是用的人太少,功能兩光兩光),但因為遇到多維陣列時,想要遞迴到底層把它轉換成物件,就會遇到一些狀況,例如:
|
$array['a1'] = "value1"; $array['a2']['b1'] = "value2"; $array['a2']['b2']['c1'] = "value3"; $array['a2']['b2']['c2'] = "value4"; $test = new ArrayObject($array); echo $test->offsetGet('a1') . "<br>"; //顯示 value1 //只能輸出到這(因為型態是陣列不是物件),因此無法使用這種寫法 offsetGet()->offsetGet()->.... echo $test->offsetGet('a2'); // 注意,會顯示 Array |
所以,如果要使用
來取代陣列寫法
那就只能先建立 ArrayObject 並
指派空的陣列容器 ,再用 ArrayObject 的特性來賦值進去。可是這樣一來,會沒辦法轉換『原本已存在的陣列』,因為在建構子的時候一定要指派空陣列。
|
$a = new ArrayObject(array(), ArrayObject::STD_PROP_LIST); //建構子的地方,要先放入一個空陣列,轉換成 ArrayObject 型態 $a->first = "001"; //這裡以下才能使用物件風格操作 $a->second->one = "002"; $a->second->two = "003"; echo $a->second->one; // 顯示 002 |
我為什麼要使用呢?
加速!時間就是錢,錢就是我的生活。一天八小時可以幫我省下好幾分鐘,尤其是當我文思泉湧的開發程式的時候,或是突然想到什麼點子要馬上打出來測試時,打程式的速度才跟得上我的思考。像這時候我就會覺得打陣列超級麻煩,跟不上我思考的速度。當然最重要的是,我想偷懶--誰想那麼認真呢?懶,可是工程師的美德呀!說回來我們來體會一下。
例如,我們開發購物車流程好了。試著敲一下鍵盤,感覺一下你打字的速度跟手感
|
echo $user['David']['orderlist'][0]['amount']; // 呼叫使用者叫做 David 的第一筆訂單總金額 |
跟打這段
|
echo $user->David->orderlist[0]->amount; |
哪個又快手指又舒服呢?我們再試試
|
$user['cart']['product']['price'] = 120; // 設定某個使用者購物車中的某商品價格是120元 |
跟打這段
|
$user->cart->product->price = 120; |
是不是省時間,手指頭又不會打結呢?
接著,有時候在除錯時,我們想要看整體結構。例如,我們想要看 $user 這個物件的所有元素。以往我們用 print_r() 之類的方法,現在我們直接 echo 就好。
|
$data['status'] = "success"; $data['message'] = "登入成功"; $data = new jsnao($data); echo $data; // Debug 就這樣檢視所有元素,方便吧,手指頭又舒服多了 |
如果開發 API 遠端回傳的是 json 格式,一樣直接使用
|
$mix = '{"my":"Jsnao"}'; $result = new Jsnao($mix); $result->my; // 輸出: Jsnao $result['my']; // 仍然輸出 Jsnao |
Composer 下載方式
建立 composer.json
|
{ "require": { "jsnlib/jsnao": "dev-master" } } |
使用 composer 指令
下載完畢以後,就可以在你的文件這麼自動載入 Jsnao。
|
<? require __DIR__ . '/vendor/autoload.php'; $mix = array('my'=>"Jsnao"); $ary = new Jsnao($mix); echo $ary; |
這支 Jsnao 的用法就這麼方便了。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
|
include_once("../jsnao.php"); // 如果鍵不是以數字為開頭,就使用這種普通方法。 $cart = array ( 'A001' => array ( 'name' => 'apple', ) ); $cart = new jsnao($cart); // 取值 $cart->A001->name; //output: apple // 賦值 $cart->A002 = array('name' => 'banana'); //或 $cart->A002 = array(); $cart->A002->name = 'banana'; // 修改 $cart->A001->name = 'cherry'; // 刪除 $cart->A003 = array('name' => 'bag'); unset($cart->A003); echo $cart; |
傳統下載
點我 馬上從GitHub下載,或是先去 我的GitHub 看看。
2013-09-22 / JSN / 0 Comments / 127 次瀏覽
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
|
php 使用data url 的function : function data_url($file, $mime) { $contents = file_get_contents($file); $base64 = base64_encode($contents); return ('data:' . $mime . ';base64,' . $base64); } 使用Codeigniter,在Controller 裡面的function 可以這樣寫: public function dataurl() { $this->load->helper('file'); $base64 = base64_encode(read_file(你的圖片實際位置)); return $url = 'data:jpg;base64,' . $base64; //我這邊圖片類型直接寫jpg,就不寫判斷了 } 可參考: http://www.player.idv.tw/prog/index.php/Data_URI_scheme#PHP http://blog.darkthread.net/post-2010-11-05-data-uri.aspx |
2013-08-30 / JSN / 0 Comments / 2,133 次瀏覽
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
|
<? $htmlDom = new DOMDocument; //須要添加meta 避免中文亂碼 $html = '<meta http-equiv="Content-Type" content="text/html; charset=utf-8">' . '<div class="aaa">Hellow</div>'; $htmlDom->loadHTML($html); $divlist = $htmlDom->getElementsByTagName("div"); foreach ($divlist as $div) { //取得屬性 $str = $div->getAttribute("class"); //設定屬性 $div->setAttribute("data-add", $str); //裡面的文字: Hellow $value = $div->nodeValue; } //輸出: <div class="aaa" data-add="aaa">Hellow</div> echo $htmlDom->saveHTML(); ?> |
參考:
DOMDocument:
http://www.php.net/manual/en/class.domelement.php
DOMElement:
http://www.php.net/manual/en/class.domdocument.php
2013-08-30 / JSN / 0 Comments / 15 次瀏覽
https://code.google.com/p/phpquery/downloads/list