nestermaks/laravel-pricelist

支持多语言的价格单包,适用于Laravel,包含迁移和API控制器

1.0.0 2021-07-16 11:38 UTC

This package is auto-updated.

Last update: 2024-09-16 18:58:31 UTC


README

Latest Version on Packagist GitHub Tests Action Status GitHub Code Style Action Status Total Downloads

此包允许您管理价格单并在其中重新排列项目。它不是一种定价表格,其中您有一份功能和价格列表。它负责创建列表,其中每个项目都有自己的价格。此外,每个项目都可以属于多个价格单。

此包包含

  1. 模型
  2. 迁移
  3. API路由
  4. API控制器
  5. 翻译
  6. 配置文件

目录

安装

您可以通过composer安装此包

composer require nestermaks/laravel-pricelist

使用以下命令发布并运行迁移

php artisan vendor:publish --tag=pricelist-migrations
php artisan migrate

配置

您可以覆盖翻译文件或添加一个新的。使用以下命令发布lang文件

php artisan vendor:publish --tag=pricelist-translations

您可以覆盖默认选项,如使用的区域设置、API路由前缀和验证规则。发布配置

php artisan vendor:publish --tag=pricelist-config

这是发布配置文件的内容

<?php
// config for Laravel Pricelist
return [

    /////////////////////////////////////////////
    //Locales for Astrotomic/laravel-translatable
    /////////////////////////////////////////////
    'locales' => [
        'en',
        'ru',
        'uk',
    ],


    ///////////////////
    //API routes prefix
    ///////////////////
    'api' => 'nestermaks-api',


    //////////////////////////
    //Pricelists routes prefix
    //////////////////////////
    'pricelists' => 'pricelists',


    ///////////////////////////////
    //Pricelist items routes prefix
    ///////////////////////////////
    'items' => 'pricelist-items',


    ////////////////////////////////////////////////
    //Items amount shown when index method is called
    ////////////////////////////////////////////////
    'pricelists-per-page' => 10,
    'pricelist-items-per-page' => 10,


    ///////////////////////////////////////////////
    //Validation rules for store and update methods
    ///////////////////////////////////////////////
    'store-pricelists' => [
        'title' => ['required', 'max:256'],
        'description' => ['max:1000'],
        'lang' => ['max:16'],
        'order' => ['numeric', 'min:0', 'max:65535'],
        'active' => ['boolean']
    ],

    'update-pricelists' => [
        'title' => ['max:256'],
        'description' => ['max:1000'],
        'lang' => ['max:16'],
        'order' => ['numeric', 'min:0', 'max:65535'],
        'active' => ['boolean']
    ],

    'store-pricelist-items' => [
        'title' => ['required', 'max:256'],
        'units' => ['required', 'max:256'],
        'lang' => ['max:16'],
        'shortcut' => ['required', 'max:256'],
        'price' => ['required', 'numeric', 'min:0'],
        'max_price' => ['prohibited_if:price_from,true'],
        'price_from' => ['boolean'],
        'active' => ['boolean']
    ],

    'update-pricelist-items' => [
        'title' => ['max:256'],
        'units' => ['max:256'],
        'lang' => ['max:16'],
        'shortcut' => ['max:256'],
        'price' => ['numeric', 'min:0'],
        'max_price' => ['prohibited_if:price_from,true'],
        'price_from' => ['boolean'],
        'active' => ['boolean']
    ],


];

数据库

迁移文件提供了如下表格

  1. pricelists。此表类似于价格单项的容器。它具有以下字段

    • order - 在前端设置优先级
    • active - 定义价格单是否活动

    表'pricelists'的可翻译字段在表'pricelist_translations'中。表'pricelists'有多个价格单项翻译

  2. pricelist_translations。字段

    • pricelist_id - 相关价格单项的id
    • locale - 翻译的语言
    • title - 价格单的标题
    • description - 如果需要,价格单的描述
  1. pricelist_items。价格单项的元素。字段

    • shortcut - 用于内部使用以标识您的价格单项。例如,如果您有不同标题的相同项目
    • price - 您产品的价格。如果设置了'max_price'字段,则此字段表示最低价格。
    • max_price - 如果您的产品没有固定价格,则此字段描述最大价格。
    • price_from - 如果您产品的价格从'price'字段中设置的值开始,并且没有上限。布尔值。
    • active - 定义价格单项是否活动

    表'pricelist_items'的可翻译字段在表'pricelist_items_translations'中。表'pricelists'有多个价格单项翻译

  2. pricelist_items_translations。字段

    • pricelist_item_id - 相关价格单项的id
    • locale - 翻译的语言
    • title - 您产品的名称
    • units - 您产品可以计算的单位
  1. pricelist_pricelist_item。多对多关系的枢纽表。还包括字段'item_order',它定义了表内元素的顺序。

  2. pricelistables。多态多对多关系表。负责将价格单附加到您的价格单项模型。

使用

注册模型

为了让您的模型能够附加价格表,请将 HasPricelist 特性添加到您的模型类中

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Nestermaks\LaravelPricelist\HasPricelist;

class Offer extends Model
{
    use HasPricelist;
    ...
}

关联价格单

您可以像这样将价格表与模型关联

$offer = Offer::first();
$pricelist = Pricelist::first();

$offer->addPricelist($pricelist);

或者,您可以从模型中分离价格表

$offer->removePricelist($pricelist);

要查看模型的全部价格表

$offer->pricelists();

显示价格单和价格单项

显示所有活动的价格表

Pricelist::getActiveItems();

价格表项也是如此

PricelistItem::getActiveItems();

显示与价格表相关的价格表项

Pricelist::relatedItems();

显示包含价格表项的价格表

PricelistItem::relatedItems();

将价格单项附加到价格单并从价格单中分离

假设我们有这样的变量

$pricelists = Pricelist::all();
$pricelist = Pricelist::first();
$pricelist_items = PricelistItem::all();
$pricelist_item = PricelistItem::first();

要将项目附加到价格表

$pricelist->attachItems($pricelist_items);

或者将一个价格表项附加到多个价格表

$pricelist_item->attachItems($pricelists);

从价格表中分离项目

$pricelist->detachItems($pricelist_items);

从给定的价格表中分离项目

$pricelist_item->detachItems($pricelists);

注意,在这些情况下,参数都是集合。

在价格单内重新排序价格单项

当您将价格表项附加到价格表时,每个价格表项都会获得其顺序号。要查看价格表项在价格表中的顺序号,请使用

$pricelist->getItemOrder($pricelist_item);

或者

$pricelist_item->getItemOrder($pricelist);

要设置价格表项在价格表中的新顺序号,请使用

$pricelist->changeItemOrder($pricelist_item, 3);

或者

$pricelist_item->changeItemOrder($pricelist, 3);

第二个参数是新顺序号。在分配价格表项的新顺序号后,其他价格表项将适当地在价格表中重新排列。

API路由

您可以使用 API 调用来管理您的价格表。在配置文件中设置所需的 API 前缀或保留默认值。对于价格表和价格表项 CRUD,使用 API 资源路由和 API 资源控制器。您可以查阅 Laravel 的文档

CRUD操作

价格单

CRUD 中要使用的参数

  1. 标题
  2. 描述
  3. 语言
  4. 顺序
  5. 活动

例如,要更新 ID 为 "12" 的价格表,请发出 patch 请求

https://yoursite.com/nestermaks-api/pricelists/12?active=0&title=web site development&description=here goes description&lang=en&order=10

价格单项

CRUD 中要使用的参数

  1. 标题
  2. 单位
  3. 语言
  4. 快捷方式
  5. 价格
  6. 最高价格
  7. 价格从
  8. 活动

例如,要更新 ID 为 "12" 的价格表项,请发出 patch 请求

https://yoursite.com/nestermaks-api/pricelist-items/12?title=landing page development&units=hour&lang=en&shortcut=land-dev&price=10&max-price=15&price-from=0&active=1

将价格单附加到价格单项并从价格单项中分离

发出 POST 请求。URL 应看起来像

https://yoursite.com/nestermaks-api/pricelists/relation

参数

  1. 操作(可以是 'detachItems' 或 'attachItems')
  2. 价格表 ID
  3. 价格表项 ID

pricelist_id 和 pricelist_items_id 中的一个应该是整数,另一个应该是数组。

示例

https://yoursite.com/nestermaks-api/pricelists/relation?action=AttachItems&pricelist_id=2&pricelist_item_id=[3,4,5,6]

将价格单与您的模型关联

发出 POST 请求。URL 应看起来像

https://yoursite.com/nestermaks-api/pricelists/model

参数

  1. 操作(可以是 addPricelist 或 removePricelist)
  2. 模型名称(应该是您模型的全限定类名)
  3. 模型 ID
  4. 价格表 ID

示例

https://yoursite.com/nestermaks-api/pricelists/model?action=addPricelist&model_name=App\Models\User&model_id=2&pricelist_id=4

显示您模型的关联价格表

发出 GET 请求。URL 应看起来像

https://yoursite.com/nestermaks-api/pricelists/get/{model_name}/{model_id}

参数

  1. 模型名称(应该是您模型的全限定类名)
  2. 模型 ID

示例

https://yoursite.com/nestermaks-api/pricelists/get/App\Models\User/3

在价格单内更改价格单项的顺序

发出 POST 请求。URL 应看起来像

https://yoursite.com/nestermaks-api/pricelists/change-order

参数

  1. 价格表 ID
  2. 价格表项 ID
  3. 项目顺序(价格表项在价格表中的新顺序号)

示例

https://yoursite.com/nestermaks-api/pricelists/change-order?pricelist_id=3&pricelist_item_id=7&item_order=5

测试

composer test

变更日志

有关最近更改的更多信息,请参阅变更日志

贡献

有关详细信息,请参阅贡献指南

安全漏洞

请审查我们的安全策略,了解如何报告安全漏洞。

鸣谢

许可证

MIT 许可证(MIT)。有关更多信息,请参阅许可证文件