CodeIgniterで静的ページを作成。テンプレートを増やすだけでページ増設。

CodeIgniterで静的なページを作成する方法を紹介します。

CodeIgniterのようなフレームワークでは、ページを作成する際にControllerを増やしていくのが前提となります。CodeIgniterも例外ではなく、

http://example.com/sample/

というURLにアクセスするためにはSample Controllerが必要になります。

ここではコントローラーの作成をせず、テンプレートにあたるビューファイルを増やしていくだけで自動でページが増えるような設定を紹介します。

つまり、上記の例でいくとSample Controllerを作成せず、sample.phpというビューファイルを作成するだけで上記URLにアクセスできるようになります。

あまり更新頻度の高くないページや静的なページに最適です。

スポンサーリンク

静的ページ作成までの流れ

静的ページを表示させるまでの流れは以下の通りです。この方法は公式マニュアルにも紹介されています。

  1. 静的ページ表示コントローラー作成
  2. コントローラーにページ表示用のスクリプトを記載
  3. ルーティングの設定

それでは、順番に紹介していきます。

 

静的ページ表示コントローラーを作る

まずは静的ページを表示させるためのコントローラーを作成していきます。

作成する場所は「application/controllers/Pages.php」です。

<?php
class Pages extends CI_Controller {

    // 静的ページ表示メソッド
    public function view($page = 'home')
    {
        // ここに表示用のスクリプトを書く
    }
}

ページ表示用スクリプト作成

Pageコントローラーを作成したらView()メソッドに表示用のスクリプトを記載していきます。

先ほどのPageコントローラを書き変えていきます。

<?php
    class Pages extends CI_Controller {

    // 静的ページ表示メソッド
    public function view($page = 'home')
    {
        if ( ! file_exists(APPPATH.'views/pages/'. $page. '.php'))
        {
            // ページが存在しない場合は404エラーを返す
            show_404();
        }

        // テンプレートに渡す変数
        $data = array();

        // ここで変数に値をセットします
        $data['title'] = ucfirst($page); // 頭文字を大文字に
        // その他の値もセット

        // ページテンプレート出力
        $this->load->view('pages/'. $page, $data);
    }
}

テンプレートファイル存在チェック

7行目のfile_exists()で静的ページ用のファイルがあるかどうかをチェックし、ない場合には404エラーを返します。ビューファイルのパスは環境に合わせて変更して下さい。

show_404()はデフォルトのエラーページを表示するCodeIgniterのビルトイン関数です。

if ( ! file_exists(APPPATH.'views/pages/'. $page. '.php'))
{
    // ページが存在しない場合は404エラーを返す
    show_404();
}

テンプレート変数セット

14行目から18行目まではテンプレートに渡すための変数を$dataに設定しています。

// テンプレートに渡す変数
$data = array();

// ここで変数に値をセットします
$data['title'] = ucfirst($page); // 頭文字を大文字に
// その他の値もセット

今回の例の場合、テンプレートファイル内では以下のようにして変数にアクセスできます。

<html>
        <head>
                <title>CodeIgniterで静的ページ作成</title>
        </head>
        <body>

                <h1><?php echo $title; ?></h1>
                <em>&copy; 2019</em>
        </body>
</html>

テンプレート出力

最後に、おなじみのviewメソッドでテンプレートを出力します。

// ページテンプレート出力
$this->load->view('pages/'. $page, $data);

ルーティングを設定する

コントローラー表示確認

現在のところ、以下のURLにてコントローラーの表示が確認できます。

http://example.com/index.php/pages/view/{$page}

途中のindex.phpを削除したい場合は以下の記事を参考にして下さい。

CodeIgniter のルーティングからindex.phpを削除する。
CodeIgniterがデフォルトの状態でのルーティング処理は、以下のようなURIになります。 ドメインの後に/index.php/という文字列が入ってしまい、URIが長くなる上SEO的にも望ましくありません。 そこで、ここでは...

 

ルーティング変更

ルーティングを変更するには、「application/config/routes.php」を編集する必要があります。

$route['default_controller'] = 'welcome';
$route['404_override'] = '';
$route['translate_uri_dashes'] = FALSE;

↓

$route['default_controller'] = 'pages/view'; // 変更
$route['(:any)'] = 'pages/view/$1';          // 追記
$route['404_override'] = '';
$route['translate_uri_dashes'] = FALSE;

まず、CodeIgniterのデフォルトルーティングを今作成したPagesコントローラーのViewメソッドに変更します。

次に、追記した行で全てのルーティングをPagesコントローラーのViewメソッドに向けます。

これによって全てのルーティングが先ほど作成したPagesコントローラーのViewメソッドにて処理されるようになり、表示したいページをどんどん作っていくだけでサイトが表示されるようになります。

views/page/{$page}.php

の形式で静的ページを増やしていきましょう。

上記のページにアクセスするためのURLは以下です。

http://example.com/$page/

例:http://example.com/sample/  ->  views/page/sample.php

実用ルーティング例

ここまでに作ったルーティングだと、全ての処理をPages/Viewが受け持つため、あまり実用的はありません。

実際は一部の静的ページのみを上記のようにルーティングしたいはずです。

CodeIgniterのルーティングは柔軟で、上から順番に解析していき、マッチした最初の規則をルーティングします。

そのため、以下のように書いておけばサイトのトップページはWelcomeクラスで処理され、その他のページはPagesクラスが受け持つことになります。

$route['default_controller'] = 'welcome'; // デフォルトルーティングはWelcomeクラスで処理
$route['(:any)'] = 'pages/view/$1'; // 追記

もう少し実用的な例になるとこのようになります。

$route['default_controller'] = 'welcome'; // トップページ用クラス
$route['admin/(:any)'] = "admin/$1"; // 管理画面用クラス
$route['(:any)'] = 'pages/view/$1'; // その他の処理

また、小規模なサイトの場合は全てのアクションを一つのコントローラーが受け持つようにすると楽です。

CodeIgniterのルーティングからコントローラを取り除く
CodeIgniter のようなPHPフレームワークでは、全てのURIへのアクセスをフロントコントローラ(index.php)が受け持つのが一般的です。 フロントコントローラは、リクエストされたパスやクエリ文字によって処理すべきクラス...

CodeIgniterに静的ページを追加する方法は以上です。

コメント

タイトルとURLをコピーしました