无限级联动

无限级联动 (分级 )(tp5) 思路:建表 :   具体实现的代码: 展示的效果 <!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>联动</title> </head> < 阅读详情

在做商城网站的开发,考虑到商品表有很多一级级的分类,从一级二级到N级下才是商品本身,所以做了一个无限级的联动


add.HTML页面的代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />


<script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.8.0.js">
</script>
</head>

<body>

<script>

function change(obj){
        //负责判断要删除的level标签数字,因为删除的是他下一级的内容所以要加1
        var level=$(obj).attr("level");
        if(typeof(level)=="undefined"){
            //alert("undefined==undefined");
        }else{
            var dellevel=parseFloat(level)+parseFloat(1);
            var jianlevel=parseFloat(level)-parseFloat(1);
        }
        //value选择的分类ID
        var value=$(obj).val();
        if(value==0){
            if(level==1){
                $(".sel").remove();
                $('#pid').val(value);
                $('#level').val(level);
            }else if(level>1){
                $("#"+dellevel).remove();
                //alert(jianlevel);
                var newpid=$("[name='level"+jianlevel+"']").val();
                //alert($('#level1').val());
                $('#pid').val(newpid);
                $('#level').val(level);
                
            }
            return false;
        }else{
           $('#level').val(dellevel);
           $('#pid').val(value);
        }
        var url='__APP__/Commodity/ajaxlevel';
            $.ajax({
                url:url,
                cache:false,
                dataType:'html',
                type:'post',
                data:{
                    pid:function(){
                        return value;
                    }
                },
                success:function(data){
                    if(data==2){
                        //错误
                        $("#"+dellevel+"").remove();
                    }else{
                        $("#"+dellevel+"").remove();
                        $('#nimei').before(data);
                    }
                },
                error:function(){
                    alert('网络异常');
                }
            });
    
}

</script>

<form method='post' id="form1" action="__URL__/insert/" enctype="multipart/form-data">
<table border="0" align="center" cellpadding="0" cellspacing="0" class="add">

<tr>
          <td align="right">类别:</td>
          <td>
              <select id="is_leaf" name="is_leaf">
                <option value="2">分类</option>
                <option value="1">商品</option>
              </select>
          </td>
      </tr>
      <tr>
        <td align="right">商品名字:</td>
        <td><input id="commodity_name" name="commodity_name" type="text" class="input" maxlength="30"  value=""/>&nbsp;<font class="red">*</font></td>
      </tr>
      <tr>
        <td align="right">商品总数:</td>
        <td><input id="commodity_number" name="commodity_number" type="text" class="input" maxlength="30"  value=""/>&nbsp;<font class="red">*</font></td>
      </tr>
      <tr>
        <td align="right">商品单价:</td>
        <td><input id="commodity_price" name="commodity_price" type="text" class="input" maxlength="30"  value=""/>&nbsp;<font class="red">*</font></td>
      </tr>
      <tr>
        <td align="right">商品简介:</td>
        <td><input id="commodity_brief" name="commodity_brief" type="text" class="input" maxlength="30"  value=""/>&nbsp;<font class="red">*</font></td>
      </tr>

<tr>
        <td align="right">商品层级:</td>
        <td><input id="level" name="level" readonly="readonly" type="text" class="input" maxlength="30"  value="1"/>&nbsp;<font class="red">*</font></td>
      </tr>
      <tr>
        <td align="right">商品父级ID:</td>
        <td><input id="pid" name="pid" readonly="readonly" type="text" class="input" maxlength="30"  value="0"/>&nbsp;<font class="red">*</font></td>
      </tr>
      <tr id="1">
          <td  align="right">第1级:</td>
          <td>
             <select onchange="change(this)" class="level" name="level1" id="level1" level="1">
                <option value="0">请选择</option>
                {$level1}
             </select>
          </td>
      </tr>
      <input type="hidden" id="nimei">

<tr>
        <td align="right">&nbsp;</td>
        <td><input name="button" type="submit" class="button" id="button" value="确定新增" onClick="getcontent()"/>
          &nbsp;&nbsp;
        <input name="button" type="button" class="button" id="button" value="取 消" onclick="javascript:history.go(-1)" /></td>
      </tr>

</table>
  </form>

</body>

</html>



TP的CommodityAction代码

//商品管理
class CommodityAction extends CommonAction{

//新增页面
    public function add() {
        $model=D('Commodity');
        $level1=$model->selectlevel(1,2);
        $option1=level($level1);
        // print_r($option1);exit;
        $this->assign('level1',$option1);
        $this->display();
    }

//无限级联动
    public function ajaxlevel(){
        // print_r($_REQUEST);exit;
        $pid=$_REQUEST['pid'];
        $model=M('Commodity');
        $rs=$model->where("pid=".$pid." and status=1 and is_leaf=2")->select();
        // echo $model->getLastSql();exit;
       
        if($rs){
            $level=$rs[0]['level'];
            $optionsel='<tr class="sel" id="'.$level.'"><td align="right">第'.$level.'级:</td><td><select   level="'.$level.'" onchange="change(this)" class="level" name="level'.$level.'"><option value="0">请选择</option>';
            $option1=level($rs);
            $optionend='</select></td></tr>';
            $option=$optionsel.$option1.$optionend;
            echo $option;
            // print_r($rs);
        }else{
            echo 2;
        }
    }
   
        //执行添加操作
    public function insert() {
        
        $model = D('Commodity');
        $rs=$model->insert();
        if($rs>0&&is_numeric($rs)){
            $this->success('添加成功',U('Commodity/index'));
        }else{
            $this->error('添加商品失败,错误原因:'.$rs);
        }
    }

}


common.php的自定函数部分

function level($rs){
    $option='';
    foreach($rs as $k=>$v){
        $option.='<option value="'.$v['id'].'">'.$v['commodity_name'].'</option>';
    }
    return $option;
}


TP的CommodityModel代码

class CommodityModel extends CommonModel {

//执行添加操作
    public function insert(){
        // print_r($_REQUEST);exit;
        $data['commodity_name']=(trim($_REQUEST['commodity_name']));
        $data['commodity_number']=(trim($_REQUEST['commodity_number']));
        $data['commodity_price']=(trim($_REQUEST['commodity_price']));
        $data['commodity_brief'] = trim($_REQUEST['commodity_brief']);
        $data['status']=(trim($_SESSION['status']));
        $data['status']=1;
        $data['is_leaf']=trim($_REQUEST['is_leaf']);
        $data['level']=trim($_REQUEST['level']);
        $data['pid']=trim($_REQUEST['pid']);
        $data['createtime']=time();
      
        if( $this->create( $data ) ) {
            return $this->add();
        } else {
            return $this->getError();
        }
        
    }

}


sql表创建语句

CREATE TABLE `zx_commodity` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
  `commodity_name` varchar(100) COLLATE utf8_unicode_ci NOT NULL COMMENT '商品名字',
  `pid` int(11) NOT NULL COMMENT '父ID',
  `level` tinyint(3) unsigned NOT NULL COMMENT '层级',
  `is_leaf` tinyint(1) unsigned NOT NULL COMMENT '类型:1商品,2分类',
  `commodity_number` int(10) unsigned NOT NULL COMMENT '商品数量',
  `commodity_price` int(10) unsigned NOT NULL COMMENT '商品价格',
  `commodity_brief` longtext COLLATE utf8_unicode_ci NOT NULL COMMENT '商品简介',
  `commodity_introduction` longtext COLLATE utf8_unicode_ci NOT NULL COMMENT '商品介绍',
  `image_url` varchar(500) COLLATE utf8_unicode_ci NOT NULL COMMENT '图片地址',
  `status` tinyint(1) unsigned NOT NULL DEFAULT '1' COMMENT '是否启用:1启用,0停用',
  `is_delete` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '是否已经删除:1已删除,0未删除',
  `createtime` int(11) NOT NULL COMMENT '创建时间',
  `tstamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间戳',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='兑换商品表';

5-EP4CE10F17C8-引脚配置 EP4CE10F17C8-引脚配置 阅读详情

相关推荐

网络分析工具Wireshark系列专栏:01-专栏导读

随着人工智能技术的普及,越来越的博主开始利用AI进行内容创作,导致CSDN等平台上充斥着大量低质量的洗稿文章,严重影响了技术软文的质量可信度。为了应对这一现象,提升技术内容的质量,瑞哥决定推出系列技术专栏,为大家带来系统、深入且高质量的技术学习资源。这些专栏将帮助读者从入门到精通,特别适合习惯通过文档学习的技术爱好者。作为首个专栏,我们将聚焦于Wireshark——一款广受欢迎的网络协议分析工具。根据CSDN后台的反馈,许读者表示Wireshark是他们欠缺的一项技能。因此,本专栏将通过精心设计的课程

网络技术联盟站 341

php+mysql无限级分类用js联级select控制

在做cms的时候,涉及到无限级分类,比如,添加信息的时候需要择目录, 这时候,就要做类似于省市联级菜单的效果去给用户择 ,代码不是特别漂亮,但是简洁,很方便使用 ~ 主要实现方法是 ajax ID去请求子目录, 或者请求父目录,然后用js去控制select。最终实现了~~ 加qq群110759589 可与本人具体交流~

Ajax技术实现无限级联动下拉框项目实战

Ajax(Asynchronous JavaScript and XML)是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。它允许网页动态地读取服务器上的数据,并在用户界面上进行展示。通过Ajax,前端页面可以仅通过JavaScript异步地与后端服务器交换数据。用户在使用联动下拉框时,首先会与最顶层的下拉菜单进行交互。一旦用户择了其中一个项,页面就会异步地向服务器发出请求,获取与之相关联的次级数据。然后,次级下拉菜单会根据这些数据进行更新,展示新的项列表供用户择。

weixin_32869687的博客 1022

推荐 Layui select 无限级联动

回显无限级联动的时候,作为有个后端的来说,前端能力肯定有时候不足,只能有时候依靠前端的插件,后端的我们只需要把业务数据返回就可以了。 具体效果: layui官网下载 码云下载 最后当然要感谢作者。 ...

xhangs的博客 2604

二级联动 三级联动 联动 无限级联动下拉列表或菜单专题

二级联动 三级联动 联动 无限级联动下拉列表或菜单专题 三维数组数据源  A - 请择 - 北京市 天津市 河北省 山西省

柳永法的个人博客 1万+

multiselect实现单_UICollectionMultiselect(无限层级、无限层级单

最近在做项目,需要弄一个层级(层级数量不定)的联动择功能,本来想在github或者cocoachina找一下基本样例或者第三方库的,但是找到的都是限制层级的,一般为二层级、三层级,并不满足要求,于是自己抽时间写了一个,希望各位给出指点或意见。1、先上一波操作2、实现思路现在我实现的方式是上下两个UICollectionView,a、 上面的UICollectionView(下面简称:org...

weixin_39763902的博客 368

[php类]级类别树的生成(无限级select,二级管理菜单,无限级meizz的树)

数据库查询:2次。正则搜索查询到的结果,最后生成树的字串。http://gudai.cnblogs.com/gallery/image/20577.html下载地址:http://www.cnblogs.com/Files/gudai/tree0.31.zip效果图 

BigMonster's Blog 1881

select 联动代码优化

接上一篇,对应的代码优化 原来的代码,在每次change都回去重新set selectListObj,但其实只用更改比当前优先级低的selectList。所以这是优化的第一点。 原来在新增一个优先级时,也会把之前的所有level对应的selectList重新更新一次。但其实只用添加新一级的selectList。 在原来代码中,并没有处理,若先择了低优先级,但高优先级择了低优先级同样的code时,并未做处理,但实际上,需要将低优先级的code清空,以高优先级的code为主。 基于以上三个方面,列出了2个

effort期待 309

ajax+jQuery 无限级联动

今天也算是有一些时间。所以来整理这个资料,无限级联动在开发当中很有用的 我就以ecshop中的栏目表为例 第一步:建表 CREATE TABLE  `category` (   `cat_id` smallint(5) unsigned NOT NULL AUTO_INCREMENT primary key,   `cat_name` varchar(90) NOT NULL DEFAU

u011691759的专栏 1893

无限级联动菜单

          无限级联动菜单        body, td    {      font-family: 宋体;      font-size: 12px;    }    function GetResult(str,classid){alert(str);/**--------------- GetResult(str,classid) -----------------* GetRe

gbsck的专栏 1050

无限级菜单结构 与 列表框无限级联动, 类 XSelect by shawl.qiu

无限级菜单结构 与 列表框无限级联动, 类 XSelect by shawl.qiu压缩包包含:XSelect v1.0, XMenu v1.3, Select v1.3.1, Menu v1.0.1(带X的是单表, 不带X的是表.)说明:继上一篇文章:无限级菜单结构 与 Javascript 实现算法, 类 XMenu by shawl.qiuhttp://blog.csdn.net/bt

星☆空 | 对生活要知足,学习要不知足,为人处事要知不足. 卍 ♂ | ♀ 卐 - 科技以人为本. 4776

ASP + XML + JavaScript 实现动态无限级联动菜单

我做某个项目时,有需求的是做一个动态的无限级联动菜单。由于本人比较懒于是上网找找有关的代码,但很都没有满足需求,其中有一编文章是用 JavaScript对XML文件操作来实现无限级联动菜单的,我们可结合ASP来完成对数据库值的读取,然后写入XML文件,再用JavaScript 读出来并且控制它的联动。这儿的关键是把数据库内的N层数据类读出来然后正确写入XML文件中:我的数据库表结构是这样的:

我的天堂 681

jsp ajax下拉框无限级联动

好久没写博客了,最近有点新的收获所以将成果写上来,来表示我的喜悦心情。ajax这个东西以前一直没用过,就知道好,今天终于做了第一个ajax程序,实现下拉框无限级联动!本人本着开源原则,代码公开,与大家分享,提宝贵意见!   chatercreate.jsp//这是显示页

2789

ajax php mysql无限级联菜单 联动菜单 二级联动 三级联动菜单

ajax php mysql无限级联菜单 联动菜单 二级联动 三级联动菜单 无限级联菜单 联动菜单 二级联动 三级联动菜单有几个级别的菜单就显示级别 本例是《ajax php 动态读取的级联菜单 联动菜单》的扩展,由二级联动扩展到无限级 演示     XML/HTML Code &lt;div id="show_sub_categories"&gt;     ...

freejs 461

javascript无限级联动菜单

  javascript无限级联动菜单  body,td,select { font-family: Verdana,"宋体"; font-size:12px;}.mousehand{ cursor:pointer; font-size:12px; padding-left:10px; text-align:left;}.titletable{ padding-left:5px; back

luzuocheng_1503的专栏 887

跟十八哥学php之—无限级联动下拉菜单,jQuery无限级联动下拉择插件

插件描述:无限级联下拉择器,可以随意配置级联数量,没有上限,最小一个。jquery插件形式。数据结构简单。简单易用,快速上手。可配置级别的联动下拉择器config 属性:*@width:200,//宽度,默认自动*@height:32,//高度,默认30px*@levels:3,//联动级别数量,默认3级,可配置范围1-n,理论上没有上限*@da...

weixin_32049741的博客 445

ASP+XML+JavaScript实现动态无限级联动菜单

<!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--><script type="text/javascript"

zgqtxwd的专栏 626

以xml数据源作无限级联动下拉框

以xml数据源作无限级联动下拉框 1.当前要准备好js,下面的代码在网上下的,作者不可考,向这位IT工作者致敬! linkage.js (仅在changeLinkage方法中加入一个SetAssociatedDropDownListValue(element);) 此js库依赖于prototype.js而运行,网上到处有下的var Linkage = Class.create();Li

kgdlin的专栏 650

YALMIP-master.zip

YALMIP源码

上一篇: 富文本编辑器
下一篇: PHPExcel导入EXCEL文件到数据库
crimeheaven
博客等级 码龄14年 1粉丝 22原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值