sspanel v3魔改版添加功能之——限售(库存为0自动下架)
sspanel v3魔改版添加功能之——限售(库存为0自动下架)
home again介绍一个好玩的功能,模拟实体商品库存限制,比如一个套餐卖了10个后,套餐库存不足自动下架。此限量售卖功能较好的适用于特价商品限量售卖的场景中。
本篇为教程,非现成源码,需要一定的耐心和一定的技术要求。
- sspanel版本:Anankke,其他版本可能不适用。
- 要求:修改文件前务必先备份!
- 一定的php功底
初级
打开网站跟目录下的文件:app/Controllers/UserController.php ,搜索并找到如下代码:
public function buy($request, $response, $args) |
懂php的同学应该知道,上面代码为定义了一个名为:buy的函数,此函数实现了sspanel套餐的购买功能,因此我们要实现的限量售卖功能,也要从这里着手。我们在上面的代码往下找几行,就能发现这行代码:
$shop = Shop::where('id', $shop)->where('status', 1)->first(); |
我们在这行代码下添加代码。此代码表示正在购买的商品的剩余库存数量。
$stock = $shop->stock; |
添加后看下图:
获取到商品的库存数量后,我们就可以实现当任一用户成功购买一次商品后,减少一个该商品的库存数量。
$shop->stock = $stock - 1; |
当库存数量为0表示商品已售完,我们要下架该商品。status字段为0即表示下架。
$shop->status = 0; |
我们不一定所有商品都需要限量,我们可以规定库存数量为负数(小于0)即为不限量。对于不限量商品,我们无需操作。
现在我们在buy函数体内找到如下代码。如果找不到,可以使用快捷键:Ctrl+F进行文本查找。
$shop->buy($user); |
此代码表示用户成功购买了商品,接下来我们实现商品库存数量减一,如果库存数量为0就下架,不限量就不操作。再上述代码下添加如下代码。
switch (true) { |
到此我们完成了限量套餐的所有核心功能。我们现在前往数据库,一般搭建sspanel都用的是宝塔,我们在对应的数据库后面点击“管理”,就进入了网页版的数据库管理界面。进入之前确保你已经安装了phpmyadmin并处于开启状态。我们点击进入 shop 数据表,点击上方的“结构”,点击下方的“执行”。
添加一个 stock 字段,默认值为:-1,也就是默认商品都是无限量。按照下图填写即可。不要忘了保存。
所有步骤全都完成,现在来测试一下。我们点击上方的“浏览”,修改想要限量的商品的stock值为1(双击进入编辑状态,点击空白保存),表示库存只有一件,卖完就下架。然后回到sspanel网站,该买此限量商品,购买完成后查看此商品是否还在。如果商品不在就表示成功,如果商品还在请从头检查哪一个步骤出错并纠正。
中级
初级实现了限量售卖的功能,但是会涉及到直接对数据库的操作,不安全也不太方便。在初级的基础上,我们实现在sspanel后台控制商品的库存数量。
在网站根目录下找目录:/resources/views/material/admin/shop
,在这个目录下打开create.tpl文件,定位到73行并添加如下代码并保存:
<div class="card"> |
然后搜索如下代码:
content_extra: contentExtra |
紧挨这段代码下另起一行,填写如下代码。
stock: $$getValue('stock') |
在同目录下打开edit.tpl文件,定位到78行并添加上述相同的代码并保存。
<div class="card"> |
然后搜索如下代码:
content_extra: contentExtra |
紧挨这段代码下另起一行,填写如下代码。
stock: $$getValue('stock') |
在网站根目录下找到文件:/app/Controllers/Admin/ShopController.php,定位到40行并添加代码:
$shop->stock = $request->getParam('stock'); |
定位到110行并添加同样的代码:
$shop->stock = $request->getParam('stock'); |
最后效果为下图。编辑商品可以修改库存数量,无需再去数据库修改。
高级
没有高级了,中级后就可以正式使用,没其他问题。这里再修复一下初级里的一个小bug,当你手动修改商品库存为0,而没有手动下架此商品,则此商品变为了一个不限量商品。修复如下:
在根目录下打开文件:app/Controllers/UserController.php,搜索代码:
$stock = $shop->stock; |
在这段代码下方我们添加如下代码:
if($stock == 0) |
具体截图如下:
借助此功能,当手动修改库存为0时,意味着你将要下架该商品。商品不会立马下架,只要有用户该买此商品,会得到“对不起,此商品库存不足”的提示并购买失败,之后商品将从商品列表里消失。
说明
- 应用场景:对优惠套餐实现“秒杀”,增加用户抢购欲望。
- 如有遗漏、错误之处,请不吝赐教,你的建议能够帮助学者少走弯路,感谢!