OptionWidget.php 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * Name: 芸众商城系统
  5. * Author: 广州市芸众信息科技有限公司
  6. * Profile: 广州市芸众信息科技有限公司位于国际商贸中心的广州,专注于移动电子商务生态系统打造,拥有芸众社交电商系统、区块链数字资产管理系统、供应链管理系统、电子合同等产品/服务。官网 :www.yunzmall.com www.yunzshop.com
  7. * Date: 2021/9/14
  8. * Time: 17:38
  9. */
  10. namespace app\backend\modules\goods\widget;
  11. //商品规格
  12. use app\backend\modules\goods\models\GoodsOption;
  13. use app\backend\modules\goods\models\GoodsSpec;
  14. class OptionWidget extends BaseGoodsWidget
  15. {
  16. public $group = 'base';
  17. public $widget_key = 'option';
  18. public $code = 'option';
  19. public function pluginFileName()
  20. {
  21. return 'goods';
  22. }
  23. public function getData()
  24. {
  25. $specs = [];
  26. $option = [];
  27. if (!is_null($this->goods)) {
  28. $goodsSpecs = GoodsSpec::select('id','title','goods_id')->where('goods_id', $this->goods->id)
  29. ->with(['hasManySpecsItem' => function($item) {
  30. return $item->select('id','specid','title','show')->orderBy('display_order', 'asc');
  31. }])->orderBy('display_order', 'asc')->get();
  32. $spec_title_key = [];
  33. $spec_item_title_arr = [];
  34. if (!$goodsSpecs->isEmpty()) {
  35. foreach ($goodsSpecs as $spec) {
  36. $temporary = $spec->getAttributes();
  37. $temporary['spec_item'] = $spec->hasManySpecsItem->toArray();
  38. $specs[] = $temporary;
  39. $spec_item_title_arr = $spec_item_title_arr + array_column($temporary['spec_item'],'title','id');
  40. $spec_title_key[$temporary['title']] = array_column($temporary['spec_item'],'id');
  41. }
  42. }
  43. $option = GoodsOption::where('goods_id', $this->goods->id)->orderBy('display_order', 'asc')->get()->toArray();
  44. foreach ($option as $key=>$item) {
  45. if ($item['thumb']) {
  46. $option[$key]['thumb'] = yz_tomedia($item['thumb']);
  47. }
  48. //这里那id做判断,名称可能会重复
  49. $spec_item_ids = explode('_',$item['specs']);
  50. foreach ($spec_item_ids as $title_key => $spec_item_id) {
  51. $spec_title_array = array_filter($spec_title_key, function ($title_key) use ($spec_item_id) {
  52. return in_array($spec_item_id, $title_key);
  53. });
  54. $title_key_first = array_key_first($spec_title_array);
  55. if ($title_key_first) {
  56. $option[$key][$title_key_first] = $spec_item_title_arr[$spec_item_id];
  57. }
  58. }
  59. }
  60. }
  61. return [
  62. 'has_option'=> is_null($this->goods)?0:$this->goods->has_option,
  63. 'specs'=> $specs,
  64. 'option'=>$option
  65. ];
  66. }
  67. public function pagePath()
  68. {
  69. return $this->getPath('resources/views/goods/assets/js/components/');
  70. }
  71. }