thinkphp模仿ECSHOP进行数据保存

这篇博客介绍了如何使用ThinkPHP模仿ECSHOP进行多属性价格和库存的保存。文章详细阐述了数据库设计、前端页面及后台处理流程,并强调了将数据尽可能完整地传到后台的重要性,以解决复杂业务逻辑。

前面我写过一篇关于ecshop的如何存储商品数量的:ecshop保存价格和数量,今天我尝试了一下自己去写,虽然没有写全,但是还是很爽的。还有我是参考了ECSHOP存储数据的格式,但是没有参考他的源码。还有下面的内容只是为了帮助我以后能更好的理解,所以基本没有直接贴代码,或者给全部代码。还有,我只能说按照这样的形式是可以实现功能的,至于是不是最优解,那么我就真的不知道了,人总要有点自信嘛。

多属性价格保存

具体数据库设计

goods_attr

  • id
  • attr_id
  • goods_id
  • attr_values
  • attr_price

products

  • product_id
  • goods_id
  • goods_attr
  • product_number

 前端页面

首先就是商品的输入页面,先看效果图:

这里写图片描述

这里具体的输入格式是这样的:

<!--
根据商品的attr_input_type进行选择下面输入方式,具体的值如下:
手工输入:0
下拉框选择:1
多文本输入:2
-->
<input type='text' name='attr_values["+val.attr_id+"][]'>
<select name='attr_values["+val.attr_id+"][]'>
<textarea name='attr_values["+val.attr_id+"][]'>

重点是name的设置:attr_values[“+val.attr_id+”][],如果要输入同一属性的多个值下的多个价格的话,那么就把上面的内容复制一份,进行输入就可以了。

接着就是判断attr_type了,如果attr_type是单选属性或者复选属性的话,那么就在后面添加一个输入价格的输入框,这个价格的格式是这样的:

价格:<input type='text' name='attr_price["+val.attr_id+"][]'><br>

按照这样的格式输入完成后,先来看传入的参数:

这里写图片描述

最后是后台使用var_dump打印的数据:

这里写图片描述

可以看到,上面的attr_values下不同的值是以数组的形式保存的,所以可以传入多个单选属性,复选属性或者唯一属性。

而同时,attr_price下面也是数组形式,这就能保证同一属性下的不同值下能设置不同的价格,这也就是想ECSHOP处理的那样,在勾选一个单选属性或者复选属性之后,价格会产生变化。

后台处理

其实数据都传到了后台了嘛,怎么处理其实就是一样的了,基本是代码了,我就不贴了,因为基本就是一个很烦取数据,组合成数组的过程。

库存数量保存

同样先来看商品的效果图:

这里写图片描述

在这里的表格列数(属性1,属性2,属性3等)需要根据你的商品有多少属性具体生成,其中的每一列都需要设置一个下拉菜单,其中保存有该商品所拥有的属性的全部可选值,这里就结合上面的数据库结构,看看下面的代码就可以了,这里还是简单的:

调用该方法时需要传入进行设置的商品id。

public function addStore($goods_id){
    $attr_values=array();
    $attr_ids=M('goods_attr')->where('goods_id='.$goods_id)->field('distinct attr_id')->select();
    $rows=count($attr_ids);
    foreach ($attr_ids as $attr_id){
        $attr_values[$attr_id['attr_id']]=M('goods_attr')->where('attr_id='.$attr_id['attr_id'])->select();
    }
    $this->assign('goods_id',$goods_id);
    $this->assign('count',$rows);
    $this->assign('attr_values',$attr_values);
    $this->display('Goods/add2');
}

接着就是前台页面的显示:

<table border="1">
<tr>
    <th>新增</th>
    <volist name="attr_values" id="temp">
        <th>属性{$i}</th>
    </volist>
        <th>库存数量</th>
</tr>
<tr>
<!--这里添加增加下一列的事件-->
    <td><a href="#">+</a></td>
    <volist name="attr_values" id="attr_values">
        <td>
            <select>
                <volist name="attr_values" id="values">
                    <option value="{$values.id}">{$values.attr_values}</option>
                </volist>
            </select>
        </td>
    </volist>
    <td><input type="text" name="product_number[]"></td>
</tr>
</table>
<button>确定</button>

后面需要用js读取值来传入进行存储,由于有专门的前端人员,所以。。。。。我就不想考虑了。。。。。。好吧,我是懒了很多。。。。。。。

总结

这个玩意我写之前都在考虑怎么办,觉得会很难,总是在考虑这考虑那的,结果被我拖了4天,可是后来自己写完之后才发现,基本靠这两条原则:

  • 什么都不要多想,把数据尽量多的传入后台,只要有数据,就不会愁处理数据的过程
  • 前台显示可能一下子没有思路,或者觉得很难,套用一句毛泽东的话:都是纸老虎,慢慢试,现在技术这么发达,肯定能解决你的问题
(一) 系统管理:菜单权限、前台菜单、角色管理、职员管理、登录日志、操作日志、图片空间、商城消息、风格设置、计划任务 (二) 基础设置:商城配置、导航管理、广告管理、广告位置、银行管理、支付管理、地区管理、友情链接、快递管理、消息模板 (三) 会员管理:会员等级、会员管理、账号管理 (四) 文章管理:文章管理、文章分类 (五) 运营管理:推荐管理、商品推荐、店铺推荐、品牌推荐、财务管理、资金管理、提现管理 (六) 订单管理:订单管理、订单管理、投诉管理、退款管理 (七) 广告管理:广告位置、广告管理 (八) 商品管理:商品管理、已上架商品、待审核商品、违规商品、商品分类、商品属性、品牌管理、商品规格、评价管理 (九) 虚拟物品自动发货:虚拟商品上架、卡密管理、自动发货 (十) 扩展管理:插件管理、钩子管理 (十一) 分销管理:分销管理菜单、分销商品列表、佣金分成列表、推广用户列表 (十二) 数据分析:商品销售排行、店铺销售统计、销售额统计、销售订单统计、新增会员统计、会员登录统计 (十三) 营销管理:满减、满送、满包邮,优惠券功能,三级分销,商品团购,限时拍卖 (十四) 微信管理:公众号设置、自定义菜单、用户管理、主动回复文本信息、主动回复图文信息、微信消息模板 (十五) 支付管理:支付宝支付,微信支付、货到付款、积分支付、余额支付 (十六) 短信接口:阿里大于 (十七) 物流接口:快递100接口
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值