Posted on

CodeIgniterのlayout libraryを使ってみる

@localdisk の作成された layout library を使ってみました。すいません、ただそれだけです。layout library の記事を見て頂ければほとんどわかる内容ですが、通常(あくまで僕なりの)の書き方との違いとか書きました。

まずは、ライブラリとなる Layout.php を設置します。
application/libraries/Layout.php

次にテンプレートとなる main.php を設置します。
application/views/layout/main.php

で、呼び出すコントローラ側に以下のように記載します。
今までの書き方はこうでした。$dataに出力したい情報(動的データ)を格納し、viewのロード時に渡します。
[cc lang=”php”]
$data[‘header_title’] = ‘ヘッダーのタイトル’;
$data[‘content_title’] = ‘タイトル’;
$data[‘content’] = ‘ここは本文ですよ’;
$this->load->view(‘layout/main’, $data);
[/cc]

ライブラリ適用後はこのようになります。
layoutライブラリをロードして(または application/config/autoload.php で事前にロードしたらスッキリしますね)あとはメソッドチェーンで1行書くだけ。
[cc lang=”php”]
$this->load->library(‘layout’);
$this->layout->write(‘header_title’, ‘ヘッダーのタイトル’)->write(‘content_title’, ‘タイトル’)->write(‘content’, ‘ここは本文ですよ’)->render();
[/cc]

なるほど、きれいですね。この場合は layout/main だけが共通ですが、共通レイアウトが複数ある場合どうすれば良いかなとか思いましたが深く追求せず。

Posted on

CodeIgniterのURI表記

すごく基本的なことですが、CodeIgniterインストール直後URIは以下のようになります。local環境でci2というフォルダにインストールしたとします。

http://localhost/ci2/index.php/welcome

ちなみに、welcomeページが初期ページとして表示されるように設定している箇所は、
application/config/routes.php 41行目

[cc lang=”php”]
$route[‘default_controller’] = “welcome”;
[/cc]

と設定されているからですね。例えば homeコントローラを作成したとして、サイトの初期ページにしたい場合は、

[cc lang=”php”]
$route[‘default_controller’] = “home”;
[/cc]

とするだけです。で、話戻ってURIですが、index.phpがかっこ悪いので、index.php ファイルをURLから除去する設定をしてみます。
.htaccess を作成します。

[cc lang=”php”]
RewriteEngine on
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^(.*)$ /ci2/index.php/$1 [L]
[/cc]

以上です。こうすることで、
http://localhost/ci2/welcome (http://localhost/ci2/ と表示される内容は同じ)
と表示されます。

Posted on

Zend_Translateで多言語対応

多言語対応のちょっとしたサービス?を作っているのですが練習がてら奥さんのサイト(フレームワークはCodeIgniter使用)を一部多言語化してみました。ZendFramework の Zend_Translate クラスが色んなパターンでの多言語化アプローチがあるようなので使ってみました。
このアプローチというのは Zend_Translate のアダプタ の事なのですがこれがまた沢山ありまして、、以下一部抜粋。

  • Array — 簡単ですが柔軟性に欠け、contollerに書いちゃうのでプログラマしか扱えない。
  • Csv — シンプルなテキスト形式で高速ですがUnicode 文字で問題が発生するかもしれない。
  • Gettext — linux における GNU の標準形式。
  • Ini — シンプルなテキスト形式で高速。Csvと似てますね。
  • Tmx — アプリケーション間での翻訳の業界標準。XML フォーマット。

などなどと全部で9種類アダプタ。もちろん自作アダプタクラスの組み込みもOK。今後はSQLにも対応するようです。何が良いのか正直分かりませんね。笑
何となくXML形式のフォーマットが良いのでしょうか。

で、今回は簡単なArrayアダプタで。。

1.Front controller
都度コントローラーでインクルードは面倒なので、フロントコントローラー(index.php) に以下の記述を追加する。ロードの直前で良いと思います。

// Zend framework へのインクルードパス設定
ini_set(‘include_path’, PATH_SEPARATOR . APPPATH . ‘libraries/’ );
// Zend_Translate コンポーネントの読み込み
require_once ‘Zend/Translate.php’;

2.Controller
コントローラー側の実装ですがこんな感じです。かなり省略しましたが動くと思います。ロケーションの設定が上手く行かない場合は、$translate->getLocale(); を使って手順を踏めばいけると思います。

// 翻訳ソースの作成
// アダプタarray
$ja = array(
‘title’ => ‘仕事|イラストレーション’,
‘contents’ => ‘仕事’,
);
$en = array(
‘title’ => ‘Works|Illustration’,
‘contents’ => ‘Works’,
);

//Zend_Translateオブジェクト生成(翻訳アダプタの生成)
$translate = new Zend_Translate(‘array’, $ja, ‘ja’);
$translate->addTranslation($en, ‘en’);
$translate->addTranslation($en, ‘en-us’);
$translate->addTranslation($en, ‘ko’);

// 翻訳された値の取得と表示
$translate->setLocale(“auto”);

3.View
最後は表示部。これは簡単。

echo $translate->_(‘title’);
echo $translate->_(‘contents’);

うまく実装できれば以下のようになります。まずは通常。
capcha0

ブラウザで言語設定を 英語(en) に変更。
capcha1

リロードすると英語になります。(肝心なメニューが日本語なのがアレですが・・・)
capcha2

Zend_Translate を使えば容易に多言語化させる事ができます。Zend はもちろんCakePHP、Codeigniter でライブラリとして使えるのでWEBサービスを作る時は是非多言語対応で作ると良いと思います。日本語だけだと正直弱い。ガラパゴスっていわれる所以では・・・。
この辺の事を書くと長くなりそうなので今日はこの辺で(すでに長い!)

Posted on

PHP in Fukuoka 勉強会で話しました

PIFの勉強会で喋ってきました。内容は Zend_Service on CodeIgniter です。
何気に Zend_Service で色々楽しそうな事ができるなーと思って、メタ検索サイト作ってみました。特に目新しくないのですが、書いたコード数はかなり少なくできたと思います。
約300行です。phpDocument を除けば実コードは250行位。・・そもそも少なくないのかな?


でき上がったサンプルはココ
今回のサンプルコードはいつも通りcodecheck.in
にコミットしています。(明日にでも最新にします)

今回はピザとビールを飲みながらやりまして、先に debility さんが、スピーカーだった訳もあり、僕の出番の時は、軽く酔ってまして、自然と面白く喋らせて頂きました 笑

日本CodeIgniterユーザ会では「第2回 デザイナーのためのプログラミング入門」など行われています。CodeIgniter は本当に入り易いので、特にデザイナーには良いのではないかなーと思います。

サンプルコードをアップデートしました。
http://trac.codecheck.in/share/browser/lang/php/zend_service

Posted on

PHP in Fukuoka 勉強会のお知らせ

あっという間にもう2月も後半・・
今年初めてのPIFの勉強会のとなります。それでもって少しだけしゃべらせて頂きます。

日時
 2009/02/27 (金) 19:00
場所
 AIP Cafe (地図)
内容
題名 「スイーツ(笑)がハモってみた」
スピーカー @pudding @debility 失礼
 cakePHP使いが突如symfonyの世界に放り込まれたお話です。
 両フレームワークの比較がメインになる(予定)。脱線するかもしないかも。
題名 「ZF on CI」
スピーカー @ecogrammer
 題名のとおりやっぱzend frameworkはライブラry)なので、codeigniter上で
 ZFを使った何かになる予定。
参加方法
 GoogleGroup で参加を受け付けてまーす。

勉強会用のサンプルはできた!?ので、後は資料だけ。ちゃんと19時までに来られるか不安ですが頑張ります。
あ、と今週末は codecheck.in によるテキストエディタ勉強会、来月は CakePHP勉強会@福岡 と盛りだくさんです!

Posted on

パソナテック10周年イベントに参加します

パソナテックさんが10周年を迎えたという事で今月31日に、急遽パネラーとして参加させて頂く事になりました。内容は「福岡発PHP動向〜paperboy&co.におけるPHP開発の現場〜」です。まだ話す内容はざっとしか決めていませんが、主に開発の現場(まんま)と、Zend framework に関するお話となりそうです。
とは言いつつ、、過去のブログ記事がCakeとかCIばかりが目立ちますが気にしないで下さい。どれも好きなPHPフレームワークですから!笑

パソナテック
Webデベロッパの祭典 – ちょっと新年会気分で

Posted on

文字列比較を比較してみる

ずっと気になっていた事。。
プロファイリングというほど真面目にやってませんが、strcmp、preg_match、==演算子どれが実行速度が速いか試してみました。

材料として、文字列$str1、$str2を10000回ループ処理

$str1 = “abcd”;
$str2 = “abcd”;
$n = 10000;

結果は以下の通り(要所有Mac)

strcmp Total: 0.006756067276sec
preg_match Total: 6.37917709351sec
「 == 」 Total: 0.00159978866577sec

何度か試しましたが、 ==演算子、strcmp、大きくはなれて preg_match。
予想通りと言えば予想通りですよね。。

Posted on

codeigniterでDB接続するとき接続文字エンコードを聞かれる

ロリポップでの話
ローカルでは database.php でDB設定を行えば、普通にDB使えたのに、
いざサーバーにアップすると、

「クライアント接続文字エンコードを設定できませんでした」

の画面が表示。

MySQLのバージョンふるいと char_set が効かない様子。

system/database/DB_driver.php の 178~188 をコメントアウト(強引にTRUEを返す)
したらとりあえず動いた。
PHPもMySQLもやっぱ5が良いですな~。

Posted on

PIF・FPM勉強会でライトニング・トーク

PIF・FPMの合同勉強会で少しだけ話させて頂きました。自分のお題はCodeIgniterです。
まだガッツリ使った訳じゃないですが、やっぱ軽くて飲み込みやすくって使いやすいframeworkだなと実感した次第です。以下はプレゼン資料。


資料諸々はcodecheck.inにcommitしておきます。

勉強会では以下のような内容を皆さんが発表
@sugmakさん
 Perlのflamework、Catalystを使った掲示板ライブコーディング
@ryuringさん
 CakePHPを使ったミニブログ「asotter」のライブコーディング
@zaionさん
 JAPH(Just another Perl hacker)色んなパターンで変態的プログラムの紹介
@devworksさん
 NetBeans 6.5 でのPHP開発について
@kisさん
 MapReduce的な何か(こんな所で聞けるとは)

と、非常に充実した内容。Catalyst,Cake,CIと内容も似ていて各フレームワークの
仕組みや動きが見れて良い勉強になった。やはりCakeとCIは似てますね。
でもって面白かったす!

Posted on

PHP in Fukuoka 勉強会のお知らせ

主催でもないのに勝手に告知。。

以下引用.

今回はFPM(Fukuoka Perl Mongers)との合同になります。
perl大好きな人もPHP大好きな人も奮ってご参加下さい。

日時:10/19(日) 16:00 – 20:00
場所:デジタルハリウッド福岡校 セミナールーム

内容は追って告知します。テーマは今が旬だと思われるCakePHPです。

他にライトニング・トークの時間があるらしいので、
自分も時間があれば対抗してCodeIgniter的な話をしようかなと。
何にも準備できていませんが 笑