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

CodeIgniter2.0のインストール

ようやく春めいて来ました。と言うことで先月メジャーアップデートされた CodeIgniter をロリポップにインストールしてみました。CodeIgniter は次のステップでインストールできます。とても簡単にインストールすることができます。

1.CodeIgniterを sourceforge よりダウンロードします。
codeigniter2.0.1ダウンロード

2.ZIP パッケージを展開します。現時点での最新は ci-ja-all-in-one-2.0.1-1.zip です。

3.サーバに CodeIgniter のフォルダとファイルをアップロードします。通常は、index.php ファイルがルートになります。
例えば hogemoge.lolipop.jp にアップロードしたとします。

4.application/config/config.php ファイルをテキストエディタで開き、ベースURL(base_url)を記入。暗号化やセッションを利用する場合は暗号鍵(encryption_key)を記入します。
[cc lang=”php”]
$config[‘base_url’] = ‘http://hogemoge.lolipop.jp/’;
[/cc]
[cc lang=”php”]
$config[‘encryption_key’] = ‘任意の暗号鍵を設定’;
[/cc]

5.データベースを使用する際には、 application/config/database.php ファイルをテキストエディタで開き、データベースの設定を記入します。
[cc lang=”php”]
$db[‘default’][‘hostname’] = ‘mysqlxxx.phy.lolipop.jp’;
$db[‘default’][‘username’] = ‘LAxxxxxxxx’;
$db[‘default’][‘password’] = ‘xxxxxxxxxxxxxxxxx’;
$db[‘default’][‘database’] = ‘LAxxxxxxxx-xxxxxx’;
[/cc]

6.以上で完了です。
codeigniter2.0.1インストール完了

version1.x.xから使っている人は気づいていると思いますが、2.0.xではディレクトリ構成が少し変更されているようです。

CodeIgniter 1.x.x
[cc lang=”php”]
index.php
– system
— application
— helpers
— language
— libraries
— scaffolding
[/cc]

CodeIgniter 2.0.x
[cc lang=”php”]
index.php
– application
– system
— core
— database
— fonts
— helpers
— language
— libraries
[/cc]

applicationフォルダ内に実際スクリプトを書いて行くので、コア部分と切り離れて気分的に?作業しやすいのかなと。あと scaffolding がなくなりました(確かに、ほとんど使っていませんでした)。今回のバージョンアップからはPHP5が必須となります。

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

三箇山堂でファーストシューズを

e38394e382afe38381e383a3-1
三箇山堂で「赤ちゃんの初めての靴」ファーストシューズを購入できるようになりました。デザインは少しづつ変えていく予定。当たり前ですが購入できる作品は全て手で描いているので少しずつ少しずつ増やしていきます。
これからも三箇山堂をよろしくお願い致します。

—-
で、、中身の話。
CodeIgniterを使っています。validation、pagination はお手の物ですぐ使えて便利なのですが、Emailクラスを使用していて email->send() メソッドでメール送信を行うと、なぜか特定?の文字だけ文字化けするんですが気にしない。
カート機能と在庫情報持たせただけで、特別な仕組みは何も入れていません。やはり早く開発するならやはりCIかCakeなのかなーと。っても、この2つ(とZend)しか使った事がないんですが・・。

軌道に乗ったら、CMSPに載せ替えます 笑

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

三箇山堂をcodeigniterに乗せてみた

三箇山堂 イラストレーター万野幸美
奥さんのサイトを久しぶりにリニューアルしました。
と言っても見た目が少し変わっただけなので、徐々にいじって行こうと思います。
今回のリニューアルの大きな違いは、PHPフレームワークの一つ、codeigniter を使った点です。URLもすっきりしたし、何気にメンテナンスしやすいし、勉強がてら使ってみました。
codeigniter はDB作らなくても使えるし、MVCを強制されないところが○

一般的にはWEBサービスとか作るときにフレームワーク使うんだろうけど、(静的な)WEBサイト作るのにも重宝しますね。

Posted on

ロリポップでCodeIgniterを設置

1.CodeIgniterを本家よりダウンロード

2.CodeIgniter_1.x.x.zip ファイルを展開
現時点での最新版は CodeIgniter_1.6.3.zip です。

3.設置先にアップロード
例えば hogemoge.jp/codeigniter/ にアップロードしたと仮定。

4.config.phpの設定
codeigniter/system/application/config/config.php を編集。

14行目 $config[‘base_url’] = “http://hogemoge.jp/codeigniter/”;
26行目 $config[‘index_page’] = “”;
44行目 $config[‘uri_protocol’] = “REQUEST_URI”;
69行目 $config[‘language’] = “japanese”;

uri_protocol で PATH_INFO は使えなかった。

5. .htaccessの設置
以下の内容で問題なさそう。

RewriteEngine on
RewriteCond $1 !^(index¥.php|css|user_guide|.+¥.gif$|.+¥.jpg$|.+¥.png$|.+¥.js)
RewriteRule ^(.*)$ /codeigniter/index.php/$1 [L]

6. 表示してみる。
hogemoge.jp/codeigniter/ で表示し、「CodeIgniterへようこそ!」
が表示されたらとりあえずOK。

7.デフォルトページの変更
/codeigniter/system/application/config/routes.php を編集。

43行目 $route[‘default_controller’] = “home”;

default_controller が初期設定時はwelcomeページなので、homeとかtopとか
ページを作成してデフォルトページを変更することができる。