我无法让产品选项显示在单独的字段中而不是被分组。
Product
public function options(){
return $this->belongsToMany(Option::class, 'product_options', 'product_id', 'option_id');
}
Option Group
public function values(){
return $this->hasMany(Option::class, 'option_id');
}
Option
public function group(){
return $this->belongsTo(OptionGroup::class, 'option_id');
}
public function products(){
return $this->belongsToMany(Product::class);
}
@if(count($product->options)>0)
<!-- options -->
<div class="tt-swatches-container">
<div class="tt-wrapper">
@foreach($product->options as $option)
<div class="tt-title-options">{{$option->group->title}}:</div>
@if($option->group->type == 'color')
<ul class="tt-options-swatch options-large">
<li><a class="options-color" style="background-color: {{$option->color}}" href="#"></a></li>
</ul>
@elseif($option->group->type == 'dropdown')
<form class="form-default">
<div class="form-group">
<select class="form-control">
<option>{{$option->title}}</option>
</select>
</div>
</form>
@else
<ul class="tt-options-swatch options-large">
<li><a href="#">{{$option->title}}</a></li>
</ul>
@endif
@endforeach
</div>
</div>
<!-- options -->
@endif
如您所见,我的视图中有重复的数据,颜色必须在一组中彼此相邻显示,并且下拉选项也必须成为一种。
任何人都可以告诉我我在哪里做错了吗?
我在控制器中添加了mapToGroups
,现在结果更加简洁,但下拉菜单仍然存在问题
Controller
$options = $product->options->mapToGroups(function ($item, $key) {
return [$item->group->title => $item];
});
Blade
@if(count($options)>0)
<!-- options -->
<div class="tt-swatches-container">
@foreach($options as $group => $option)
<div class="tt-wrapper">
<div class="tt-title-options">{{$group}}:</div>
@foreach($option as $opt)
@if($opt->group->type == 'color')
<ul class="tt-options-swatch options-large">
<li><a class="options-color" style="background-color: {{$opt->color}}" href="#"></a></li>
</ul>
@elseif($opt->group->type == 'dropdown')
<form class="form-default">
<div class="form-group">
<select class="form-control">
<option>{{$opt->title}}</option>
</select>
</div>
</form>
@else
<ul class="tt-options-swatch options-large">
<li><a href="#">{{$opt->title}}</a></li>
</ul>
@endif
@endforeach
</div>
@endforeach
</div>
<!-- options -->
@endif
答案 0 :(得分:1)
您的迭代非常错误。您正在做的是为每种颜色创建一个完整的ul,为每个下拉列表创建一个完整的选择,以及为每个色板创建一个完整的ul。
最简单的方法是使用Blade神奇的stacks;我们只是将每个选项推入自己的堆栈(颜色,下拉列表,色板),最后打印堆栈:
Compile with .Net Native tool chain
祝你好运。