日: 2008年12月1日

「Sigma Grid」-表組みのソートもページネーションもカバーすしてくれるオープンソース (JSON使用)

http://www.sigmawidgets.com/products/sigma_grid2/index.html

Sigma Gridはテーブルの表示とソート、データ編集などを可能にする超豪華ライブラリだ。LGPLライセンスの下に公開されているオープンソース・ソフトウェア。(データの表示に際してJSONでデータを渡す必要がある。)

参考サイト:http://www.moongift.jp/2008/11/sigma_grid/

まずカラムごとにソートができる。これは小数点や桁数をきちんと解釈した上でソートされる。セル内のデータを編集することはもちろん、ライブでバリデーションも行われる。編集されたカラムは色分けされて表示される。

テーブルについては大きさを変えることができる。さらにカラムの幅を変えることができ、長い文章の場合は「…」で省略してくれる。ページネーションにも対応し、簡易グラフ表示や印刷機能もある。

まだまだある。セルに画像やリンクを付けることができ、それはヘッダにも使える。ヘッダはグルーピングして多段にでき、ヘッダの下にテキストボックスやドロップダウンを配置(一括更新用!)もできる。フィルタリングを使ってテーブルデータを絞り込む機能があり、テキストのみならず数字に対しては以上以下といった条件指定ができる。

まだまだまだある。カラムはドラッグで移動させることができる。スキンに対応し、Vista風や中華風といったテーマが付属している。セル間における計算結果を表示する、イベント処理を感知する、メニューをつける、マウスオーバーでハイライトする、行の追加や削除処理にも対応するなどなど…とにかく多機能すぎて書ききれないほどだ。ああ、そうそう。左側のカラムを固定表示にすることもできるのだった。IDや会社名を固定に、横に長いデータをみる場合に絶賛の機能だ。

【EC-CUBE】ギフト・熨斗対応オプション追加のカスタマイズ

概要

  • ギフト包装の種類は、管理画面>基本情報管理>マスタデータ管理で変更可能にする。
  • ギフト包装が有料の場合にも対応する。ただし、有料ギフト包装の金額はポイント対象外。
  • ギフト包装の金額は、管理画面>基本情報管理>マスタデータ管理で変可能にする。
  • MYページの購入履歴画面や注文完了メール内に、選択したギフト包装の種類と金額を載せる。
  • ロジックの変更はあるが、それは全部継承で対応する方針で親のクラスには手を入れない。

データベースの変更と追加

DBは、mtb_*がマスタ系のデータとなっており、mtb_*の名称のものは、管理画面>システム設定>マスタデータ管理で変更できるが、mtb_pref、mtb_zip、mtb_constants はマスタ管理からはずされている。(それについての記載は、LC_Page_Admin_Basis_Masterdata.php::getMasterDataNames() にある。)

ギフト包装の種類のマスタテーブルを作る

DBへmtb_giftテーブルを追加し、
id smallint(6)  NOT NULL  default値:0
name text
rank smallint(6)  NOT NULL  default値:0
のフィールドを作り、プライマリーキーをidにする

下記SQL文でも作成できる。

CREATE TABLE `mtb_gift` (
  `id` smallint(6) NOT NULL default ‘0’,
  `name` text,
  `rank` smallint(6) NOT NULL default ‘0’,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

ギフト包装の税込金額を定数で設定する

DBのmtb_constantsテーブル最後尾にフィールドを1行追加し、
GIFT_PRICE 200 523 ギフト包装の税込価格
というように、値をセットする。

上記の場合、
1つ目のidが定数名。
2つ目のnameに入れるのが定数の値。今回の場合はギフト包装の税込金額を200円とした。
3番目のrankに入れるのが管理画面での表示順。今入っているレコードの最大+1だと一番下に表示される。
4番目のremarkに入れるのが管理画面でパラメータ入力欄の上に灰色で小さく出るパラメータの説明文

下記SQL文でも作成できる。

INSERT INTO `mtb_constants` values(‘GIFT_PRICE’, ‘200’, ‘523’, ‘ギフト包装の税込価格’);

次に、管理画面>システム設定>パラメータ設定へアクセスし、値は変えなくていいので、そのまま一度「この内容で登録する」ボタンをクリックする。

これによって、マスタテーブルから値を読み出して定数設定を行うPHPファイルにDBで変更した値がセットされ、DBの内容をキャッシュしているファイルが更新される。(=/data/cache/mtb_*.php)

ギフト包装の種類を入力。

先に作成したmtb_giftに管理画面からギフト包装の種類を登録していく。

管理画面>システム設定>マスタデータ管理で、先ほど作成したmtb_giftを選択し、ギフト包装の種類を順番に登録。(ID=0はギフトなしとして使うので、登録せず、1から登録すること。)

受注データ内に、ギフト情報をどのように格納するかを考える。

受注テーブル(dtb_order)や、一時的な受注テーブル(dtb_order_temp)で、text型のmemo1~memo10という汎用項目として使える列があり、memo1~4あたりは既に使ってるらしいので、memo09とmemo10を使ってギフト情報を格納する。(作業は後に)

memo09・・・ギフト包装の種類。0はギフト包装なし。
memo10・・・受注したときのギフト包装の価格。

ここまでで、ギフト包装の価格の変更も管理画面でのパラメータ設定でできるようになった。

お支払方法・お届け時間等の指定画面

購入フローのお支払方法・お届け時間等の指定画面でギフト選択のリストが表示されるようにする。

PCサイトのテンプレートの修正

/data/Smarty/templates/default/shopping/payment.tpl

に以下のコードを追加。(ver.2.3.2の場合L89あたりがよい。表示させたい位置でOK。)

<div class=”payarea02″>
<h3><img src=”<!–{$TPL_DIR}–>img/shopping/subtitle04.gif” width=”670″ height=”33″ alt=”ギフト包装と熨斗の指定” /></h3>
<p>ギフト包装をご希望の方は、選択してください。</p>
<div>
<!–{assign var=key value=”memo09″}–>
<span class=”attention”><!–{$arrErr[$key]}–></span>
<select name=”<!–{$key}–>” style=”<!–{$arrErr[$key]|sfGetErrorColor}–>”>
<option value=”0″ selected=”selected”>ギフトなし</option>
<!–{html_options options=$arrGift selected=$arrForm[$key].value}–>
</select>
</div>
</div>

ギフト包装と熨斗の指定用のタイトル画像も作ること。

モバイルサイトのテンプレートの修正

data/Smarty/templates/default/mobile/shopping/deliv_date.tpl

に以下のコードを追加。(ver.2.3.2の場合L41あたりがよい。表示させたい位置でOK。)

■ギフト包装と熨斗の指定<br />
<!–{assign var=key value=”memo09″}–>
<!–{if $arrErr[$key] != “”}–>
<font color=”red”><!–{$arrErr[$key]}–></font>
<!–{/if}–>
<select name=”<!–{$key}–>”>
<option value=”0″>ギフトなし</option>
<!–{html_options options=$arrGift selected=$arrForm[$key].value}–>
</select>

ショッピング用ページクラスの拡張

/data/class_extends/page_extends/shopping/LC_Page_Shopping_Payment_Ex.php

init()、lfInitParam()、lfSetOrderTempData()のコードを追加する。

L47(ver.2.3.2の場合)
    function init() {
        parent::init();
のあたりから、

    function init() {
        parent::init();
        $this->tpl_title = “お支払方法・お届け時間・ギフト包装の指定”;
        $masterData = new SC_DB_MasterData_Ex();
        $this->arrGift = $masterData->getMasterData( “mtb_gift”,
                                array( “id”, “name”, “rank” ) );
    }

    function lfInitParam() {
        parent::lfInitParam();
        $this->objFormParam->addParam( “ギフト・のし”, “memo09”, INT_LEN, “n”, array( “MAX_LENGTH_CHECK”, “NUM_CHECK”) );
       
    }

    //一時受注テーブルからの情報を格納する
    function lfSetOrderTempData($uniqid) {

        $objQuery = new SC_Query();
        $col = “payment_id, use_point, deliv_time_id, message, point_check, deliv_date, memo09”;
        $from = “dtb_order_temp”;
        $where = “order_temp_id = ?”;
        $arrRet = $objQuery->select($col, $from, $where, array($uniqid));
        // DB値の取得
        $this->objFormParam->setParam($arrRet[0]);
        return $this->objFormParam;
    }

とコードを追加。

ご入力内容の確認画面

注文内容の欄に、前の画面で選択したギフト包装の種類と価格を含めるようにし、ギフトなしの場合はこの行自体を表示させないようにする。

PCサイトのテンプレートの修正

/data/Smarty/templates/default/shopping/confirm.tpl

L103あたりから(手数料の下へ:表示させたい場所へ入れてOK)(ver.2.3.2の場合)

<!–{if $arrData.memo09 gt 0}–>
        <tr>
          <th colspan=”4″ class=”resulttd”>ギフト包装 : <!–{$arrGift[$arrData.memo09]}–></th>
          <td class=”pricetd”><!–{$smarty.const.GIFT_PRICE|number_format}–>円</td>
        </tr>
<!–{/if}–>

モバイルサイトのテンプレートの修正

/data/Smarty/templates/default/mobile/shopping/confirm.tpl

L49あたりから(配送先の下へ:表示させたい場所へ入れてOK)(ver.2.3.2の場合)

<!–{if $arrData.memo09 gt 0}–>
■ギフト包装(<!–{$arrGift[$arrData.memo09]}–>):<!–{$smarty.const.GIFT_PRICE|number_format}–><br><!–{/if}–>

<br>

L84あたりにもフォーム用のコードを1行追加。

<input type=”hidden” name=”memo09″ value=”<!–{$arrData.memo09}–>”>

ページクラスの拡張

/data/class_extends/page_extends/admin/order/LC_Page_Shopping_Confirm_Ex.php

init()以下へコードを追加。L48あたりから。

    function init() {
        parent::init();
        $masterData = new SC_DB_MasterData_Ex();
        $this->arrGift = $masterData->getMasterData( “mtb_gift”,
                                array( “id”, “name”, “rank” ) );
    }

会計ロジックの拡張

/data/class_extends/helper_extends/SC_Helper_DB_Ex.php

L36からの
class SC_Helper_DB_Ex extends SC_Helper_DB {
(この間にコードを追加)

    /**
     * 集計情報を元に最終計算を行う.
     *
     * @param array $arrData 各種情報
     * @param LC_Page $objPage LC_Page インスタンス
     * @param SC_CartSession $objCartSess SC_CartSession インスタンス
     * @param array $arrInfo 店舗情報の配列
     * @param SC_Customer $objCustomer SC_Customer インスタンス
     * @return array 最終計算後の配列
     */
    function sfTotalConfirm($arrData, &$objPage, &$objCartSess, $arrInfo, $objCustomer = “”) {
        $arrData = parent::sfTotalConfirm($arrData, &$objPage, &$objCartSess, $arrInfo, $objCustomer = “”);
       
        // ギフト包装の計算。0はギフト包装なしのこと。
        if ( intval( $arrData[“memo09”] ) > 0 ) {
            $arrData[‘payment_total’] += GIFT_PRICE;
            $arrData[‘memo10’] = GIFT_PRICE;
        } else {
            $arrData[‘memo10’] = 0;
        }
       
        return $arrData;
    }

購入履歴画面

PCサイトのテンプレートの修正

/data/Smarty/templates/default/mypage/history.tpl

L88あたり(手数料の下あたり:表示させたい場所へ入れてOK)(ver.2.3.2の場合)

<!–{if $arrDisp.memo09 != “” && $arrDisp.memo09 gt 0}–>
      <tr>
        <th colspan=”4″ class=”resulttd”>ギフト包装 : <!–{$arrGift[$arrDisp.memo09]}–></th>
        <td class=”pricetd”><!–{$arrDisp.memo10|escape|number_format}–>円</td>
      </tr>
<!–{/if}–>

モバイルサイトのテンプレートの修正

/data/Smarty/templates/default/mobile/mypage/history_detail.tpl

L55あたり(ご注文内容の下あたり:表示させたい場所へ入れてOK)(ver.2.3.2の場合)

<!–{if $arrDisp.memo09 != “” && $arrDisp.memo09 gt 0}–>
【ギフト包装】(<!–{$arrGift[$arrDisp.memo09]}–>):<!–{$arrDisp.memo10|escape|number_format}–>円<br>
<!–{/if}–>
<br>

ページクラスの拡張

PCページ用のクラス

/data/class_extends/page_extends/mypage/LC_Page_Mypage_History_Ex.php

init()、lfGetOrderData()コードの追加。

L46あたりから。(ver.2.3.2の場合)

    function init() {
        parent::init();
        $masterData = new SC_DB_MasterData_Ex();
        $this->arrGift = $masterData->getMasterData( “mtb_gift”,
                                array( “id”, “name”, “rank” ) );
    }

    //受注詳細データの取得
    function lfGetOrderData($order_id) {
        //受注番号が数字であれば
        if(SC_Utils_Ex::sfIsInt($order_id)) {
            // DBから受注情報を読み込む
            $objQuery = new SC_Query();
            $col = “order_id, create_date, payment_id, subtotal, tax, use_point, add_point, discount, “;
            $col .= “deliv_fee, charge, payment_total, deliv_name01, deliv_name02, deliv_kana01, deliv_kana02, “;
            $col .= “deliv_zip01, deliv_zip02, deliv_pref, deliv_addr01, deliv_addr02, deliv_tel01, deliv_tel02, deliv_tel03, deliv_time_id, deliv_date, memo09, memo10 “;
            $from = “dtb_order”;
            $where = “order_id = ?”;
            $arrRet = $objQuery->select($col, $from, $where, array($order_id));
            $arrOrder = $arrRet[0];
            // 受注詳細データの取得
            $arrRet = $this->lfGetOrderDetail($order_id);
            $arrOrderDetail = SC_Utils_Ex::sfSwapArray($arrRet);
            $arrData = array_merge($arrOrder, $arrOrderDetail);
        }
        return $arrData;
    }

モバイルサイト用にもおなじように拡張。

/data/class_extends/page_extends/mypage/LC_Page_Mypage_HistoryDetail_Ex.php

L50あたりから。 ※モバイル用のinitであることに注意。その上にPC用のinitがある!

    function mobileInit() {
        parent::mobileInit();
        $masterData = new SC_DB_MasterData_Ex();
        $this->arrGift = $masterData->getMasterData( “mtb_gift”,
                                array( “id”, “name”, “rank” ) );
    }

    //受注詳細データの取得
    function lfGetOrderData($order_id) {
        //受注番号が数字であれば
        if(SC_Utils_Ex::sfIsInt($order_id)) {
            // DBから受注情報を読み込む
            $objQuery = new SC_Query();
            $col = “order_id, create_date, payment_id, subtotal, tax, use_point, add_point, discount, “;
            $col .= “deliv_fee, charge, payment_total, deliv_name01, deliv_name02, deliv_kana01, deliv_kana02, “;
            $col .= “deliv_zip01, deliv_zip02, deliv_pref, deliv_addr01, deliv_addr02, deliv_tel01, deliv_tel02, deliv_tel03, deliv_time_id, deliv_date, memo09, memo10 “;
            $from = “dtb_order”;
            $where = “order_id = ?”;
            $arrRet = $objQuery->select($col, $from, $where, array($order_id));
            $arrOrder = $arrRet[0];
            // 受注詳細データの取得
            $arrRet = $this->lfGetOrderDetail($order_id);
            $arrOrderDetail = SC_Utils_Ex::sfSwapArray($arrRet);
            $arrData = array_merge($arrOrder, $arrOrderDetail);
        }
        return $arrData;
    }

受注完了メール

受注完了メールにも選択したギフト包装の種類と価格を載せる。

———————————————————–

小 計 ¥ 3,021 (うち消費税 ¥144)

値引き ¥ 1,195

送 料 ¥ 1,000

手数料 ¥ 300

ギフト包装:包装+リボン ¥ 200

===============================================================

合 計 ¥ 3,703

===============================================================

PCサイト用受注完了メールテンプレートの修正

/data/Smarty/templates/default/mail_templates/order_mail.tpl

L70あたり。

ギフト包装:<!–{$arrOrder.gift_type}–> ¥ <!–{$arrOrder.gift_price|number_format|default:0}–>

モバイルサイト用受注完了メールテンプレートの修正

/data/Smarty/templates/default/mobile/mail_templates/order_mail.tpl

L54(一番最後)に。

ギフト包装:<!–{$arrOrder.gift_type}–> ¥ <!–{$arrOrder.gift_price|number_format|default:0}–>

受注完了メール送信ロジックの拡張

/data/class_extends/helper_extends/SC_Helper_Mail_EX.php

class SC_Helper_Mail_Ex extends SC_Helper_Mail {
(この間にコードを追加。)
}

SC_Helper_Mail.phpのCLASSからソースをコピーしてきてSC_Helper_Mail_EX.php内で編集している。

    function SC_Helper_Mail_Ex() {
        parent::SC_Helper_Mail();
        $masterData = new SC_DB_MasterData_Ex();
        $this->arrGift = $masterData->getMasterData( “mtb_gift”,
                                array( “id”, “name”, “rank” ) );
    }

 

    /* 受注完了メール送信 */
    function sfSendOrderMail($order_id, $template_id, $subject = “”, $header = “”, $footer = “”, $send = true) {

        $objPage = new LC_Page();
        $objSiteInfo = new SC_SiteInfo();
        $arrInfo = $objSiteInfo->data;
        $objPage->arrInfo = $arrInfo;

        $objQuery = new SC_Query();

        if($subject == “” && $header == “” && $footer == “”) {
            // メールテンプレート情報の取得
            $where = “template_id = ?”;
            $arrRet = $objQuery->select(“subject, header, footer”, “dtb_mailtemplate”, $where, array(‘1’));
            $objPage->tpl_header = $arrRet[0][‘header’];
            $objPage->tpl_footer = $arrRet[0][‘footer’];
            $tmp_subject = $arrRet[0][‘subject’];
        } else {
            $objPage->tpl_header = $header;
            $objPage->tpl_footer = $footer;
            $tmp_subject = $subject;
        }

        // 受注情報の取得
        $where = “order_id = ?”;
        $arrRet = $objQuery->select(“*”, “dtb_order”, $where, array($order_id));
        $arrOrder = $arrRet[0];
        $arrOrderDetail = $objQuery->select(“*”, “dtb_order_detail”, $where, array($order_id));

        $objPage->Message_tmp = $arrOrder[‘message’];

        // 顧客情報の取得
        $customer_id = $arrOrder[‘customer_id’];
        $arrRet = $objQuery->select(“point”, “dtb_customer”, “customer_id = ?”, array($customer_id));
        $arrCustomer = isset($arrRet[0]) ? $arrRet[0] : “”;

        $objPage->arrCustomer = $arrCustomer;
        $objPage->arrOrder = $arrOrder;

        //その他決済情報
        if($arrOrder[‘memo02’] != “”) {
            $arrOther = unserialize($arrOrder[‘memo02’]);

            foreach($arrOther as $other_key => $other_val){
                if(SC_Utils_Ex::sfTrim($other_val[“value”]) == “”){
                    $arrOther[$other_key][“value”] = “”;
                }
            }

            $objPage->arrOther = $arrOther;
        }

        // 都道府県変換
        $objPage->arrOrder[‘deliv_pref’] = $this->arrPref[$objPage->arrOrder[‘deliv_pref’]];

        // ギフト包装変換
        $objPage->arrOrder[‘gift_type’] = $this->arrGift[$arrOrder[‘memo09’]];
        $objPage->arrOrder[‘gift_price’] = $arrOrder[‘memo10’];

        $objPage->arrOrderDetail = $arrOrderDetail;

        $objCustomer = new SC_Customer();
        $objPage->tpl_user_point = $objCustomer->getValue(‘point’);

        $objMailView = new SC_SiteView();
        // メール本文の取得
        $objMailView->assignobj($objPage);
        $body = $objMailView->fetch($this->arrMAILTPLPATH[$template_id]);

        // メール送信処理
        $objSendMail = new SC_SendMail_Ex();
        $bcc = $arrInfo[‘email01’];
        $from = $arrInfo[‘email03’];
        $error = $arrInfo[‘email04’];

        $tosubject = $this->sfMakeSubject($objQuery, $objMailView,
                                             $objPage, $tmp_subject);

        $objSendMail->setItem(”, $tosubject, $body, $from, $arrInfo[‘shop_name’], $from, $error, $error, $bcc);
        $objSendMail->setTo($arrOrder[“order_email”], $arrOrder[“order_name01″] . ” “. $arrOrder[“order_name02″] .” 様”);
        // 送信フラグ:trueの場合は、送信する。
        if($send) {
            if ($objSendMail->sendMail()) {
                $this->sfSaveMailHistory($order_id, $template_id, $tosubject, $body);
            }
        }

        return $objSendMail;
    }

    // テンプレートを使用したメールの送信
    function sfSendTplMail($to, $subject, $tplpath, &$objPage) {
        $objMailView = new SC_SiteView();
        $objSiteInfo = new SC_SiteInfo();
        $arrInfo = $objSiteInfo->data;
        // メール本文の取得
        $objPage->tpl_shopname=$arrInfo[‘shop_name’];
        $objPage->tpl_infoemail = $arrInfo[‘email02’];
        $objMailView->assignobj($objPage);
        $body = $objMailView->fetch($tplpath);
        // メール送信処理
        $objSendMail = new SC_SendMail_Ex();
        $to = mb_encode_mimeheader($to);
        $bcc = $arrInfo[‘email01’];
        $from = $arrInfo[‘email03’];
        $error = $arrInfo[‘email04’];
        $objSendMail->setItem($to, $subject, $body, $from, $arrInfo[‘shop_name’], $from, $error, $error, $bcc);
        $objSendMail->sendMail();
    }

    // 通常のメール送信
    function sfSendMail($to, $subject, $body) {
        $objSiteInfo = new SC_SiteInfo();
        $arrInfo = $objSiteInfo->data;
        // メール送信処理
        $objSendMail = new SC_SendMail_Ex();
        $bcc = $arrInfo[‘email01’];
        $from = $arrInfo[‘email03’];
        $error = $arrInfo[‘email04’];
        $objSendMail->setItem($to, $subject, $body, $from, $arrInfo[‘shop_name’], $from, $error, $error, $bcc);
        $objSendMail->sendMail();
    }

    //件名にテンプレートを用いる
    function sfMakeSubject(&$objQuery, &$objMailView, &$objPage, $subject){

        $arrInfo = $objQuery->select(“*”,”dtb_baseinfo”);
        $arrInfo = $arrInfo[0];
        $objPage->tpl_shopname=$arrInfo[‘shop_name’];
        $objPage->tpl_infoemail=$subject;
        $objMailView->assignobj($objPage);
        $mailtitle = $objMailView->fetch(‘mail_templates/mail_title.tpl’);
        $ret = $mailtitle.$subject;
        return $ret;
    }

    // メール配信履歴への登録
    function sfSaveMailHistory($order_id, $template_id, $subject, $body) {
        $sqlval[‘subject’] = $subject;
        $sqlval[‘order_id’] = $order_id;
        $sqlval[‘template_id’] = $template_id;
        $sqlval[‘send_date’] = “Now()”;
        if (!isset($_SESSION[‘member_id’])) $_SESSION[‘member_id’] = “”;
        if($_SESSION[‘member_id’] != “”) {
            $sqlval[‘creator_id’] = $_SESSION[‘member_id’];
        } else {
            $sqlval[‘creator_id’] = ‘0’;
        }
        $sqlval[‘mail_body’] = $body;

        $objQuery = new SC_Query();
        $objQuery->insert(“dtb_mail_history”, $sqlval);
    }

管理側受注管理

管理画面>受注管理>受注管理>受注履歴編集 で、ギフト包装の情報を見たり、変更できたりできるようにする。

有料に設定したid=1以上のギフト包装から、ギフトなしに変更(その逆も)して「計算結果の確認」や「この内容で変更する」を押したときに金額が変わることにも対応する。

管理画面>受注管理>ステータス管理 で受注番号を選択して出るポップアップのほうも対応する。

テンプレートの修正

※以下の2つは、管理画面用のテンプレートなので、カスタムテンプレートを使用している場合でも、defaultのテンプレートセットに変更を加えなければ、反映されないことに注意!

/data/Smarty/templates/default/admin/order/edit.tpl

L347あたりから。(手数料の下へ:表示させたい場所へ入れてOK)(ver.2.3.2の場合)

<tr bgcolor=”#ffffff” class=”fs12n”>
<td colspan=”5″ align=”right”>ギフト包装 : 
<!–{assign var=key value=”memo09″}–>
<span class=”red12″><!–{$arrErr[$key]}–></span>
<select name=”<!–{$key}–>” style=”<!–{$arrErr[$key]|sfGetErrorColor}–>”> 
<option value=”0″>ギフトなし</option>
<!–{html_options options=$arrGift selected=$arrForm[$key].value}–>
</td>
<td align=”right”><!–{$arrForm.memo10.value|number_format}–> 円</td>
</tr>

/data/Smarty/templates/default/admin/order/disp.tpl

L258あたりから。(手数料の下へ:表示させたい場所へ入れてOK)(ver.2.3.2の場合)

<tr bgcolor=”#ffffff” class=”fs12n”>
<td colspan=”4″ align=”right”>ギフト包装 :
<!–{if $arrDisp.memo09 != “” && $arrDisp.memo09 gt 0}–>
    <!–{$arrGift[$arrDisp.memo09]}–>
<!–{else}–>
    ギフトなし
<!–{/if}–>
</td>
<td align=”right”><!–{$arrDisp.memo10|number_format}–> 円</td>
</tr>

ページクラスの拡張

/data/class_extends/page_extends/admin/order/LC_Page_Admin_Order_Edit_Ex.php

init()、lfInitParam()、lfCheek()のコードを追加。L48あたりから。

    function init() {
        parent::init();
        $masterData = new SC_DB_MasterData_Ex();
        $this->arrGift = $masterData->getMasterData( “mtb_gift”,
                                array( “id”, “name”, “rank” ) );
    }

    function lfInitParam() {
        parent::lfInitParam();
        $this->objFormParam->addParam(“ギフト・のし”, “memo09”, INT_LEN, “n”, array(“EXIST_CHECK”, “MAX_LENGTH_CHECK”, “NUM_CHECK”), ‘0’ );
        $this->objFormParam->addParam(“ギフト包装料金”, “memo10” );
    }

    /* 計算処理 */
    function lfCheek($arrInfo) {
        $arrErr = parent::lfCheek( $arrInfo );
        $arrVal = $this->objFormParam->getHashArray();
       
        // ギフト包装料金の計算。合計とお支払い合計を計算しなおしす。0はギフト包装なしのこと。
        if ( intval( $_POST[“memo09”] ) > 0 ) {
            // 合計
            $arrVal[‘total’] += GIFT_PRICE;
            // お支払い合計
            $arrVal[‘payment_total’] = $arrVal[‘total’] – ($arrVal[‘use_point’] * POINT_VALUE);
            $arrVal[‘memo10’] = GIFT_PRICE;
        } else {
            $arrVal[‘memo10’] = 0;
        }
       
       
        $this->objFormParam->setParam( $arrVal );
       
        return $arrErr;
       
    }

以上。

修正・アップロードするファイル一覧

  1.  /data/Smarty/templates/default/shopping/payment.tpl
  2.  /data/Smarty/templates/default/shopping/confirm.tpl
  3.  /data/Smarty/templates/default/mypage/history.tpl
  4.  /data/Smarty/templates/default/mail_templates/order_mail.tpl

 

  1.  /data/Smarty/templates/default/admin/order/edit.tpl
  2.  /data/Smarty/templates/default/admin/order/disp.tpl

 

  1. /data/Smarty/templates/default/mobile/shopping/deliv_date.tpl
  2.  /data/Smarty/templates/default/mobile/shopping/confirm.tpl
  3.  /data/Smarty/templates/default/mobile/mypage/history_detail.tpl
  4.  /data/Smarty/templates/default/mobile/mail_templates/order_mail.tpl

 

  1. /data/class_extends/page_extends/shopping/LC_Page_Shopping_Payment_Ex.php /data/class_extends/page_extends/shopping/LC_Page_Shopping_Confirm_Ex.php
  2.  /data/class_extends/page_extends/mypage/LC_Page_Mypage_History_Ex.php
  3.  /data/class_extends/page_extends/mypage/LC_Page_Mypage_HistoryDetail_Ex.php
  4.  /data/class_extends/page_extends/admin/order/LC_Page_Admin_Order_Edit_Ex.php

 

  1. /data/class_extends/helper_extends/SC_Helper_DB_Ex.php
  2.  /data/class_extends/helper_extends/SC_Helper_Mail_EX.php

参考:http://d.hatena.ne.jp/yuhei_kagaya/20080822