まずは、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'); ?>">