ECcube3.0.14のポイント倍率を整数以下にしたい場合の処理(途中)
2022/11/15
ECcube3.0.14 でサイトを作成していて困ったこと。
それはポイントが整数倍率でしか設定できない。
100円/1P 以下に出来ない 1000円/1PとかはNGだった。
でも作りたいサイトでは3000円/1Pの設定にしたかったのでいくつか修正を試みた。
まだ途中段階ですが、備忘録として残しておく。
(2022.11.15追記、修正 最下部)
https://www.ec-cube.net/products/detail.php?product_id=1101
→変更 http://web.archive.org/web/20180112144617/http://www.eccube-school.jp/products/detail51.html
ポイントプラグイン
対応バージョン : 3.0系
3.0系 3.0.10|3.0.11|3.0.12|3.0.12-p1|3.0.13|3.0.14
インストールディレクトリ/app/Plugin/Point
①データベース内の初期設定数値変更
初期設定は「1」になっているのでその数値を変更
データ型 DECIMAL
長さ/値 10,9(10が前の桁数 9が後ろの桁数)
デフォルト値 ユーザー定義 下段にデフォルトで入れたい数値
あとは表示される内容の変更
ショッピングカート注文商品確認画面
現在の保有ポイントは「0 pt」です。
商品購入で加算されるポイントは「12pt」です。
ポイントは商品購入時に1pt=¥ 1として利用することができます。
インストールディレクトリ/app/Plugin/Point/Helper/PointCalculateHelper/PointCalculateHelper.php
216行目
* カート情報をもとに加算ポイントを返却する.
*
* かートの明細単位で計算を行う
* 商品ごとの付与率が設定されている場合は商品ごと付与率を利用する
* 商品ごとの付与率に0が設定されている場合は加算ポイントは付与しない
*
* @return int
*/
public function getAddPointByCart()
{
// カートエンティティチェック
if (empty($this->entities[‘Cart’])) {
$this->app[‘monolog’]->critical(‘cart not found.’);
throw new \LogicException(‘cart not found.’);
}
$this->addPoint = 0;
$basicRate = $this->pointInfo->getPlgBasicPointRate() / 3000;
商品紹介ページに表示されるポイント数計算箇所
インストールディレクトリ/app/Plugin/Point/Helper/PointCalculateHelper/PointCalculateHelper.php
342行目
// 商品規格の販売価格(税抜)に応じて最小値と最大値を返却.
$rate = array();
$rate[‘min’] = (integer)$this->getRoundValue($Product->getPrice02Min() * ($calculateRate / 3000)); ⇒割り算になっているのを掛け算で小数点へ変更
$rate[‘max’] = (integer)$this->getRoundValue($Product->getPrice02Max() * ($calculateRate / 3000)); ⇒割り算になっているのを掛け算で小数点へ変更
ポイント利用案内コメント
/app/Plugin/Point/Resource/template/default/Event/ShoppingConfirm/use_point_button.twig
内の文章変更
まだ修正途中なのでほかにも編集箇所があるかも。
2020.1.28追記
商品のうち1点だけ反映されない原因を探っていたところ商品ページ内の
個別ポイント欄に「0」とか数値を入れてしまっているとそちらを優先されるので
反映されなくなるみたい。
2022.11.15追加
商品画面にて取得できるポイントを表示するために
商品登録ページにて小数点以下のポイントを設定できるように変更した。
①データベーステーブル「dtb_baseinfo」にてpoint_rateを設定
数字を倍率(200円/1Pなら0.5) に変更と dtb_products_class のpoint_rate の型を decimal(10,0) からdecimal(10,1)に変更して、値を0.5にする
(10,0)←,の前が整数の桁数 ,の後ろが小数点以下の桁数
3000円/1P なので本当は「0.033334」が正解
②商品登録画面でポイント数の桁数判定をさせない
変更するファイル
インストールディレクト
リ/data/class/pages/admin/products/LC_Page_Admin_Products_Product.php
1 2 3 4 |
/* Your code... */ |
$objFormParam->addParam(‘ポイント付与率’, ‘point_rate’, PERCENTAGE_LEN, ‘n’, array(‘EXIST_CHECK’,★★ ‘NUM_CHECK’,★★ ‘SPTAB_CHECK’, ★★’MAX_LENGTH_CHECK’,★★ ‘ZERO_START’));
↓
$objFormParam->addParam(‘ポイント付与率’, ‘point_rate’, PERCENTAGE_LEN, ‘n’, array(‘EXIST_CHECK’, ‘SPTAB_CHECK’, ‘ZERO_START’));
赤字部分を削除
NUM_CHECK=数字チェック(小数点の「.」がはいるので文字列として判定させるため)
ポイント入力のフォームは、PHP側で数字かどうかのチェックが走っています。
つまり、「0.1」などは本当は数字なのですが、「.」を含むために数字として認識されません。
MAX_LENGTH_CHECK=最大文字数チェック(桁数を増やすため)
③
商品登録画面のポイント桁数入力制限を解除する
インストールディレクトリ/data/Smarty/templates_c/admin/%%2A^2AB^2AB93D92%%product.tpl.php
ポイント付与率の244行目くらい maxlength=”9″ へ変更