まずは、CodeIgniter のツリー構成のおさらいから。
.
├── index.php
├── license.txt
├── application/ (あなたのアプリケーションのコード)
│ ├── ...
│ ├── controllers/
│ └── ...
├── system/ (共通のシステムコード)
│ ├── core/
│ └── ...
└── user_guide/ (マニュアル)
├── index.html
└── ...
ツリーのルートに、エントリポイントとなる index.php があり、ブラウザからのアクセスは application ディレクトリ以下のコントローラに処理が委譲されます。
例えば、
http://<IgniterRoot>/ctr1/act1
という URI 指定は、application/controllers/ctr1.php ファイル内に定義した Ctr1 クラスの act1 メソッド呼び出しにマッピングされます。
この application ディレクトリへのパスは、index.php に以下のように設定されているので、自由に変更することが可能です。
$application_folder = 'application';
CodeIngiter 関連のコード内から単純に相対パスを使用すると、基本的には、ブラウザのアドレス欄に表示されている URL に対しての相対パス指定として動作します。
index.php が置いてあるルートディレクトリからの相対パスで指定したい場合は、CodeIgniter が提供する API を使用してパスを構築する必要があります(url ヘルパーの base_url() など)。
View の中から、
<a href="./a.html">a.html</a>
のように相対パスでリンクを張ると、現在アクセスしている URI を元にした相対パス指定になってしまいます。 CodeIgniter は、コントローラ+メソッド名+パラメータの組み合わせで URI を指定するため、この相対パス指定は不安定です。 このような、単純な相対パスでのリンクは使わない方がよいでしょう。
CodeIgniter で作成したサイトのルートからの相対 URI を構築する場合は、url ヘルパーの base_url() 関数や、anchor() 関数を使います。
下記は、base_url() を使った相対パス指定の例です。
<a href="<?php echo base_url('pages/show'); ?>" ?>pages/show</a>
上記では、pages コントローラの show アクションへのリンクを作成しています。
実は、HTML の Anchor タグ(<a>)を出力するには、base_url() を使うより、anchor() 関数を使った方がお手軽です(anchor() 関数も url ヘルパーに含まれています)。
第一引数にはサイトのルートからの相対パス、第二引数には表示する文字列を指定します。
<?php echo anchor("pages/show/$id", "$title"); ?>
url ヘルパーを使用するときは、コントーラのコンストラクタなどで、以下のようにロードしておく必要があります。
class Pages extends CI_Controller {
public function __construct() {
parent::__construct();
//...
$this->load->helper('url'); // for anchor()
}
//...
スタイルシートを index.php と同じ階層の css ディレクトリ内に置くとします。
このディレクトリを参照するときにも、url ヘルパーの base_url() 関数を利用することができます。
<link href="<?php echo base_url('css/main.css') rel="stylesheet" type="text/css"?>">
上記のコードは、以下のように絶対パスで記述したのと同様に振る舞います。
<link href="http://<IgniterRoot>/css/main.css" rel="stylesheet" type="text/css" />
アンカー要素を出力するために anchor() 関数が用意されていたのと同様に、link 要素を出力するために link_tag() 関数が用意されています。
<?php echo link_tag('css/main.css'); ?>
link_tag() 関数は、html ヘルパーが提供しているので、コントローラ内で以下のようにロードしておく必要があります。
$this->load->helper('html');
画像を表示するための img タグを出力する場合も、link タグの出力とほぼ同様の方法で出力できます。
img タグの出力のためには、html ヘルパーの img() 関数を使用します。
<?php echo img('images/sample.png'); ?>
url ヘルパーの base_url() を使って以下のように記述しても同様の結果を得られますが、分かりにくいだけなので、素直に img() を使った方がよいでしょう。
<img src="<?php echo base_url('images/sample.png'); ?>">