komer45 / yii2-partnership
这是一个合作伙伴模块
Requires
- php: >=5.4.0
- yiisoft/yii2: *
- yiisoft/yii2-bootstrap: *
Requires (Dev)
This package is not auto-updated.
Last update: 2024-09-29 01:03:52 UTC
README
这是一个实现合作伙伴程序的模块。通过合作伙伴网站转来的用户会被识别——如果用户未在系统中注册,则在转换时会记录为介绍该用户的合作伙伴。系统会追踪用户的订单活动——在订单完成后,合作伙伴会得到一定的百分比提成。当客户的订单提成达到一定金额时,合作伙伴可以提取自己的收入。为了在系统中识别合作伙伴,需要满足以下条件:1. 该合作伙伴必须在user表中,2. 应该成为合作伙伴的user表中的用户必须记录在ps_partner表中,3. 在ps_partner表中将用户识别为合作伙伴的字段partner_id应记录对应用户user表中的id字段的值。
功能
- 注册跳转
- 将到达的访客与带来访客的合作伙伴关联。
- 对合作伙伴的订单提成进行计算。
- 管理提成
安装
执行以下命令
php composer require komer45/yii2-partnership "*"
或者在composer.json中添加
"komer45/yii2-partnership": "*",
然后执行
php composer update
接下来,迁移数据库
php yii migrate --migrationPath=vendor/komer45/yii2-partnership/migrations
连接和配置
为了使用该模块,需要在配置中连接模块
'modules' => [
'partnership' => [
'class' => 'komer45\partnership\Module',
'adminRoles' => ['superadmin', 'administrator'],
],
//...
]
为了在配置中访问组件,需要连接请求
'components' => [
...
'partnership' => [
'class' => 'komer45\partnership\Partnership'
],
...
]
为了订阅购买事件,需要在配置中为order模块编写以下代码
<?php ... 'order' => [ 'class' => 'pistol88\order\Module', ///... 'on create' =>function($event) { $model = new \komer45\partnership\models\OrderHistory; $tmp = strval(Yii::$app->request->cookies['tmp_user_id']); if (!Yii::$app->user->isGuest){ //сли пользователь зарегистрирован $model->user_id = Yii::$app->user->id; $follow = \komer45\partnership\models\Follow::find()->where(['user_id' => $model->user_id])->one(); $part = \komer45\partnership\models\Follow::find()->where(['user_id' => Yii::$app->user->id])->one(); } else { //иначе - если все-таки гость $model->tmp_user_id = $tmp; $follow = \komer45\partnership\models\Follow::find()->where(['tmp_user_id' => $model->tmp_user_id])->one(); $part = \komer45\partnership\models\Follow::find()->where(['tmp_user_id' => $tmp])->one(); } if($part){ $partner = \komer45\partnership\models\Partner::find()->where(['code' => $part->partner])->one(); //находим партнера по коду $model->partner_id = $partner->id; } $model->sum = $event->model->cost; $model->date = date('Y-m-d'); $model->order_id = $event->model->id; if($follow){ $model->follow_id = strval($follow->id); //сюда нужно записать id таблицы ps_follow } $forperc = \komer45\partnership\models\Setting::find()->all(); if($forperc){ foreach ($forperc as $search) { if ($model->sum >= $search->sum) { $percent = (($model->sum)/100*$search->percent); break; } } $model->recoil = $percent; } $model->status = 'new'; if ($model->validate()) { $model->save(); } else { //die('Uh-oh something in config went wrong'); } }, //.. ]
同样,为了在控制器user (\common\models\user)中将未注册的用户转换为注册用户,需要在方法afterSignup(array $profileData = [])中添加以下代码
<?php public function afterSignup(array $profileData = []) { $reFollow = \komer45\partnership\models\Follow::find()->where(['tmp_user_id' => Yii::$app->request->cookies['tmp_user_id']])->one(); $reFollow->tmp_user_id = NULL; $reFollow->user_id = $this->getId(); if ($reFollow->validate()) { $reFollow->save(); } //... }
为了执行订单(客户)、请求提取(合作伙伴)、提取(管理员),可以连接小部件
<?php use komer45\partnership\widgets\OrderWidget; //Виджет заказа use komer45\partnership\widgets\PartnerWidget; //Виджет партнерства use komer45\partnership\widgets\AdminWidget; //Переход на вкладку администрирования use komer45\partnership\widgets\SettingWidget; //Переход на вкладку настроек use komer45\partnership\widgets\PartnerOrdersWidget; //"Мои отчисления", "Мои рефералы" ?> <?=OrderWidget::widget();?> <?=PartnerWidget::widget();?> <?=AdminWidget::widget();?> <?=SettingWidget::widget();?> <?=PartnerOrdersWidget::widget();?>
如果需要将此模块与钱包模块(komer45/yii2-balance)关联,可以订阅事件。在配置中修改modules部分的partnership连接
'partnership' => [ ... 'on makePayment' => function($event){ $model = $event->model; $userId = Yii::$app->Partnership->getUserByPartnerId($model->partner_id); $balance = Yii::$app->balance->getUserScore($userId); if ($balance){ Yii::$app->balance->addTransaction($balance->id, 'in', $model->sum, 'partnership rewads'); } else return false; } ],
如果连接的User模型不符合'common\models\User',则需要在Module.php模块中设置变量$userModule。