EC-CUBE3.0.10 同じ商品まとめて購入割引機能追加

同じ商品まとめて購入割引機能

/src/Eccube/Controller/ShoppingController.phpのindex confirm関数の// form作成の上に下記追加

        // 同じ商品5個まとめて購入、5%割引
        $discount = 0;
        foreach ($cartService->getCart()->getCartItems() as $CartItem) {
            if ($CartItem['quantity'] > 4) {
                $discount = $discount + (int)($CartItem['quantity'] * $CartItem['price'] * 0.05);
            }
        }
        if ($discount > 0) {
            $total = $Order->getTotalPrice() - $discount;
            $Order->setDiscount($discount);
            $Order->setTotal($total);
        }

        // form作成
        $builder = $app['eccube.service.shopping']->getShippingFormBuilder($Order);

カード決済の場合、Plugin直下のカードControllerを以上のように修正する必要あり

0

ロボット・ドローン部品お探しなら
ロボット翔・電子部品ストア

Laravel 5.1(5)MongoDB多重Eloquent Relationship実践

準備:テスト用コレクション情報

まず、テスト用のコレクション(例)を用意します。

概要

・Collection種別は、上位から病院コレクション(hospitals)→診療科別コレクション(categories)→病気コレクション(diseases)
・Relatonship種別は、1:Mタイプ、親collectionの場合hasMany、子コレクションの場合belongsToに指定する
・Relatonship紐づけは、_id、category_id、disease_idに指定する、他デフォルト利用の場合もある

コレクションの構造と内容

$hospitals = App\Hospital::all()
=> Illuminate\Database\Eloquent\Collection {#977
     all: [
       App\Hospital{#999
         _id: MongoDB\BSON\ObjectId {#976
           +"oid": "5a7d0901f1a5e421d37a12e2",
         },
         name: "hospi",
         created_at: "2018-01-16 02:01:03",
         updated_at: MongoDB\BSON\UTCDateTime {#975
           +"milliseconds": "1518231495000",
         },
       },
    ],
   }
$categories = App\Category::all()
=> Illuminate\Database\Eloquent\Collection {#977
     all: [
       App\Category {#999
         _id: MongoDB\BSON\ObjectId {#976
           +"oid": "5a7d0901f1a5e421d37daac2",
         },
         hospital_id: "5a7d0901f1a5e421d37a12e2",
         name: "Nerve",
         created_at: "2018-01-16 02:01:03",
         updated_at: MongoDB\BSON\UTCDateTime {#975
           +"milliseconds": "1518231495000",
         },
       },
    ],
   }
$diseases = App\Disease::all()
=> Illuminate\Database\Eloquent\Collection {#977
     all: [
       App\Disease{#999
         _id: MongoDB\BSON\ObjectId {#976
           +"oid": "5a7d0901f1a5e421d37d090d0",
         },
         category_id: "5a7d0901f1a5e421d37daac2",
         name: "Cerebral Bleeding",
         created_at: "2018-01-16 02:01:03",
         updated_at: MongoDB\BSON\UTCDateTime {#975
           +"milliseconds": "1518231495000",
         },
       },
    ],
   }

Model構築

以下ソースにコメント割愛とします。

Hospital Model

class Hospital extends Eloquent
{
    protected $collection = 'hospitals';
    protected $connection = 'mongodb';
    protected $fillable = ['name' , 'description'];
    public function categories() 
    {
        return $this->hasMany('App\Category', 'hospital_id', '_id');
    }
}

Category Model

class Category extends Eloquent
{
    protected $collection = 'categories';
    protected $connection = 'mongodb';
    protected $fillable = ['hospital_id' , 'name' , 'description'];
    public function hospital() 
    {
        return $this->belongsTo('App\Hospital','hospital_id', '_id');
    }
    public function diseases() 
    {
        return $this->hasMany('App\Disease','category_id', '_id');
    }
}

Disease Model

class Diease extends Eloquent
{
    protected $collection = 'diseases';
    protected $connection = 'mongodb';
    protected $fillable = ['categoy_id' , 'name' , 'description'];
    public function category() 
    {
        return $this->belongsTo('App\Category','category_id', '_id');
    }
}

Collection作成

hospitals Collection

class CreateHospitalsCollection extends Migration
{
    public function up()
    {
        Schema::create('hospitals', function (Blueprint $collection) {
            $collection->string('name');
            $collection->string('description');
            $collection->timestamps();

         });
    }
    public function down()
    {
        Schema::drop('hospitals');
    }

categories Collection

class CreateCategoriesCollection extends Migration
{
    public function up()
    {
        Schema::create('categories', function (Blueprint $collection) {
            $collection->string('hospital_id');
            $collection->string('name');
            $collection->string('description');
            $collection->timestamps();
            $collection->foreign('hospital_id')
                       ->references('_id')
                       ->on('hospitals')
                       ->onDelete('cascade');
         });
    }
    public function down()
    {
        Schema::drop('categories');
    }

diseases Collection

class CreateDiseasesCollection extends Migration
{
    public function up()
    {
        Schema::create('diseases', function (Blueprint $collection) {
            $collection->string('category_id');
            $collection->string('name');
            $collection->string('description');
            $collection->timestamps();
            $collection->foreign('category_id')
                       ->references('_id')
                       ->on('categories')
                       ->onDelete('cascade');
         });
    }
    public function down()
    {
        Schema::drop('diseases');
    }

・DBに反映する。

composer dump-autoload
php artisan migrate:refresh --seed

Relationship検証

上位→下位の順にて参照また下位→上位の順にて参照

$ php artisan tinker

hospital→categories

>>>$hospitals = App\Hospital::all()
>>>$hospitals= hospitals->first()
>>>$category= $hospital->categories->first()

category->hospital

>>>$categories = App\Category::all()
>>>$category = $categories->first()
>>>$hospital = $category->hospital

category->disease

>>>$categories = App\Category::all()
>>>$category = $categories->first()
>>>$diseases = $category->diseases

disease->category

>>>$diseases = App\Disease::all()
>>>$disease = $diseases->first()
>>>$category = $disease->category

hospital→diseases

>>>$hospitals = App\Hospital::all()
>>>$hospital  = hospitals->first()
>>>$diseases = $hospital->categories->first()->diseases

disease->hospital

>>>$diseases = App\Disease::all()
>>>$disease = $diseases->first()
>>>$hospital= $disease->category->hospital

$hospital、$category、$diseaseがうまく表示されたら、紐付けができたことが検証済み。
Null、Errorが表示された場合、どこかで入力ミスあるか確認する。

上位から紐づけまた下位から紐づけして保存

>>>$hospital->categorys()->save($category)
>>>$category->diseases()->save($disease)

>>>$category->hospital()->associate($hospital)
>>>$disease->category()->associate($category)

以上。

0

ロボット・ドローン部品お探しなら
ロボット翔・電子部品ストア

Laravel 5.1(4)Text Field 動的増減&入力補完

Text Field 入力補完:Autocomplete

Javascript使用、別途route、Controller側にDB検索して、結果をjsonにて返すソースを追加必要ある(省略)。

<script type="text/javascript">
 
    $(function() {
         $( "#allergy" ).autocomplete({
          source: "{{ route('autoAllergy') }}",
          minLength: 1,
          select: function(event, ui) {
            $('#allergy').val(ui.item.value);
          }
         });
    });
></script>

Text Field 動的増減&入力補完:Dynamic Add/Remove

jQuery使用、動的増減&入力補完、入力補完のソースが動的増減ソースに埋め込む。別途blade側にjquery-ui.css、jQuery-2.1.4.min.js(他のバージョンでもよいか)、jquery-ui.js、またinputタグのclassなど追加必要ある(省略)。

<script type="text/javascript">
var $i = 0;
$(".addmore").on("click", function () {
if($i > 20) alert('注意:最大20行まで追加できます');
else  {
    $(".addform").append("<div class='input-group control-group' style='margin-top:20px;width: 100%;'><input class='form-control' id='item"+$i+"'  placeholder='削除は右側の-キーをクリックして下さい' name='value[]' type='text'><div class='input-group-btn'><button class='btn btn-default deleteform' type='button'><i class='fa fa-minus'></i></button></div></div>");            
    $( "#item"+$i).autocomplete({source: "{{ route('autoAllergy') }}", minLength: 1, select: function(event, ui) { $("#item"+$i).val(ui.item.value);} });
}
$i++;
});
$("body").on("click", ".deleteform", function () {
$(this).parent().parent().remove();
});
</script>

但し、views.allergys.createの際、AllergysController側storeで、validateの際、未入力か入力エラーのtext項目があった場合、create画面に戻って、動的増やしたtext fieldが表示されなくなる現象が確認した。別途、create1を作成するか、Inputにより分岐して、増やしたtext fieldを再描写するのか、手を施す必要がある。

0

ロボット・ドローン部品お探しなら
ロボット翔・電子部品ストア

Laravel5.1(3)WebSocketについて

ChatやIoTリアルタイム処理にLaravel5のWebSocketが必要となります。以下の参考ベースがあります。

1、Ratchetライブラリ:https://github.com/ratchetphp/Ratchet

2、laravel 5.2 chat

3、github.com/assertchris/laravel4 リアルタイムchat

4、ライブラリ:github.com/BrainBoxLabs/brain-socket

5、socket IO:www.codetutorial.io/laravel-5-and-socket-io-tutorial/

6、AJAX&laravel 4:https://www.youtube.com/watch?v=GLDjgbbBvOg

以上。

0

ロボット・ドローン部品お探しなら
ロボット翔・電子部品ストア

Laravel5.1(2)Windows7+Xamppでスタート

Laravel5本家が推奨している、開発プラットホームはVirtualBox+Vagrant+HomeSteadの組み合わせです。以前はPHPでの開発でXamppの環境が構築できたのでそのまま流用していきます。

1、Composerのインストール

PHPシステムの依存かんきょうを管理してくれるツール(dependency management tool)であるComposer Installerを以下リンクよりダウンロードして、インストールします。※php.exeの置き場を指定する必要があります。

https://getcomposer.org/download/

 2、Laravelのインストール

Laravelの公式サイトへインストールに関する説明を読みます。

http://laravel.com/docs/5.1

プロジェクトを作成コマンドでLaravelをインストールします。

c:>cd c:/xampp/hotdocs
c:/xampp/hotdocs>composer create-project laravel/laravel laravel5.1

3、Xampp Contrl Panelを開いて、ApacheおよびMySQLを起動

4、インストールしたLaravelをブラウザで確認

http://localhost/laravel5.1/public
0

ロボット・ドローン部品お探しなら
ロボット翔・電子部品ストア