2011年10月28日

Windows上でCodeigniterのユーザガイドをMakeする手順


個人的にCodeigniterの配布元(Repository)がMercuryからGitHubに移ったのは非常にありがたいんですが、ユーザガイドがSphinxとやらに移行したのはだいぶいただけないです。
GitHubのソースにはSphinx用のファイルが入ってるだけで、ユーザガイドを見たいならHTMLファイルを生成しないといけないらしい。面倒すぎる・・・
HTMLで配布してくれたままだったら楽だったのに・・・どうやらSphinxってもともとPythonの文書生成のためのものらしいですね。

だいぶ面倒だったのでSphinx用のソースファイルからHTMLファイルを生成するまでの手順を以下にメモしておきます。


Pythonのインストール
まず、WindowsにPythonをインストールします。
前述のとおりPHPなのになぜかPython用の文書生成アプリを使ってるので、Windowsには標準装備されてないPythonのインストールからやらないといけない。
Pythonを既にインストールしてる人はこの手順をスキップしてください。

Pythonバージョン2系をダウンロード。
3系はダメ(だそうです)。

Windows用のインストーラをダウンロードした場合はそのままインストール。
必須ではないですが、インストールが完了したら環境変数にPythonのパスを追加しておくと便利です。

環境変数への登録(XP)
コントロールパネル→システム→詳細設定→環境変数
Pathを選択してPythonのパスを追加。

eg) C:\Python27\;C:\Python27\Scripts;


登録が終わったらコマンドプロンプトで python と入力すれば確認できます。


easy-installをインストール
ez_setup.pyをダウンロード、コマンドラインで python ez_setup.py と入力すると勝手にインストールしてくれます(以下同文)。


Sphinxをインストール
コマンドラインで easy_install sphinx と入力。

Sphinxの設定
コマンドラインで sphinx-quickstart と入力すると会話形式の設定画面が表示されます。
基本的にEnterで進んで行って問題ないです。わかる人は変更してください。
'Project Name', 'Version Number','Author'が必須項目なので適当に。


sphinxcontrib-phpdomainをインストール
コマンドラインで easy_install sphinxcontrib-phpdomain と入力。


CI Lexer をインストール
Gitでコピーしたファイルの中に user_guide_src というフォルダがあるので、コマンドプロンプトで移動します。
さらにその中に cilexer があるので移動。
python setup.py install と入力。
インストールが終わったら pygmentize -L | more と入力して以下の記述があるか確認します。あればインストール完了。
* ci, codeigniter:
    CodeIgniter (filenames *.html, *.css, *.php, *.xml, *.static)


HTMLファイルを作成
上述 user_guide_src フォルダの中に source フォルダがあるので今度はこちらに移動。
make html と入力すると _build フォルダが作成されます。更にその中に doctrees, html とフォルダが作成され、そのうち html が作成されたユーザガイドです。
この html フォルダをコピー(もしくはカット)して Codeigniter のトップに貼り付け user_guide とフォルダ名を変更すれば完了。


ほんっと、お疲れさまでした!!
 

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