アーカイブ - 10月, 2011



2011年 10月 15

configファイルの読み込み

設定ファイルを読み込む / Mojoliciousリファレンス – サンプルコードによるPerl入門

 設定(コンフィグ)ファイルを読み込むにはMojolicious::Plugin::Configを利用します。

というように、Mojoliciousアプリで設定ファイルを使う事ができる。例えば etc/MyApp.conf を読み込むには以下のような感じ。 stash_keyはオプションで設定できる(デフォルトはconfig?)

etc/MyApp.conf

{
    # MyApp config
    
    # サービス名
    SARVICE_NAME => 'hogehoge',

    # 配列のリファレンス等
    CATEGORY => [0,1,2,3,4],
}

MyApp.pm

package MyApp;

sub startup {
    my $self = shift;

    # コンフィグファイル読み込み
    my $config = $self->plugin('config', { file => 'etc/MyApp.conf', stash_key => 'conf' });
    ....
}

読み込みはリンク先に詳しく書かれている。

configで設定された値を使う

コントローラーとかで使う

sub index {
    my $self = shift;
    
    #my $config = $self->stash('conf');
    my $config = $self->config;
    my $service_name = $config->{SARVICE_NAME};
    # or 
    my $service_name = $self->config('SARVICE_NAME');
    ....
}

テンプレートで使う

    <%= stash('conf')->{SARVICE_NAME} %>
    <%= config->{SARVICE_NAME} %>
    <%= config('SARVICE_NAME') %>

オブジェクト指向的には config()で取得したほうがいいのかな?

テンプレートで使うには

<%= config 'SARVICE_NAME' %>

がタイプが一番少ないようだ。


Filed under: Mojolicious

Trackback Uri






2011年 10月 14

すぐ忘れるし、どこにあったか分からなくなるのでメモ。

Mojolicious – GitHubより引用

    package MyApp;

    use Mojo::Base 'Mojolicious';

    use DBIx::Custom;

    has dbi => sub {
        my $dbi = DBIx::Custom->connect(...);
        return $dbi;
    };
    
    sub startup {
        my $self = shift;

        ### YOU MUST NOT CALL dbi() method in starup().
    }

リンク先にはBad Exampleもあるので参考に。


Filed under: Mojolicious,perlモジュール

Trackback Uri






2011年 10月 13

規格を利用していて、ある規格(長いものや重いものなど)の場合は別途送料となる場合の処理を書いてみる。
ただし無理やり実装。

動作

該当する規格分類の場合は送料を通常より1000円プラスする。

環境

EC-CUBE 2.4
PostgreSQL

段取り

各規格の分類は dtb_classcategory に格納されていて、classcategory_id というユニークな通し番号が振られている。
カートのセッションにもこの通し番号が格納されているようなので、こいつを使って判別することとする。
なので、適用する規格の分類を登録した後に、classcategory_id を調べなくてはならない。

工程

[eccube]/data/class/SC_CartSession.php

function chkClassCategory という関数を追加する.
一番最終行の

}
?>

の前に追加.

    /** カート中の商品をチェックして別送料対象かチェックする
     * 1つでも対象商品があればTrueを返す.
     * True:対象商品あり False:対象商品なし
     * $_SESSION[$this->key][$i]['id'][0]...プロダクトid;
     * $_SESSION[$this->key][$i]['id'][1]...規格1;
     * $_SESSION[$this->key][$i]['id'][2]...規格2;
     */
    function chkClassCategory() {
        $max = $this->getMax();
        for($i = 0; $i <= $max; $i++) {
            $classcategory1 = $_SESSION[$this->key][$i]['id'][1];
            $classcategory2 = $_SESSION[$this->key][$i]['id'][2];
            
            // マッチする条件を設定(以下は例)
            if(
                ($classcategory1 >= 208 AND $classcategory1 <= 211)
                OR ($classcategory2 >= 208 AND $classcategory2 <= 211)
                OR ($classcategory1 >= 11 AND $classcategory1 <= 16)
                OR ($classcategory2 >= 11 AND $classcategory2 <= 16)
            ) return true;
        }
        // マッチしなかったらfalseを返す
        return false;
    }

[eccube]/data/class/helper/SC_Helper_DB.php
function sfTotalConfirm

修正前

        // 合計送料の取得
        $arrData['deliv_fee'] = 0;

修正後

        // 合計送料の取得
        $arrData['deliv_fee'] = 0;

        // 規格分類チェック(送料オプション)
        $classcategory_flag = $objCartSess->chkClassCategory();
        if($classcategory_flag){
            $arrData['deliv_fee'] += 1000;
        }

例では該当規格分類の場合は1000円プラスするようになっている。
決め打ちの場合ここまでで出来てしまう。

テンプレートに注釈をつけるなら下記のように tpl_classcategory_flag をつけて、テンプレートを修正する。

修正前

        // 合計送料の取得
        $arrData['deliv_fee'] = 0;

修正後

        // 合計送料の取得
        $arrData['deliv_fee'] = 0;

        // 長尺商品チェック
        $classcategory_flag = $objCartSess->chkClassCategory();
        if($classcategory_flag){
            $arrData['deliv_fee'] += 1000;
            $objPage->tpl_classcategory_flag = 1;
        }

[eccube]/data/Smarty/templates/defaultKai/shopping/confirm.tpl
修正前

        <tr>
          <th colspan="4" class="resulttd">送料</th>
          <td class="pricetd"><!--{$arrData.deliv_fee|number_format}-->円</td>
        </tr>

修正後

        <tr>
          <th colspan="4" class="resulttd">送料
          <!--{if $tpl_classcategory_flag}-->
		  <br />
		  <span class="price">(内 大判送料:1,000円)</span>
          <!--{/if}-->
		  </th>
          <td class="pricetd"><!--{$arrData.deliv_fee|number_format}-->円</td>
        </tr>

[eccube]/data/class/pages/shopping/LC_Page_Shopping_Confirm.php
変更なしでおk


Filed under: EC-CUBE

Trackback Uri