PHPフレームワークCodeIgniter
昨年 「CodeIgniter徹底入門 」 を参考に version1.6 をインストールした辺りで色々忙しくなってきて放置状態、あーやらなきゃ。。。っつーわけでまたボチボチ触り始めましょう。笑
久々に本家のサイトを見に行ったら、Version1.7.1 が!、折角なのでコレを使いましょう。笑
因みに「CodeIgniter徹底入門」 はバージョン1.6を使って書かれていますが、今のところCodeIgniterを理解する上では全く不便を感じていません(新機能に関しても十分な1.7用の日本語ヘルプが整備されてますから)。ただ1.6用に作られた日本語パッチはそのままでは使えませんので悪しからず。
2~3日ゴチャゴチャいじって感じたことは、とても簡単なPHPフレームワークということ(簡単と言うと語弊があるかもしれません「とっつき易い」と言った方がいいかな?)、例えばWordpressのテンプレートを自分で直せる人ならほんとスラスラと書けちゃうと思います。笑
さて、参考書を読んでいるだけではツマラナイ、でも何か課題がないと先へ進まないので、簡単なSNSのフレームにでも挑戦してみようと思います。
SNSの最低限の枠って、ログイン・ログアウト機能か?、まさかそれだけではつまらないので、BBSかな?、認証ロジックもBBSも 「 CodeIgniter徹底入門 」 にサンプルが載ってたし。あ~でも携帯電話からの投稿は今や外せない機能なので最終的には携帯電話からも書けるBBSを目指してみます。
まず機能を知りたいのでマニュアルの順に機能チェック、version1.7のマニュアルは コチラ 、既にしっかりと日本語に翻訳されているのには驚き!。
URLヘルパをチェックしてて気が付いた事が。。。
uri_segments() と言うファンクションは実装されていませんね、多分uri_string() の間違えだと思います。
あと気になったのが、URLサフィクス(「CodeIgniter徹底入門」の3.3.3)ですが、設定ファイルでサフックスを指定しておくと、FWが勝手にサフィクスを付加してくれます(FORMからSUBMITボタンをクリックした時とかでも勝手にURIに補完される)。徹底入門によると例えば、$config['url_suffix'] =’.html’ としておくと、あたかも静的なhtmlファイルへアクセスしているかのように見せられるとか。。。
これも動的に設定可能なので、セッションIDの埋め込みなんかもスグできそうです、ただ「ページネーション」機能ではこれが働かないみたいです、仕様なのかバグなのかは不明です。ついでにページネーション絡みですは、ページネーションは最低以下の6行書くだけでこのような感じで表示されます。
$this->load->library('pagination');
$config['base_url'] = 'http://example.com/index.php/test/page/';
$config['total_rows'] = '200';
$config['per_page'] = '20';
$this->pagination->initialize($config);
echo $this->pagination->create_links();
この base_url の部分ですが、上の例の様な直書きでは問題ありませんが、これを
$config['base_url'] = current_url();
と書きたい所なのですが上手く行かないですね、ページ番号をクリックする度にページ番号を表すセグメントが、末尾にどんどん追加されてしまいます。
例 ) http://example.com/index.php/test/page/4/8/16/32/64/32/16/32/64/128
$config['uri_segment']= でページ番号に使うエレメントも指定できるようなのですが、上手くいきませんでした。
ps.
ところで、『 CodeIgniter 』 どう発音するのでしょうか?
コードイグナイター?、コードイグニター?
ページネーションとサフィックス(セッションID)を共存させるには
まだ始めたばかりで、この手法で良いのかわかりませんが、手っ取り早くURLの最後にサフィックスを反映させるには、
{プロジェクト名}/libraries/Pagination.php の修正が簡単。
※元ソースを修正するのではなく、
{プロジェクト名}/system/application/libraries/Pagination.php へコピーしたモノを修正する。
まず、サフィックスの取得、さらにそれを利用して base_url に埋め込まれているサフィックス(セッションID)を削除しておく
$url_suffix = $CI->config->item('url_suffix');
$this->base_url = str_replace($url_suffix, '', $this->base_url);
以下の5行が出てくるので(連続はしていません)、上記で取得した、$url_suffix を最後のエレメントに足す。
$output .= $this->first_tag_open.'<a href="'.$this->base_url.'">'.$this->first_link.'</a>'.$this->first_tag_close;
$output .= $this->prev_tag_open.'<a href="'.$this->base_url.$i.'">'.$this->prev_link.'</a>'.$this->prev_tag_close;
$output .= $this->num_tag_open.'<a href="'.$this->base_url.$n.'">'.$loop.'</a>'.$this->num_tag_close;
$output .= $this->next_tag_open.'<a href="'.$this->base_url.($this->cur_page * $this->per_page).'">'.$this->next_link.'</a>'.$this->next_tag_close;
$output .= $this->last_tag_open.'<a href="'.$this->base_url.$i.'">'.$this->last_link.'</a>'.$this->last_tag_close;
※修正後
$output .= $this->first_tag_open.'<a href="'.$this->base_url.$url_suffix.'">'.$this->first_link.'</a>'.$this->first_tag_close;
$output .= $this->prev_tag_open.'<a href="'.$this->base_url.$i.$url_suffix.'">'.$this->prev_link.'</a>'.$this->prev_tag_close;
$output .= $this->num_tag_open.'<a href="'.$this->base_url.$n.$url_suffix.'">'.$loop.'</a>'.$this->num_tag_close;
$output .= $this->next_tag_open.'<a href="'.$this->base_url.($this->cur_page * $this->per_page).$url_suffix.'">'.$this->next_link.'</a>'.$this->next_tag_close;
$output .= $this->last_tag_open.'<a href="'.$this->base_url.$i.$url_suffix.'">'.$this->last_link.'</a>'.$this->last_tag_close;
これで、URLが、『 base_url / ページ番号 / セッションID 』の順番になりました。
かなり強引ですね、まぁ理解が深まる過程でもっとマトモな方法が見つかることを期待しながら先に進みましょう。