dvizh / yii2-order
yii2-order 是一个用于网站购物车订单的模块
dev-master
2018-02-05 13:07 UTC
Requires
- php: >=5.4.0
- 2amigos/yii2-grid-view-library: *
- kartik-v/yii2-export: @dev
- kartik-v/yii2-grid: *
- kartik-v/yii2-mpdf: dev-master
- nex/yii2-datepicker: *
- udokmeci/yii2-phone-validator: ~1.0.1
- yiisoft/yii2: *
- yiisoft/yii2-bootstrap: *
Requires (Dev)
This package is not auto-updated.
Last update: 2024-09-20 22:23:06 UTC
README
这是一个实现网站订单功能的模块。目前订单中包含购物车元素,建议使用 dvizh/yii2-cart 作为购物车服务。
功能
- 在后台查看和管理订单
- 在后台管理订单字段
- 在后台管理配送和支付方式
安装
执行以下命令
php composer require dvizh/yii2-order "@dev"
或者将以下内容添加到 composer.json 中
"dvizh/yii2-order": "@dev",
然后执行
php composer update
接下来,迁移数据库
php yii migrate --migrationPath=vendor/dvizh/yii2-order/src/migrations
接下来,将模块与购物车关联。安装 dvizh/yii2-cart
创建方面
<?php
namespace common\aspects;
use dvizh\order\models\Element;
use Yii;
class OrderFilling extends \yii\base\Behavior
{
public function events()
{
return [
'create' => 'putElements'
];
}
public function putElements($event)
{
$order = $event->model;
foreach(yii::$app->cart->elements as $element) {
$elementModel = new Element;
$elementModel->setOrderId($order->id);
$elementModel->setAssigment($order->is_assigment);
$elementModel->setModelName($element->getModelName());
$elementModel->setName($element->getName());
$elementModel->setItemId($element->getItemId());
$elementModel->setCount($element->getCount());
$elementModel->setBasePrice($element->getPrice(false));
$elementModel->setPrice($element->getPrice());
$elementModel->setOptions(json_encode($element->getOptions()));
$elementModel->setDescription('');
$elementModel->saveData();
}
$order->base_cost = 0;
$order->cost = 0;
foreach($order->elements as $element) {
$order->base_cost += ($element->base_price*$element->count);
$order->cost += ($element->price*$element->count);
}
$order->save();
yii::$app->cart->truncate();
}
}
为了将订单模块与购物车关联,在配置中将方面赋予订单模块
'order' => [
'class' => 'dvizh\order\Module',
//...
'as order_filling' => '\common\aspects\OrderFilling',
],
作为模块安装
如果您计划对代码进行大量修改,最好将扩展作为模块安装。
从 Github 克隆扩展到所需的文件夹
git clone https://github.com/dvizh/yii2-order.git
在 composer.json 中添加模块路径
"autoload": {
"psr-4": {
"dvizh\\order\\": "common/modules/order"
}
}
运行 update
php composer update
执行迁移
php yii migrate --migrationPath=common/modules/order/migrations
添加到配置
'bootstrap' => ['dvizh\order\Bootstrap'],
按照上述方法与购物车关联。
连接和设置
将订单模块添加到应用程序的配置文件中
'modules' => [ 'order' => [ 'class' => 'dvizh\order\Module', 'layoutPath' => 'frontend\views\layouts', 'successUrl' => '/page/thanks', //Страница, куда попадает пользователь после успешного заказа 'adminNotificationEmail' => 'test@yandex.ru', //Мыло для отправки заказов ], //... ]
服务
模块会自动注入到 yii2 (Service locator) 中,组件 order (服务) 可通过 yii::$app->order 全局访问,并提供以下服务
- get($id) - 通过 ID 获取订单
- getStatInMoth($month) - 获取月份订单统计
- getStatByDate($date) - 获取某日订单统计
- getStatByDatePeriod($dateStart, $dateStop) - 获取指定时间段订单统计
- getStatByModelAndDatePeriod($model, $dateStart, $dateStop) - 获取指定模型指定时间段订单统计
小部件
负责输出订单表单的是 dvizh\order\widgets\OrderForm 小部件
<?=OrderForm::widget();?>
一键下单按钮 - dvizh\order\widgets\OneClick
<?=OneClick::widget(['model' => $model]);?>
触发器
在 Module
- create - 创建订单
- delete_order - 删除订单
- delete_element - 删除订单元素
通过配置使用示例
'order' => [ 'class' => 'dvizh\order\Module', 'on create' => function($event) { send_sms(...); //Отправляем СМС оповещение }, ],
在线支付
要添加支付方式,请转到 ?r=/order/payment-type/index,添加新的支付方式,在“小部件”字段中指定将提供支付表单的小部件类。支付小部件单独安装。
- Paymaster.ru: dvizh/yii2-paymaster
- Liqpay: dvizh/yii2-liqpay
- Сбербанк: dvizh/yii2-sberbank-payment