TP--商品管理--添加,查询

在cate里面的edit.html加上返回按钮
<input οnclick="window.history.back(-1);" type="button" value="返&nbsp;&nbsp;回" class="btn">
window.history.back(-1);  js返回上一页的操作
---------------------------------------------
新建GoodsController.class.php   
public function index(){
$this->display();
}
先做添加
public function add(){
if(IS_POST){
看后面
}
}else{
//添加商品之前我需要知道什么东西  先知道有哪些分类
$cate = D("Cate");
$cate_data = $cate->get_list();//查询一级分类
foreach($cate_data as $key=>$val){
$data1 = $cate->get_list($val['id']);
$cate_data[$key]['son'] = $data1;//把查询到的子分类放入到当前循环的变量里面
}
$this->assign("cate_data",$cate_data);
$this->display();
}
}
用ajax形式显示分类
<tr>
<th width="120">商品分类 :</th>
<td>
<select class="J_cate_select mr10" οnchange="change_cate(this)">
<foreach name="cate_data" item="v">
<option value="{$v.id}">{$v.name}</option>
</foreach>
</select>
<select class="J_cate_select mr10" name="cate_id">
<foreach name="cate_data.0.son" item="v">
<option value="{$v.id}">{$v.name}</option>
</foreach>
</select>
</td>
</tr>
function change_cate(o){
    var p_id = $(o).val();
    $.post("{:U('Goods/change_cate')}",{cate_id:p_id},function(data){
        if(data.error==-2){
            alert(data.msg);
        }else{
            var str = '';
            $.each(data,function(k,v){
                str += '<option value="'+ v.id+'">'+ v.name+'</option>';
            })
            $("select[name='cate_id']").html(str);
        }
    },"json")
}
/**
 * ajax获取分类的方法
 */
public function change_cate(){
if(IS_AJAX){
$id = I("post.cate_id",0,"int");
$cate = D("Cate");
$data = $cate->get_list($id);
}else{
$data = array('error'=>-2,'msg'=>'错误的请求类型');
}
echo json_encode($data);
exit;
}
根据数据表在goods下面的add.html添加input框,可以把cate下面的add拿过来
然后有个商品描述,要可以添加图片的文本域,使用插件  mydome->default.html
将css和js拿过去,由于之前使用过插件,所以拿过的就不要拿了。
然后复制一个  <textarea name="content" style="width:800px;height:400px;visibility:hidden;"></textarea>
放在
<tr>
<th>商品描述 :</th>
<td>

</td>
</tr>
到给予生鲜网站去抠图
回顾事务
事务:
要么全部实现,要么全部不实现  停电  断网 ...
事务的话 表引擎必须是innodb
begin   开启事务 开启之后 begin后面的sql将不会真正对数据产生影响
sql语句集
rollback 回滚,begin后面的所有sql操作全部取消
commit 提交,让begin后面的所有sql操作对数据产生真正的影响
eg:
mysql_query("begin");//开启事务
if(mysql_query(A+7000的sql)){
if(mysql_query(B-7000的sql)){
mysql_query("commit"); A加钱成功  B扣钱成功  提交
}else{
mysql_query("rollback"); A加钱成功  B扣钱失败  回滚
}
}else{
mysql_query("rollback"); A加钱失败  回滚
}
数据表提交之后
先在GoodsModel.class.php中 写上自动验证
   protected $_validate = array(
        array('name','require','商品名字必须存在并且不能重复',1,'unique',1), //默认情况下用正则进行验证
    );
然后再GoodsController.class.php 的add中判断if(IS_POST)之后
$goods = D("Goods");
if($goods->create()){  去手册查找query (事务)  这是要用到两张表(要么同时存入成功,要么都失败)
$model = new Model();//实例化一个空的模型类
$model->startTrans();//开启事务
if($goods->add()){
$data['goods_id'] = $goods->getLastInsID();//得到上一次这个表的新增id
$data['content'] = I("post.content","","");
$goods_detail = M("goods_detail");
//因为add方法要求传入的是数组,所有我们上面把两个变量都放入$data这个数组
if($goods_detail->add($data)){
$model->commit();//都执行城的时候  我们直接提交数据
$this->success("新增成功",U('Goods/index'));
}else{
$model->rollback();//如果失败回滚
$this->error("新增失败",U('Goods/index'));
}
}else{
$model->rollback();//如果失败回滚
$this->error("新增失败",U('Goods/index'));
}
}else{
$this->error($goods->getError());
tp框架事务:
$model = new Model();//实例化一个空的模型类
$model->startTrans();//开启事务]
$model->commit();//都执行城的时候  我们直接提交数据
$model->rollback();//如果失败回滚
查询:
分类由于数据量少  不存在分页   商品数据量大  需要分页  查找手册 page
namespace Admin\Model;   查询手册ViewModel
use Think\Model\ViewModel;
class GoodsViewModel extends ViewModel{
    public $viewFields = array(        'goods'=>array('id','name','info','cate_id','img','shop_price',"market_price"),//主表以及要查询的字段   现在查询的表     'cate'=>array('name(字段)'=>'cate_name(从表和主表字段又冲突起别名)','p_id(不冲突就不起别名)','_on'=>'goods.cate_id=cate.id'),
//从表(其他表以及其他表的字段),_on表示两张表的联系关系       'goods_detail'=>array('content','_on'=>'goods_detail.goods_id=goods.id'), 从表
    );

多表联查的解决方法:
视图模型 命名  GoodsViewModel 必须继承 ViewModel
通过定义$viewFields属性来规范多表之间的关系
记住调用视图模型 使用D("GoodsView");
 public function index(){
        //先去得到总条数
        //要使用视图模型的话  不能直接使用M实例化
        $goods = D("GoodsView");  
先试用M方法 M('goods'),写了GoodsViewModel 之后改为D("GoodsView");
        $nums = $goods->count();//得到最条数
        $per_num = 1;//每页条数
        $pages = ceil($nums/$per_num);//通过先上取整得到总页数
        if($pages == 0){
            $pages = 1;//我们默认的最少要有一页
        }
        //我们假设通过get的p参数来传递页码  也就是说我们可以通过$_GET['p']的到当前页
        $p = I("get.p",1,"int");
        if($p<1){
            $p = 1;
        }else if($p>$pages){
            $p = $pages;
        }
        $data = $goods->page($p.','.$per_num)->select();
        //echo $goods->getLastSql();
        $this->assign("data",$data);
        $this->assign("pages",$pages+1);
        $this->assign("p",$p);
        $this->display();
    }




<for start="1" end="100">{$i}</for>
等价于
for ($i=1;$i<100;$i+=1){    echo $i;} 
注意:页码的时候会把页码+1然后再传递
<div class="pager">
<for start="1" end="$pages">
<if condition="$p eq $i">
<span>{$i}</span>
<else />
<a href="{:U('Goods/index',array('p'=>$i))}">{$i}</a>
</if>
</for>
</div>


价格 goods下面的index.html
<td align="center">
{$vo.shop_price}元
<font style="text-decoration:line-through">{$vo.market_price}元</font>
</td>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值