dvizh/yii2-order

yii2-order 是一个用于网站购物车订单的模块

安装数量: 1,703

依赖者: 2

建议者: 0

安全: 0

星标: 16

关注者: 7

分支: 11

开放问题: 9

类型:yii2-extension

dev-master 2018-02-05 13:07 UTC

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,添加新的支付方式,在“小部件”字段中指定将提供支付表单的小部件类。支付小部件单独安装。

截图

订单表单 1 主面板 2 订单搜索 3 统计 4