2011年9月1日

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

ショッピングカートだけでなく、ほとんどのサイトで設定が必要になります。
今回はその設定をファイルに保存するロジックを作ります。

設定はDBに保存して必要な時にだけ呼び出してもいいんですが、アプリケーションを作っていく過程、もしくはリリースしたアプリケーションをアップデートする時に新しい機能を付けるなど、後で設定が増えていくことも考慮するとメンテナンスを楽にするならファイルだろうとの結論に達しました。DBアクセスは極力減らした方がいいですしね。
(もちろん作る前に使うであろう全ての設定項目を考えて一切追加しないなら別ですが・・・)

コントローラ:admin/application/controllers/setting.php
<?php
class Setting extends Controller
{
    function __construct()
    {
        parent::__construct();
        if( ! _s('admin')) redirect();
    }
    
    function index()
    {
        $this->form_validation->set_error_delimiters('<span class="error">', '</span>');
        $this->form_validation->set_rules('name',_l('SHOP_NAME'),'required|trim|xss_clean');
        $this->form_validation->set_rules('url',_l('SHOP_URL'),'required|trim|xss_clean');
        $this->form_validation->set_rules('title',_l('PAGE_TITLE'),'trim|xss_clean');
        $this->form_validation->set_rules('keywords',_l('PAGE_KEYWORDS'),'trim|xss_clean');
        $this->form_validation->set_rules('desc',_l('PAGE_DESCRIPTION'),'trim|xss_clean');
        if($this->form_validation->run())
        {
            $data['i'] = $this->input->post();
            
            $config_data = $this->load->view('setting/config_template', $data, TRUE);
            file_put_contents(EXTPATH.'config/'.((defined('ENVIRONMENT'))?ENVIRONMENT:'').'/setting.php', $config_data);
            setMessage('success', _l('SUCCESS_UPDATE_SETTING'));
            redirect('setting');
        }
        
        $data['setting'] = $this->config->item('setting');
        $data['breadcrumbs'] = array(_l('HOME')=>'', _l('SETTINGS')=>'settings');
        $data['h1'] = _l('SETTINGS_SHOP');
        $this->layout->view('setting/shop', $data);
    }
}


コントローラ22行目で読み込む設定ファイルテンプレート: admin/application/views/setting/config_template.php
<?php echo '<?php'.PHP_EOL; ?>
/*
 *  Setting Updated: <?php echo date('Y-m-d H:i:s').PHP_EOL; ?>
 */
    $config['site_name']        = '<?php echo $i['name']; ?>';
    $config['site_url']         = '<?php echo $i['url']; ?>';
    $config['page_title']       = '<?php echo $i['title']; ?>';
    $config['page_keywords']    = '<?php echo $i['keywords']; ?>';
    $config['page_desc']        = '<?php echo $i['desc']; ?>';

これで設定をアップデートするたびにsetting.phpを再作成することになります。
最後にconfig/autoload.phpにsettingを追加しておけば毎回設定を読み込んでくれます。

ビューファイルは設定項目が増えたらスクリーンショットを載せたいと思います。
今回はロジックのみでご勘弁をΣ(; ̄□ ̄A