2011年7月28日

Codeigniterを使ってショッピングカートをゼロから作ってみよう。 # 3

テンプレート化の下地ができたので、調子に乗ってそのままバックエンドの分離に着手します。
テンプレート化はこちら


■フロントエンドとバックエンド(管理画面)の分離


一般的にフロントエンドとバックエンドはデザインが異なることが多いですし、機能的にも違ったものになります。そう考えると分離させるのはそれほど悪い考えでもないでしょう(であって欲しいw)

/admin/index.php./index.php をほぼコピーした感じです。

/admin/index.php
<?php
define('EXT', '.php');
define('FCPATH', __FILE__);
$pathinfo = pathinfo(FCPATH);
define('SELF', $pathinfo['basename']);
define('ROOT',realpath($pathinfo['dirname'].'/../').'/');
unset($pathinfo);

define('SYSPATH', ROOT.'system/');
define('EXTPATH', ROOT.'extension/');
define('APPPATH', ROOT.'admin/application/');

$f=pathinfo(__FILE__, PATHINFO_BASENAME);
if (!is_dir(SYSPATH))  exit("Your system folder path does not appear to be set correctly. Please open the following file and correct this: ".$f);
if (!is_dir(APPPATH))   exit("Your application folder path does not appear to be set correctly. Please open the following file and correct this: ".$f);
if (!is_dir(EXTPATH)) exit("Your extension folder path does not appear to be set correctly. Please open the following file and correct this: ".$f);

define('ENVIRONMENT', 'development');

if (defined('ENVIRONMENT'))
{
    switch (ENVIRONMENT)
    {
        case 'development':
            error_reporting(E_ALL);
        break;
    
        case 'testing':
        case 'production':
            error_reporting(0);
        break;

        default:
            exit('The application environment is not set correctly.');
    }
}

require(SYSPATH.'core/Bootstrap'.EXT);


ここで問題になってしまったのがLayoutライブラリです。
./index.phpTEMPATHを設定していたため$this->layout->view()が全てTEMPATHに向いてしまっていました。

そこで両方のindex.phpにADMIN定数を設定し、ADMIN=TRUEの場合にはTEMPATHに向かないように/extension/core/Layout.phpを変更しました。
(毎回コントローラで$this->layout->set('admin');とやるのは無駄ですからね…)

./indexphp
define('ENVIRONMENT', 'development')直前

define('ADMIN', FALSE);

/admin/indexphp
define('ENVIRONMENT', 'development')直前

define('ADMIN', TRUE);

/extension/core/Layout.php
18行目

if(! ADMIN) $load->set_view_path(TEMPATH.$template.'/');


■ コントローラの設定
admin/application/controllers/home.php
<?php
class Home extends Controller
{
    function index()
    {
        $this->layout->view('home');
    }
}


■ ビューの設定
admin/application/views/home.php
this is admin directory - <?php echo __FILE__; ?>


■ レイアウトの設定
admin/application/views/_layout/main.php
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title>Admin Template</title>
</head>
<body>

<?php echo $contents; ?>

<p><br />Page rendered in {elapsed_time} seconds</p>

</body>
</html>


■ てすと
http://localhost/lsc/admin/ にアクセスしてみます。


ちゃんとアクセスできてます。大丈夫そうです。
無事に分けられたところで、次はアクセス制御かな?

0 件のコメント:

コメントを投稿