2021年4月20日 星期二

PHP laravel-admin 載入商品至購物車內

#20210501 更新

接續上一篇 PHP laravel-admin 刪除購物車內的商品

已經在結帳頁面了才發現少選了商品因此必須要回上一頁重新選擇商品,這時的購物車應該要載入我們原先已經選擇的商品,做起來跟上一篇的刪除購物車內容差不多,只是從刪除商品改為列出商品清單。

首先新增一個action。

php artisan admin:action Product\\CartInfo

內容如下:

use App\Models\Cart;
use App\Models\Product;

public function handle(Request $request)
{
    // $request ...
    $carts = Cart::with('product')->whereHas('product', function ($query) use ($request) 
    {
        $query->where('sale_id', '=', $request->get('_saleid'));
    })->get();
    return $this->response()->success($carts);
}

然後在iScript中新增下列內容,綠色的內容就是刪除商品的javascript,跟上一篇一樣要在此時一併加入,不然刪除鍵會沒作用哦。

var process = new Promise(function (resolve,reject) {
    var data = { _token: $.admin.token, _action: 'App_Admin_Actions_Product_CartInfo', _saleid:urlParams.get('saleid')};
    $.ajax({
        method: 'POST',
        url: '../_handle_action_',
        data: data,
        success: function (response) {
            $('#isale li').each(function (i,v){
                if ($(this).attr('id') != 'total') $(this).remove();
            });
            var result = JSON.parse(response.toastr.content);
            if (result.length > 0) {
                $.each(result, function (index, element) {
                    var p = element.product;
                    $('#total').before('<li id="p'+p.id+'" data-_key="'+p.id+'"><p>'+ p.name +'<a class="text-danger pull-right fa fa-trash-o href-hand"></a></p></li>');
                    $('#p'+p.id).off('click').on('click', function() {
                        var data = $(this).data();
                        var key = $(this).data('_key');
                        var target = $(this);
                        Object.assign(data, []);
                        var process = new Promise(function (resolve,reject) {
                            Object.assign(data, {
                                _token: $.admin.token,
                                _action: 'App_Admin_Actions_Product_DeleteCart',
                                _productid: key,
                                _saleid:urlParams.get('saleid')
                            });
                            $.ajax({
                                method: 'POST',
                                url: '../_handle_action_',
                                data: data,
                                success: function (data) {
                                    $('#p'+key).remove();
                                    resolve([data, target]);
                                },
                                error:function(request){
                                    //reject(request);
                                    reject('商品刪除失敗');
                                }
                            });
                        });
                        process.then(actionResolver).catch(actionCatcher);
                    });
                });
            }
        },
        error:function(request){
            $('#total').before('讀取商品時發生錯誤!');
        }
    });
});
process.then(actionResolver).catch(actionCatcher);

好了,完成。