amazonバナー

ラベル CodeIgniter の投稿を表示しています。 すべての投稿を表示
ラベル CodeIgniter の投稿を表示しています。 すべての投稿を表示

2012年7月27日金曜日

[CodeIgniter]hookでviewの向きを動的に変更する場合の注意点

CodeIgniter(2.0.3)にて View の向きを動的に変更する場合、
hook を活用します。

http://hampom.wordpress.com/2010/03/05/codeigniter-%E3%81%A7%E8%B6%85%E7%B0%A1%E6%98%93%E7%9A%84%E3%81%AA%E3%83%A2%E3%83%90%E3%82%A4%E3%83%AB%E3%83%9A%E3%83%BC%E3%82%B8%E5%87%BA%E5%8A%9B%E3%82%92%E3%81%99%E3%82%8B/

こちらのサイトにて hook を活用した方法が記載されています(感謝!)
ただ、Version が古いものなのか、2.0.3 ではそのままでは動きません。

具体的には、_ci_view_path の部分が 2.0.3 では
_ci_view_paths になっていて、しかも配列になっています。
加えて、protected のメンバ変数なので直接いじることができません。

というわけなので、core の Loader を拡張してメンバ変数をいじれる
プロパティを追加します。

Application/core/MY_Loader.php を追加します。

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class MY_Loader extends CI_Loader {
    function __construct(){
        parent::__construct();
    }
    /**      * viewのパス上書き      * @param string $path 追加するパス      */     function view_path_override($path){         $this->_ci_view_paths = array(APPPATH.'views/'.$path    => TRUE);     } } ?>


こんな感じで作成したら、例の hook のプログラムの部分で
function view_set() {
    if ($this->ci->agent->is_mobile()) {
        $this->ci->load->view_path_override('mobile/');
    }
}

こうすると、携帯のアクセス時には views/mobile/配下の View を
参照するようになります。

2012年7月8日日曜日

季節を越えてデスマーチより帰還

約半年ぶりの気がする・・・。

冬服だったのに、春服になり今や夏服だ。
今年の一月から約半年間CodeIgniterとjQueryを駆使して開発をしてきたが
ようやく落ち着いた。
まぁ2次開発がこれからも続くんですけどね(´・ω・`)

これまではどちらかと言うと中身をいじることが多かったせいか
フロントエンドの部分(javascriptとかcssとか)はだいぶブランクがあって
最初はンガー!てなってたけど今回そこら辺もじっくり触ることができて
ブランクはだいぶ埋められたかなーと思う。

露骨に開発初期の頃作ったソースと最近のソースの熟成度が違う・・・w

さて、今回特に苦労したのがブラウザ対応で、ビジュアルを意識した
サイト構成にするとどうしてもネックになってくるのがInternetExplorer(;´∀`)
 Windows7が発売されてだいぶ経つし自動的にIE9使用者が多くなったとはいえ
それでも会社ではWindowsXPがまだ主流、つまりIE8が多い。

IE8じゃアレもコレも対応できないんだよぉ!てのが多すぎる。
ほんとIEはもう要ら・・・くぁwせdrftgyふじこlp;@:

ちなみに今回どうしてもcssで角丸表現を使いたかったので
IE8用にPIEを使いました。
導入方法などは以下のサイトが詳しいのでそちらを参照してください。
http://css.microrza.com/csstips/iecss_css3pie/
http://coliss.com/articles/build-websites/operation/css/css3pie-decorations-for-ie.html
導入で注意するところは環境によってはこのままでは動かないところですかね。
自分の場合は、PIE.htcをパスで指定しても動かなかったので
同梱されているphpファイルを指定したら動きました。

あとは、position:relative;を忘れないことと、
角丸の場合、border-radius: 5px;で四隅が丸くなりますが
タブボタンを表現したい時には、
border-radius: 5px 5px 0px 0px;
みたいに4箇所を個別に指定してあげる感じでしょうか。

個別に指定できることがわからなくて結構ハマってました。。。(・∀・)

2012年2月23日木曜日

CodeIgniterのPaginationクラスのハマリどころ2

Controller側の処理については前回の分でお話しました。

今回はView側のお話。

検索画面を想定した場合、検索条件を指定して検索を行った後、
検索結果画面が表示され、件数が多い場合ページ番号が表示されます。
ではではと2ページ目をクリックして表示すると検索条件がすっ飛びます。

続きはwebで。

2012年2月22日水曜日

CodeIgniterのPaginationクラスのハマリどころ

CodeIgniterのPaginationクラスは検索画面などで
検索結果の件数が多い時などに、1ページ、2ページ…と
分けて表示する際に重宝するライブラリですが、
使い方にちょっとクセがあり、それはCodeIgniter自身の特性にも関係しているので
Paginationクラスが悪いわけではありませんがここで解説します。

長くなるので続きはwebで。

2012年2月14日火曜日

これはハマる。CodeIgniterの自作ライブラリの作り方。

CodeIgniterで自作ライブラリを使う機会が多々あるかと思います。
作成するときの注意点と解決法をあげておきます。

・自作クラス名は1文字目を大文字で(class Test)
・ファイル名もクラス名と同じ名前にする(Test.php)
・application/libraries/に置く(application/liraries/Test.php)


で、実際使う時は、
$this->load->library('Test');
$this->Test->メソッド名;
と思うでしょうけど、ここがハマりポイント。
CodeIgniter は途中の文字列に関係なく、オブジェクトインスタンス名はすべて小文字で扱う必要があるので、
$this->load->library('Test');
$this->test->メソッド名;
これが正解です。

で、ややこしいわ、ていう方へ。
CodeIgniterの1.7からは別名が付けれるみたいなのでそれを利用すると混乱が少ないかと思います。
$this->load->library('Test', '', 'betsumei');
$this->betsumei->メソッド名;

いやー、これはハマったなぁ。

2012年1月26日木曜日

地味にハマったコントローラ間の遷移

CodeIgniterのControllerである処理を完了したら別のページ(Controller)に飛ばしたい時があるかと思います。
ログイン認証後の遷移とか。

同じクラス内のメソッド同士なら
$this->メソッド名;
で渡れますが、違うクラスとなるとどうすんのだろ~、と地味に悩んでしまいました。
マニュアルよく読んどけ、て話ですが・・・
URLヘルパーのredirectを使います。
// ヘルパー呼び出し
$this->load->helper(array('form', 'url'));

/* ここに処理を記述 */

// 遷移
redirect(URL);
これで遷移します。

URLなので遷移先のメソッドが引数必要だったら
/class/method/arg1/arg2
という感じで渡せばOK

2012年1月11日水曜日

CodeIgniterに熱視線

仕事柄プログラムを触るわけだが、とりわけPHPが多い。

んで今度でかいプロジェクトを任されてさすがにフルスクラッチでやりたくない。

symfonyは一度触ったことがあったのでそれにしようか考えたが、
色々覚えることも多くてとっつきにくい印象があった。
ググる先生に聞いたらCodeIgniterとかいうのが早くて学習も早いそうだ。

資料やマニュアルを読んでたら疼く疼くw
いいじゃないか。
よさげだ。

とりあえず一読してみたので、仕事マシンにVirtualBox入れて、
CentOS6.2入れて試してみる。
OS入れたところで終わったので明日は環境整えて
HelloWorldだな。

新しい技術に触れるのは楽しすなぁ。