質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.03%

【EC-CUBE4】ポイント付与率を1%未満にしたい

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 378

dreamfactory

score 16

いつも大変お世話になっております。

表題の件についてですが、EC-CUBE4において、ポイント付与率を200円お買い上げごとに1Pというようにしたく、

単純に0.5%と打ったところエラーになってしまいました。

そこで色々検索してみたところ、4系ではないですが

ポイント付与率 0.5 % 200円毎に1ポイント付与しようとしています。

ポイント設定画面の桁数追加方法

こちらのお二人が私がしたいことの記事を挙げてくれていました。

しかしながら、二方とも挙げている、

EC-CUBEでポイント付与率を商品価格の1%未満(0.5%とか)にしたい

こちらのサイトは閉鎖されたようで残念ながら閲覧不可でした。

なので、小数点以下の入力を可能にするにはどのファイルを触れば良いかだけでも

ご教授いただければと思い投稿しました。

皆様どうぞよろしくお願いいたします。


教えていただいた方法でサイトを見に行くことができたのですが

2系での修正方法が書いてあり、修正箇所のphpが4系だとどこに当たるのかが

ファイルの場所を見つけることがまだできていません。

引き続き場所がわかる方がいらっしゃいましたら回答をお願いしたいです。

EC-CUBEでポイント付与率を商品価格の1%未満(0.5%とか)にしたい
のサイトでは

基本情報管理の「ポイント設定」のPHPを修正で
/data/class_extends/page_extends/admin/basis/の中のLC_Page_Admin_Basis_Point_Ex.phpを

function lfInitParam() {

    $this->objFormParam->addParam("ポイント付与率", "point_rate", PERCENTAGE_LEN, "n", array("EXIST_CHECK", "MAX_LENGTH_CHECK", "NUM_CHECK"));

    $this->objFormParam->addParam("会員登録時付与ポイント", "welcome_point", INT_LEN, "n", array("EXIST_CHECK", "MAX_LENGTH_CHECK", "NUM_CHECK"));

}



↓ 赤文字部分を削除する。



function lfInitParam() {

    $this->objFormParam->addParam("ポイント付与率", "point_rate", PERCENTAGE_LEN, "n", array("EXIST_CHECK", "MAX_LENGTH_CHECK"));

    $this->objFormParam->addParam("会員登録時付与ポイント", "welcome_point", INT_LEN, "n", array("EXIST_CHECK", "MAX_LENGTH_CHECK", "NUM_CHECK"));

}

商品登録の部分のPHPの修正で

function lfErrorCheck($array) {  

    $objErr = new SC_CheckError($array);  

    $objErr->doFunc(array("商品名", "name", STEXT_LEN), array("EXIST_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK"));  

    $objErr->doFunc(array("一覧コメント", "main_list_comment", MTEXT_LEN), array("SPTAB_CHECK", "MAX_LENGTH_CHECK"));  

    $objErr->doFunc(array("詳細コメント", "main_comment", LLTEXT_LEN), array("EXIST_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK"));  

    $objErr->doFunc(array("詳細コメント", "main_comment", $this->arrAllowedTag), array("HTML_TAG_CHECK"));  

    $objErr->doFunc(array("ポイント付与率", "point_rate", PERCENTAGE_LEN), array("EXIST_CHECK", "NUM_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK"));  

    $objErr->doFunc(array("商品送料", "deliv_fee", PRICE_LEN), array("NUM_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK"));  



    ~ 省略 ~



}

上記コードのようにポイント付与率部分の"NUM_CHECK"を消し、数値チェックしないようにして、小数点を入れてもエラーが起きないようにしているみたいなのですが

そもそも2系と4系のポイント設定は

2系のポイント管理画面
![2系のポイント管理画面

4系のポイント設定画面
4系のポイント設定画面

というように大分異なるようです。

4系で色々見てみたところポイント関係のphpとして

×××/src/Eccube/Entryに

PointRateTrait.php

<?php

/*
 * This file is part of EC-CUBE
 *
 * Copyright(c) LOCKON CO.,LTD. All Rights Reserved.
 *
 * http://www.lockon.co.jp/
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Eccube\Entity;

use Doctrine\ORM\Mapping as ORM;

trait PointRateTrait
{
    /**
     * @var string
     *
     * @ORM\Column(name="point_rate", type="decimal", precision=10, scale=0, options={"unsigned":true}, nullable=true)
     */
    private $point_rate;

    /**
     * Set pointRate
     *
     * @param string $pointRate
     *
     * @return OrderItem
     */
    public function setPointRate($pointRate)
    {
        $this->point_rate = $pointRate;

        return $this;
    }

    /**
     * Get pointRate
     *
     * @return string
     */
    public function getPointRate()
    {
        return $this->point_rate;
    }
}

PointTrait.php

<?php

/*
 * This file is part of EC-CUBE
 *
 * Copyright(c) LOCKON CO.,LTD. All Rights Reserved.
 *
 * http://www.lockon.co.jp/
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Eccube\Entity;

use Doctrine\ORM\Mapping as ORM;

trait PointTrait
{
    /**
     * @var string
     *
     * @ORM\Column(name="add_point", type="decimal", precision=12, scale=0, options={"unsigned":true,"default":0})
     */
    private $add_point = '0';

    /**
     * @var string
     *
     * @ORM\Column(name="use_point", type="decimal", precision=12, scale=0, options={"unsigned":true,"default":0})
     */
    private $use_point = '0';

    /**
     * Set addPoint
     *
     * @param string $addPoint
     *
     * @return Order
     */
    public function setAddPoint($addPoint)
    {
        $this->add_point = $addPoint;

        return $this;
    }

    /**
     * Get addPoint
     *
     * @return string
     */
    public function getAddPoint()
    {
        return $this->add_point;
    }

    /**
     * Set usePoint
     *
     * @param string $usePoint
     *
     * @return Order
     */
    public function setUsePoint($usePoint)
    {
        $this->use_point = $usePoint;

        return $this;
    }

    /**
     * Get usePoint
     *
     * @return string
     */
    public function getUsePoint()
    {
        return $this->use_point;
    }
}

この二つのファイルがあったのは分かりました。

でもこのファイルをどのようにいじればいいのかは分かりません・・・。

そして最終的にはポイント付与率を0.5にするというのがゴールです。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • xenbeat

    2019/07/26 05:10 編集

    本質問のゴールがあいまいですが、解決したなら質問を解決済みにしてください。
    https://teratail.com/help#resolve-question
    https://teratail.com/help/question-tips#questionTips4

    まだ解決でないなら、何がどう解決していないのか明記しましょう。このまま放置はNGです。

    キャンセル

  • dreamfactory

    2019/07/26 09:18

    気にかけていただきありがとうございます!
    まだ解決できていないので追記致しました。
    よろしくお願いいたします。

    キャンセル

  • xenbeat

    2019/07/26 09:46 編集

    > 2系での修正方法が書いてあり、修正箇所のphpが4系だとどこに当たるのかがファイルの場所を見つけることがまだできていません。

    そのような記載だと2系と4系の両者を深く知っている人しか答えられないですし、そもそも2系に対応する4系のファイルが見つかればこの質問は解決なんですか?
    ヘルプを参考にして、もう一度質問内容を整理されたほうが的確な回答を望めると思います。
    https://teratail.com/help/question-tips#questionTips3-3
    https://teratail.com/help/question-tips#questionTips3-4
    https://teratail.com/help/question-tips#questionTips3-5

    具体的にどこの何がどのようになればこの質問が解決するのか明記されることをおすすめします。
    どのソースコードか検討もつかないなら、デモもありますので具体的な画面(URL)や該当項目で説明すると良いでしょう。
    https://www.ec-cube.net/product/demo.php

    キャンセル

  • dreamfactory

    2019/07/26 10:46

    大変失礼いたしました(._.)
    勉強になります。見当違いだと教えていただけて助かります。

    キャンセル

回答 2

checkベストアンサー

0

ポイント付与率を0.5にするというのがゴールです

でしたら次の手順をお試しください。
ちなみに僕は主にSymfonyコンポーネントに関連する知識しかないので、EC-CUBE2系をまじえた回答は出来ませんがご容赦ください。

1.FormType( ShopMasterType )を修正

->add('basic_point_rate', NumberType::class, [
    'required' => false,
    'constraints' => [
        new Assert\Regex([
            'pattern' => "/^\d+$/u",
            'message' => 'form_error.numeric_only',
        ]),
        new Assert\Range([
            'min' => 1,
            'max' => 100,
        ]),
    ],
])


->add('basic_point_rate', NumberType::class, [
    'required' => false,
    'constraints' => [
        new Assert\Range([
            'min' => 0.1,
            'max' => 100,
        ]),
    ],
])

2.Entity( BaseInfo )を修正

/**
 * @var string
 *
 * @ORM\Column(name="basic_point_rate", type="decimal", precision=10, scale=0, options={"unsigned":true, "default":1}, nullable=true)
 */
private $basic_point_rate = '1';


/**
 * @var string
 *
 * @ORM\Column(name="basic_point_rate", type="decimal", precision=3, scale=1, options={"unsigned":true, "default":1.0}, nullable=true)
 */
private $basic_point_rate = '1.0';

3.スキーマ更新を実行

bin/console doctrine:schema:update --dump-sql --force

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/07/26 13:55 編集

    上記で1%未満を登録できるようになるとは思いますが、
    0.5で登録できるようになってもポイント機能が正しく動くかどうかはきちんとご自身で動作検証してくださいね。

    キャンセル

  • 2019/07/26 17:31

    ありがとうございます。
    http://doc4.ec-cube.net/customize_entity
    http://doc4.ec-cube.net/customize_formtype

    xenbeat様の回答を、上記のリンク先を参考にしながらなんとか実行することができたのですが

    管理画面で付与率を0.5にすると、エラーは出ないのですが1%になり、試しに0.4で打ってみたら0%になって返ってきました。四捨五入になっているようです。

    他にもなにか必要なのでしょうか。

    キャンセル

  • 2019/07/26 19:24 編集

    > 管理画面で付与率を0.5にすると、エラーは出ないのですが1%になり、試しに0.4で打ってみたら0%になって返ってきました。四捨五入になっているようです。

    スキーマが更新されてないだけかと思います。

    > 他にもなにか必要なのでしょうか。

    他にもなにか必要というか、回答の手順通りにスキーマ更新してくださいというところでしょうか。
    参考にされたリンク先のEntity拡張方法ですとTraitを使っているので、今回のように同名プロパティによる拡張は不可能でしょう。
    なので回答に記載した通り、Entityを直接上書きしてください。

    キャンセル

  • 2019/07/30 11:17

    遅くなって申し訳ないです。
    ssh接続するためには専用のソフトを入れないといけないみたいですね!本当に初心者過ぎてわかってなかったです。とりあえずteraterm入れてみました!
    スキーマ更新します!
    他の仕事で押しているものがあるため、時間がかかりそうなので先にBAつけさせていただきます。
    ありがとうございました(^^)

    キャンセル

0

閉鎖されたサイトを見るにはInternetArchiveの運営しているWaybackMachineが使えます。
http://web.archive.org/web/http://www.eccube-school.jp/products/detail51.html

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/07/25 09:17

    ご回答ありがとうございます。
    そんなサービスがあるとは知りませんでした!
    参考にさせていただきます!

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.03%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる