Laravel 5.8: 你能帮我解决这个问题吗
Laravel 5.8: Can you help me with this problem
我正在使用 Laravel 5.8 开发我的在线商店。在这家商店中,每个产品都有一个 prd_delivery
字段,可以设置这些值之一:
city_free_delivery
country_free_delivery
null
当为null时,表示没有任何免费送货类型。
而当用户select他们的产品时,必须应用这些情况:
请注意,行 City 表示,如果用户住在城市,行 Country 表示,如果他住在以外城市(村庄)。
这些情况适用于cart.blade.php
,所以我尝试了这个:
@if($conflicting && ($prd[0]->prd_delivery == 'country_free_delivery'))
@php
Session::forget('city');
Session::forget('city_country');
Session::put('country' , '1')
@endphp
@endif
@if($conflicting && ($prd[0]->prd_delivery == 'city_free_delivery'))
@php
Session::forget('country');
Session::put('city' , '2');
@endphp
@endif
@if($conflicting && ($prd[0]->prd_delivery == 'city_free_delivery' || $prd[0]->prd_delivery == 'country_free_delivery'))
@php
Session::forget('country');
Session::forget('city');
Session::forget('free_notfree');
Session::put('city_country' , '0');
Session::put('free_notfree','13');
@endphp
@endif
@if($conflicting && ($prd[0]->prd_delivery == '' || $prd[0]->prd_delivery == 'city_free_delivery' || $prd[0]->prd_delivery == 'country_free_delivery'))
@php
if((session('free_notfree') != '13')){
Session::forget('country');
Session::forget('city_country');
Session::put('free_notfree' , '3');
}
@endphp
@endif
在控制器中,我有这个:
$conflicting = false;
$free_delivery = '';
if ($foundOrder != null) {
foreach ($foundOrder as $key => $value) {
$product = Product::with('uploaded')->wherePrdId($value->id)->select('*')->first();
// Just put a check here in case you have some non-free delivery types
if ($product->prd_delivery == 'city_free_delivery' || $product->prd_delivery == 'country_free_delivery') {
// Check if cart already have free delivery item and it conflict with current looping product or not
if ($free_delivery && $free_delivery != $product->prd_delivery) {
$conflicting = true;
}
$free_delivery = $product->prd_delivery;
}
$prds[] = [
$product,
$value->quantity,
$value->price
];
}
} else {
$prds = [];
}
...
return view('frontend.shop.carts.index', compact('conflicting', ...));
所以通过这种方式我可以查看运费(可以免费或不免费),取决于用户位置和用户购物车产品。
例如在 checkout.blade.php
,如果他的位置是 city
,这将 运行
@if(Session()->has('city') || Session()->has('city_country') || Session()->has('country'))
Free
@else
{{ $item->price . ' Dollar'}}
@endif
最后,情况正常,但最后一个除外:
事实上,它向用户显示FREE,而{{ $item->price . ' Dollar'}}
必须显示!
那么最后一种情况如何打印价格呢?
我知道这个问题有点令人困惑,但我已尽力以最好的方式解释问题。因为我对此很在意。
非常感谢你们的任何想法或建议。
提前致谢。
问题是您在循环内设置会话值,因此只应用最后一个循环值。有了这个要求,您可以创建一个数组来存储购物车中所有交付类型的产品,然后根据该数组设置会话值。并且您应该将会话设置逻辑放在控制器中,而不是视图中。
$delivery_types = [];
$conflicting = false;
if ($foundOrder != null) {
foreach ($foundOrder as $key => $value) {
$product = Product::with('uploaded')->wherePrdId($value->id)->select('*')->first();
array_push($delivery_types, $product->prd_delivery);
$prds[] = [
$product,
$value->quantity,
$value->price
];
}
$delivery_types = array_unique($delivery_types);
// Your conflicting check here
if (in_array('country_free_delivery', $delivery_types) && in_array('city_free_delivery', $delivery_types)) {
$conflicting = true;
}
// Free logic check here
if (in_array(null, $delivery_types)) {
Session::put('free' , 'no');
} else if (in_array('country_free_delivery', $delivery_types)) {
Session::put('free' , 'country');
} else {
Session::put('free' , 'city');
}
} else {
$prds = [];
}
...
然后在你的 checkout.blade.php
:
@if (session('free') == 'no)
{{ $item->price . ' Dollar'}}
@else
// Depend on user's location
@endIf
我正在使用 Laravel 5.8 开发我的在线商店。在这家商店中,每个产品都有一个 prd_delivery
字段,可以设置这些值之一:
city_free_delivery
country_free_delivery
null
当为null时,表示没有任何免费送货类型。
而当用户select他们的产品时,必须应用这些情况:
请注意,行 City 表示,如果用户住在城市,行 Country 表示,如果他住在以外城市(村庄)。
这些情况适用于cart.blade.php
,所以我尝试了这个:
@if($conflicting && ($prd[0]->prd_delivery == 'country_free_delivery'))
@php
Session::forget('city');
Session::forget('city_country');
Session::put('country' , '1')
@endphp
@endif
@if($conflicting && ($prd[0]->prd_delivery == 'city_free_delivery'))
@php
Session::forget('country');
Session::put('city' , '2');
@endphp
@endif
@if($conflicting && ($prd[0]->prd_delivery == 'city_free_delivery' || $prd[0]->prd_delivery == 'country_free_delivery'))
@php
Session::forget('country');
Session::forget('city');
Session::forget('free_notfree');
Session::put('city_country' , '0');
Session::put('free_notfree','13');
@endphp
@endif
@if($conflicting && ($prd[0]->prd_delivery == '' || $prd[0]->prd_delivery == 'city_free_delivery' || $prd[0]->prd_delivery == 'country_free_delivery'))
@php
if((session('free_notfree') != '13')){
Session::forget('country');
Session::forget('city_country');
Session::put('free_notfree' , '3');
}
@endphp
@endif
在控制器中,我有这个:
$conflicting = false;
$free_delivery = '';
if ($foundOrder != null) {
foreach ($foundOrder as $key => $value) {
$product = Product::with('uploaded')->wherePrdId($value->id)->select('*')->first();
// Just put a check here in case you have some non-free delivery types
if ($product->prd_delivery == 'city_free_delivery' || $product->prd_delivery == 'country_free_delivery') {
// Check if cart already have free delivery item and it conflict with current looping product or not
if ($free_delivery && $free_delivery != $product->prd_delivery) {
$conflicting = true;
}
$free_delivery = $product->prd_delivery;
}
$prds[] = [
$product,
$value->quantity,
$value->price
];
}
} else {
$prds = [];
}
...
return view('frontend.shop.carts.index', compact('conflicting', ...));
所以通过这种方式我可以查看运费(可以免费或不免费),取决于用户位置和用户购物车产品。
例如在 checkout.blade.php
,如果他的位置是 city
,这将 运行
@if(Session()->has('city') || Session()->has('city_country') || Session()->has('country'))
Free
@else
{{ $item->price . ' Dollar'}}
@endif
最后,情况正常,但最后一个除外:
事实上,它向用户显示FREE,而{{ $item->price . ' Dollar'}}
必须显示!
那么最后一种情况如何打印价格呢?
我知道这个问题有点令人困惑,但我已尽力以最好的方式解释问题。因为我对此很在意。
非常感谢你们的任何想法或建议。
提前致谢。
问题是您在循环内设置会话值,因此只应用最后一个循环值。有了这个要求,您可以创建一个数组来存储购物车中所有交付类型的产品,然后根据该数组设置会话值。并且您应该将会话设置逻辑放在控制器中,而不是视图中。
$delivery_types = [];
$conflicting = false;
if ($foundOrder != null) {
foreach ($foundOrder as $key => $value) {
$product = Product::with('uploaded')->wherePrdId($value->id)->select('*')->first();
array_push($delivery_types, $product->prd_delivery);
$prds[] = [
$product,
$value->quantity,
$value->price
];
}
$delivery_types = array_unique($delivery_types);
// Your conflicting check here
if (in_array('country_free_delivery', $delivery_types) && in_array('city_free_delivery', $delivery_types)) {
$conflicting = true;
}
// Free logic check here
if (in_array(null, $delivery_types)) {
Session::put('free' , 'no');
} else if (in_array('country_free_delivery', $delivery_types)) {
Session::put('free' , 'country');
} else {
Session::put('free' , 'city');
}
} else {
$prds = [];
}
...
然后在你的 checkout.blade.php
:
@if (session('free') == 'no)
{{ $item->price . ' Dollar'}}
@else
// Depend on user's location
@endIf