Blog

【ECCUBE2.13】支払い方法に説明欄の追加と表示

2015/09/28

ECCUBE2.13 ECCUBE2.11~ 固定ページ

ネットプロテクションズなどは支払い方法に説明を表示しなくてはならない場合があります。

ECCUBEでは説明入力欄と表示が無いため、追加のカスタムをしました。

まず、dtb_paymentにcommentを、mtb_constantsにUSE_PAYMENT_COMMENTを追加します。

SQLに下記を入力して実行します。

INSERT INTO `mtb_constants` (`id`, `rank`, `name`, `remarks`) VALUES ('USE_PAYMENT_COMMENT', (SELECT max(rank)+1 FROM mtb_constants AS mtbCNST), 'true', '支払い方法説明欄使用');
ALTER TABLE `dtb_payment` ADD `comment` text;

次に各テンプレート、classファイルの編集です。

SC_Helper_Payment_Ex.phpに下記を追加

    /**
     * 支払方法一覧の取得.
     *
     * @param  boolean $has_deleted 削除された支払方法も含む場合 true; 初期値 false
     * @return array
     */
    public function getList($has_deleted = false)
    {
        $objQuery =& SC_Query_Ex::getSingletonInstance();
        $col = 'payment_id, payment_method, payment_image, charge, rule_max, upper_rule, note, fix, charge_flg';
        if(USE_PAYMENT_COMMENT) $col .= ', comment';
        $where = '';
        if (!$has_deleted) {
            $where .= 'del_flg = 0';
        }
        $table = 'dtb_payment';
        $objQuery->setOrder('rank DESC');
        $arrRet = $objQuery->select($col, $table, $where);

        return $arrRet;
    }

LC_Page_Admin_Basis_PaymentInput_Ex.phpに下記を追加

/**
     * Page のアクション.
     *
     * @return void
     */
    public function action()
    {
        $objPayment = new SC_Helper_Payment_Ex();
        $objFormParam = new SC_FormParam_Ex();
        $mode = $this->getMode();
        $this->lfInitParam($mode, $objFormParam);

        // ファイル管理クラス
        $this->objUpFile = new SC_UploadFile_Ex(IMAGE_TEMP_REALDIR, IMAGE_SAVE_REALDIR);
        // ファイル情報の初期化
        $this->objUpFile = $this->lfInitFile();
        // Hiddenからのデータを引き継ぐ
        $this->objUpFile->setHiddenFileList($_POST);

        switch ($mode) {
            case 'edit':
                $objFormParam->setParam($_REQUEST);
                $objFormParam->convParam();
                $post = $objFormParam->getHashArray();
                $this->arrErr = $this->lfCheckError($post, $objFormParam, $objPayment);
                $this->charge_flg = $post['charge_flg'];
                if (count($this->arrErr) == 0) {
                    $this->lfRegistData($objFormParam, $objPayment, $_SESSION['member_id'], $post['payment_id']);
                    $this->objUpFile->moveTempFile();
                    $this->tpl_onload = "location.href = './payment.php'; return;";
                }
                $this->tpl_payment_id = $post['payment_id'];
                break;
            // 画像のアップロード
            case 'upload_image':
                $objFormParam->setParam($_REQUEST);
                $objFormParam->convParam();
                $post = $objFormParam->getHashArray();
                // ファイル存在チェック
                $this->arrErr = $this->objUpFile->checkExists($post['image_key']);
                // 画像保存処理
                $this->arrErr[$post['image_key']] = $this->objUpFile->makeTempFile($post['image_key']);
                $this->tpl_payment_id = $post['payment_id'];
                break;
            // 画像の削除
            case 'delete_image':
                $objFormParam->setParam($_REQUEST);
                $objFormParam->convParam();
                $this->arrErr = $objFormParam->checkError();
                $post = $objFormParam->getHashArray();
                if (count($this->arrErr) == 0) {
                    $this->objUpFile->deleteFile($post['image_key']);
                }
                $this->tpl_payment_id = $post['payment_id'];
                break;

            case 'pre_edit':
                $objFormParam->setParam($_REQUEST);
                $objFormParam->convParam();
                $this->arrErr = $objFormParam->checkError();
                $post = $objFormParam->getHashArray();
                if (count($this->arrErr) == 0) {
                    $arrRet = $objPayment->get($post['payment_id']);

                    $objFormParam->addParam('支払方法', 'payment_method', STEXT_LEN, 'KVa', array('EXIST_CHECK', 'MAX_LENGTH_CHECK'));
                    $objFormParam->addParam('手数料', 'charge', PRICE_LEN, 'n', array('EXIST_CHECK', 'NUM_CHECK', 'MAX_LENGTH_CHECK'));
                    $objFormParam->addParam('利用条件(~円以上)', 'rule_max', PRICE_LEN, 'n', array('NUM_CHECK', 'MAX_LENGTH_CHECK'));
                    $objFormParam->addParam('利用条件(~円以下)', 'upper_rule', PRICE_LEN, 'n', array('NUM_CHECK', 'MAX_LENGTH_CHECK'));
                    $objFormParam->addParam('固定', 'fix');
                    /*## 支払方法説明 ADD BEGIN ##*/
                    if(constant("USE_PAYMENT_COMMENT") === true)
                        $objFormParam->addParam("説明(タグ可)", "comment", LLTEXT_LEN, "KVa", array("MAX_LENGTH_CHECK"));
                    /*## 支払方法説明 ADD END ##*/
                    $objFormParam->setParam($arrRet);

                    $this->charge_flg = $arrRet['charge_flg'];
                    $this->objUpFile->setDBFileList($arrRet);
                }
                $this->tpl_payment_id = $post['payment_id'];
                break;
            default:
                break;
        }

        $this->arrForm = $objFormParam->getFormParamList();

        // FORM表示用配列を渡す。
        $this->arrFile = $this->objUpFile->getFormFileList(IMAGE_TEMP_URLPATH, IMAGE_SAVE_URLPATH);
        // HIDDEN用に配列を渡す。
        $this->arrHidden = array_merge((array) $this->arrHidden, (array) $this->objUpFile->getHiddenFileList());
    }

    /* パラメーター情報の初期化 */
    public function lfInitParam($mode, &$objFormParam)
    {
        parent::lfInitParam($mode, $objFormParam);
        
        /*## 支払方法説明 ADD BEGIN ##*/
        if($mode != 'pre_edit') {
            if(constant("USE_PAYMENT_COMMENT") === true)
                $objFormParam->addParam("説明(タグ可)", "comment", LLTEXT_LEN, "KVa", array("MAX_LENGTH_CHECK"));
        }
        /*## 支払方法説明 ADD END ##*/
    }

admin/basis/payment_input.tplに下記を追加

<tr>
    <th>ロゴ画像</th>
    <td>
        <!--{assign var=key value="payment_image"}-->
        <span class="attention"><!--{$arrErr[$key]}--></span>
        <!--{if $arrFile[$key].filepath != ""}-->
        <img src="<!--{$arrFile[$key].filepath}-->" alt="<!--{$arrForm.name|h}-->"> <br /><a href="" onclick="eccube.setModeAndSubmit('delete_image', 'image_key', '<!--{$key}-->'); return false;">[画像の取り消し]</a><br />
        <!--{/if}-->
        <input type="file" name="<!--{$key}-->" style="<!--{$arrErr[$key]|sfGetErrorColor}-->" />
        <a class="btn-normal" href="javascript:;" name="btn" onclick="eccube.setModeAndSubmit('upload_image', 'image_key', '<!--{$key}-->'); return false;">アップロード</a>
    </td>
</tr>
//ここから追加
<!--{if $smarty.const.USE_PAYMENT_COMMENT}-->
<tr>
    <th>説明(タグ可)</th>
    <td>
        <!--{assign var=key value="comment"}-->
        <span class="attention"><!--{$arrErr[$key]}--></span>
        <textarea name="<!--{$key}-->" rows="4" cols="80"><!--{$arrForm[$key].value}--></textarea>
    </td>
</tr>
<!--{/if}-->
//ここまで追加

default/shopping/payment.tplに下記を追加

<table summary="お支払方法選択" id="payment">
    <col width="20%" />
    <col width="40%" />
    <col width="40%" />
    <thead>
        <tr>
            <th class="alignC">選択</th>
            <th class="alignC" colspan="2" id="payment_method">お支払方法</th>
        </tr>
    </thead>
    <tbody>
        <!--{section name=cnt loop=$arrPayment}-->
            <tr>
            <td class="alignC"><input type="radio" id="pay_<!--{$smarty.section.cnt.iteration}-->" name="<!--{$key}-->"  value="<!--{$arrPayment[cnt].payment_id}-->" style="<!--{$arrErr[$key]|sfGetErrorColor}-->" <!--{$arrPayment[cnt].payment_id|sfGetChecked:$arrForm[$key].value}--> /></td>
            <td>
<label for="pay_<!--{$smarty.section.cnt.iteration}-->"><!--{$arrPayment[cnt].payment_method|h}--><!--{if $arrPayment[cnt].note != ""}--><!--{/if}--></label>
            </td>
            <td>
              <!--{if $img_show}-->
<!--{if $arrPayment[cnt].payment_image != ""}-->
  <img src="<!--{$smarty.const.IMAGE_SAVE_URLPATH}--><!--{$arrPayment[cnt].payment_image}-->" />
<!--{/if}-->
              <!--{/if}-->
              <div><!--{$arrPayment[cnt].comment}--></div> ←追加
            </td>
            </tr>
        <!--{/section}-->
    </tbody>
</table>

管理画面で説明欄を表示するため、パラメータ設定を更新します。

これで、管理画面とショッピングの支払い方法欄に表示されます。

管理画面

支払方法選択画面



カテゴリー

月間アーカイブ

MORE

ミュージシャンズ・プラザ

神社仏閣ホームーページ制作

ホームページ制作問合せ