Codeigniterでフレームワーク初挑戦してみるよ

えっと・・・

WordPress入ってるサイトはそれでいいんですけど、PHPでがっつりフルスクラッチしているサイトもありまして・・・もうめんどくさいからフレームワークでも使ってみるべ、ってなことで。

また覚書残しますよ。

でも、インストールと設定は同僚にまかせちゃったから省きます(ぉ

※ 2011/06/06現在、はじめたばっかなのでこのエントリー自体が未完成です。

1.はじめてみる、てすと。
でもね、既存のシステムを置き換えたいわけだから、チュートリアルにあるblog作ってみますとかどーでもいいわけ。なのでいきなりなんか作ってみます。

【2011/06/06 変更記録】
当初CakePHPと言っていましたが、Codeigniterに変更しました。ので、タイトルも変更しました。だって拡張子が.phpとかなので何もしなくてもDreamweaverで作業ができるんだもん。

CodeigniterはCakePHPなどを踏襲しているので、MVC(model、view、controller)が採用されています。しかし、CakePHPなどと違うのはゆるいこと。最悪controllerだけあれば動いちゃいます。

でも、とりあえずのルールはあって、ファイル名とclass名は同一にすることが基本ルールのようです。まずはcontrollerのclassから作ってみます。

【application/controllers/test.php】

class Test extends CI_Controller {
  public function index()
  {
    echo "Halo World!!";
  }
}

※ 作業中のまま公開しちゃう。

Ktai Styleでカテゴリ一覧ページを構築

Ktai Styleでサイトを構成していて、要望があったので構築した際のメモ書き。

携帯サイトを構成した場合のfooterメニューにアーカイブやカテゴリーというリンクがある(defaultテーマの場合、今回の場合はdefaultテーマを利用した改造テーマ)。
このカテゴリーをクリックし、カテゴリー一覧から個別ページへ飛んだ際に、ページ下部に表示される次の記事へのリンクと前の記事へのリンクは全体の記事の前後リンクになる。
これを、カテゴリー一覧から飛んだときにはカテゴリーに絞り込んでの前後リンクにしてほしいと要望があった。

まあ前後リンクをカテゴリーに絞るのは難しくはない。が、single.phpで前後リンクをカテゴリーに絞ってしまうと、TOPページなどからカテゴリに関係なく飛んできた場合も、カテゴリ毎のリンクになってしまう。
まあ、だからカテゴリ一覧から飛んできた場合、カテゴリに絞ってシングルページを見ている場合にはカテゴリに絞ったリンクを表示するように分岐を設けただけなんだけど。

まず、最初の改造。(全てテーマのみの改造、コアは修正していない)
category.phpを作成して一覧リンクを生成する際に「?category=1」を挿入する。

<dl>
<?php for ($count = $ks_settings['ol_count']; have_posts() ; $count++) :
	the_post(); ?>
	<dt><?php 
	$link = ks_ordered_link($count, $ks_settings['ol_max'], get_permalink(), get_the_title(), '%link', false, false);
	$pattern = "/(.*\.html)(.*)/i";
	echo preg_replace( $pattern, '$1?category=1$2', $link ) . ' '; ?> <img localsrc="46" alt="@ " /><font color="<?php echo ks_option('ks_date_color'); ?>"><?php ks_time(); ?></font></dt>
<?php endfor; ?>
</dl>

ソースのほとんどはdefaultのものなので一部のみ記述。
ks_ordered_linkをecho=falseして取得した後に「?category=1」を追加しているだけ。

次にsingle.phpを改造。
こちらは「?category=1」があることを確認して表示するリンクを分岐で分けているだけ。

if($_GET['category']) {
	$category = htmlspecialchars($_GET['category']);
}

ページの先頭でとりあえずGETしておく。

if( $category ) {
	$previous_post = ks_previous_post_link(array('format' => '<div align="left"><img localsrc="7" alt="« ">*.%link</div>', 'in_same_cat' => true, 'echo' => false));
	$next_post = ks_next_post_link(array('format' => '<div align="right">#.%link<img localsrc="8" alt=" »"></div>', 'in_same_cat' => true, 'echo' => false));
	$pattern = "/(.*\.html)(.*)/i";
	echo preg_replace( $pattern, '$1?category=1$2', $previous_post );
	echo preg_replace( $pattern, '$1?category=1$2', $next_post );
} else {
	ks_previous_post_link('<div align="left"><img localsrc="7" alt="« ">*.%link</div>');
	ks_next_post_link('<div align="right">#.%link<img localsrc="8" alt=" »"></div>');
}

やっていることはほぼ一緒。$categoryを調べてカテゴリーを絞る必要がある場合はks_previous_post_linkでin_same_catをtrue、echoをfalseにしてカテゴリに絞られたリンクを生成し一時取得。前後リンクに同じく「?category=1」を付加することで次のページに飛んでも絞込みを有効にしている。
それ以外の場合は普通に表示した。

Ktai Styleのコードを使用して行っているが、PC版でもコードも使用方法もほぼ一緒なので、同じことは簡単にできそう。

仮想サーバの立ち上げとテスト環境の構築

え~っと、前回の報告でファーストサーバがPHPのバージョンを変更することをお伝えしましたが、Wordpressのフォーラムなどでも質問をした結果、自分で検証する必要がありそうです。
そこで、ローカルPC内にできるだけ同じ環境を構築し、テストをしたうえでファーストサーバ上にあげることにしました。
今回検討しているサーバ構築は以下のとおりです。なお、Windows環境では正確な検証ができない可能性があるので、VMwareServerを利用し仮想サーバを立ち上げることにしました。
仮想サーバ:VMwareServer
OS:Ubuntu Linux 7.10
Webサーバ:Apache(バージョン検討中)
PHP:5.2.5
MySQL:検討中

以下、構築しながら書きかけ・・・
※このサーバはチカッパを利用しているのでこのブログもチカッパブログを利用していましたが、安定しないためWordpressに載せかえる予定です。(チカッパでのwordpressのインストールなどは公式ページにあるため、特に触れていません)
※wordpressに変更しました。

ファーストサーバーのPHPバージョンが変更

ファーストサーバーにてPHP5の導入がコメントされました。

平素よりファーストサーバをご利用いただき、誠にありがとうございます。

弊社にて提供しております PHP について、 2008年1月8日より PHP5への対応を開始いたしました。

また、従来提供の PHP4 は今後提供を終了する予定でございますので、現在PHP4にてご利用中のお客様は、ご利用のPHPプログラムの見直しをお願いいたします。

ただし、PHP5の提供はCGI版になりプログラムの変更は免れない模様。
以下に変更内容を示す。

PHP4とPHP5とでは、弊社でのご提供において以下の相違点がございます。
ご確認いただき、プログラムの見直しを行ってください。

  PHP4(従来) PHP5
提供形態 DSO版 CGI 版
プログラムへのパス記述 不要 必要
ファイルのパーミッション 644 755※アップロード後に変更が必要
プログラムの拡張子 .php .php5

つまり、wordpressに関していえば

  1. 拡張子の変更 .php → .php5
  2. パーミッションの変更 644など → 755
  3. phpパスの追加

の作業が、最低でも必要になる。

ここで、拡張子の変更に関してはFAQに答えがあった。

拡張子「.php」でPHP5プログラムを動作させたい。
「.htaccess」ファイルの設置によりお客様にて設定の変更が可能です。手順は下記をご参照ください。
====================================
■.htaccess の設置方法(.php でPHP5プログラムを利用する場合)
====================================
 1) テキストエディタに下記の内容を記述します。

—–ここから—–ここから—–ここから—–
AddHandler cgi-script .php

—–ここまで—–ここまで—–ここまで—–

 ※記述の最後には必ず「Enter」キーなどで改行を挿入してください。
 2) 1)のファイルを .htaccess という名前で保存し、サーバにアップロードします。
※「.htaccess」は、認識させたいファイルと同階層にアップロードしてください。
※「.htaccess」は、wwwディレクトリ以下全てに同じ設定をされる場合は
wwwディレクトリ直下に、特定のディレクトリのみに設定
される場合は特定のディレクトリにだけアップロードしてください。
※.htaccessはサーバの挙動を制御するものですので、取り扱いには
十分にご注意ください。

.htaccessに記述したうえでアクセスできることは確認した。(もちろんPHPは動かない。)

次にパーミッションの変更に関しては「FFFTP」などであれば拡張子ごとに転送時の動作を設定できるためあらかじめ転送設定に.PHPは755で転送するように設定しておけばよい。

最後のPHPパスの追加であるが、すべてのPHPファイルの先頭に「#!/usr/bin/php」の記述が必要になる。記述なしでは動かなかった。
いろいろ調べてみたが他に方法はなさそうなので、すべてのPHPファイルに追加することにする。他の方法に関する情報があったら是非教えてほしい・・・

休み明け、でもwordpressいじれずw(ImageManager追記)

長い長い9日間の休みを終えて、、、
20日から仕事復帰と思いきや。
web系の仕事よりも大切な仕事を抱えてましたw

休み中に発見したエラーを修正したいと思っていたのですけど、webの仕事も急ぎの仕事が多すぎてwordpressに取り掛かれません。
なんとか23日にわずかな時間を見つけてエラー回復に向けて調整を続けておりました。

ファーストサーバでの結果としては、今までImageManager日本語化パッチがImageManager2.3.8への対応までだったので最新版ではなくImageManager2.3.8を導入しておりましたが、最新版(2007/08/23現在)であるImageManager2.4.1に変更してみました。
エラーはなくなりページの更新でもImageManagerを問題なく表示できました。もちろん、日本語化も可能でした。

問題はさくらサーバでも同じようにエラーを消せるかですが・・・
昨日はL’Arc~en~Cielのライブに強制参加(てか運転手?)で富士急ハイランドまで行っていたので帰りは日にちをまたいでいましたw
今日これから検証に入ります。また追記でご報告ということで。

ImageManagerの日本語化について追記です。
Wordpressのバージョンによってはファイル名の変更が必要になります。詳しくはBirDesignさんのページでコメント欄までよ~く読んで下さいねw
簡単に説明すると、WordpressのバージョンがME2.1以降だとlangフォルダ内にある「ImageManager-ja_UTF.mo」のファイル名を「ImageManager-ja.mo」に変更する必要があります。今から入れる人は必須かな?

さくらサーバとは関係ない追記w
富士急ハイランドへ行ってきたついでにガンダムクライシスにも行ってきました。
特設サイトにブログパーツがあったので試しに設置してみましたが、、、結構重いので飽きたら消しますw
ちなみにサイドメニューに設置してあるバナーはWebリングの役目も果たしているようです。再生ボタンのようなものをクリックすると別サイトへ飛んでいきますが、ガンダムと関係があるのかはまったく持って不明です(;゜д゜)