MemberCart.php 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: Administrator
  5. * Date: 2021/4/7
  6. * Time: 10:18
  7. */
  8. namespace app\frontend\modules\cart\models;
  9. use app\frontend\modules\cart\group\BaseShopGroup;
  10. use app\frontend\modules\cart\group\DefaultShopGroup;
  11. class MemberCart extends \app\frontend\models\MemberCart
  12. {
  13. protected $pluginGroup;
  14. public function __construct(array $attributes = [])
  15. {
  16. parent::__construct($attributes);
  17. }
  18. /**
  19. * todo 这里想要兼容plugin_id = 0,但又是特殊商品的
  20. * 不能根据商品的plugin_id来进行分组,需要重新写配置根据判断得知商品属于哪种插件
  21. * @return BaseShopGroup
  22. */
  23. public function getPluginGroup()
  24. {
  25. if (!isset($this->pluginGroup)) {
  26. $this->pluginGroup = $this->_getPluginGroup();
  27. }
  28. return $this->pluginGroup;
  29. }
  30. protected function _getPluginGroup()
  31. {
  32. $cartGroupManager = app('CartContainer')->make('CartGroupManager');
  33. /**
  34. * 根据商品获取不同的 CartGroup分组
  35. * @var $cartGoods CartGoods
  36. */
  37. $cartGroup = $cartGroupManager->getCartGroup($this);
  38. return $cartGroup;
  39. }
  40. public function getPluginApp()
  41. {
  42. if ($this->getPluginGroup()->getPluginPathName()) {
  43. return app('plugins')->getPlugin($this->getPluginGroup()->getPluginPathName());
  44. }
  45. return null;
  46. }
  47. /**
  48. * 获取购物车分组id
  49. * @return int
  50. */
  51. public function getGroupId()
  52. {
  53. return $this->getPluginGroup()->getGroupId();
  54. // if (!$this->goods->getPlugin()) {
  55. // return 0;
  56. // }
  57. // if (!$this->goods->getPlugin()->app()->bound('CartContainer')) {
  58. // return 0;
  59. // }
  60. //
  61. // return $this->goods->getPlugin()->app()->make('CartContainer')->make('CartGroup',[$this])->getGroupId();
  62. }
  63. public function aaa()
  64. {
  65. $pluginGroups = collect();
  66. foreach (\app\common\modules\shop\ShopConfig::current()->get('member-cart.group') as $configItem) {
  67. $pluginGroups->push(call_user_func($configItem['class'], $this));
  68. }
  69. $pluginGroups = $pluginGroups->sortBy(function (BaseShopGroup $pluginGroup) {
  70. // 按照weight排序
  71. return $pluginGroup->getWeight();
  72. });
  73. foreach ($pluginGroups as $pluginGroup) {
  74. /**
  75. * @var BaseShopGroup $pluginGroup
  76. */
  77. if ($pluginGroup->validate()) {
  78. return $pluginGroup;
  79. }
  80. }
  81. return new DefaultShopGroup($this);
  82. }
  83. }