仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2139|回复: 20
打印 上一主题 下一主题

[学习教程] PHP网页编程之复杂的树形菜单

[复制链接]
深爱那片海 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-2-4 00:23:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
左手拿着MOTOLOLA右手拿着NOKIA,要多潇洒,有多潇洒,哈哈,终于学会了,但是可能这个时候,又会有人不经意的拍拍肩膀对你说:哥们,别高兴的太早,你还是菜鸟,离学会还差着一大截呢!菜单   <!---
  复杂的树形菜单

  徐祖宁(絮聒)
  2003.03
  czjsz_ah@stats.gov.cn

  树形菜单较滑动菜单略微庞杂一点。其次要难点在于从简约的数据描写来发生便于把持的html布局。
  本例用来展现树形菜单的编写。利用无线表格,算法上采取了递归,实际上可机关无量分制枝的树。
  本代码可自在分散。
--->
<style>
table {font-size = 9pt}
td {height = 10px}
</style>
<body>
<span id="menus"></span>
<span id="view"></span>
</body>

<script>
/**
* 机关树,初值为0
*/
function tree(n) {
    var id = new Array("bar","pad","#","+");
    if(n == 0) { // 初始化变量
        n = 1;
        i = 0;
        s = "";
    }
    s += "<table>";
    for(;i<tree_ar.length-1;i++) {
        var k = (n >= tree_ar[i+1][0])?0:1;
        s += "<tr id='"+id[k]+"' value="+i+"><td>"+id[k+2]+"</td><td>"+tree_ar[i][1]+"</td></tr>"; // 机关节点,注重这里的自界说属性value。感化是简化机关节点的描写,同享参数数组信息。
        if(n > tree_ar[i+1][0]) { // 若希冀条理大于以后条理,停止本条理前往上一条理。
            s += "</td></tr></table>";
            return tree_ar[i+1][0];
        }
        if(n < tree_ar[i+1][0]) { // 若希冀条理小于以后条理,递归进入下一条理。
            s += "<tr style='display:none' v=1><td></td><td>";
            var m = tree(tree_ar[++i][0]);
            s += "</td></tr>";
            if(m < n) { // 当递归前往值小于以后条理希冀值时,将发生一连的前往举措。
                s += "</table>";
                return m;
            }
        }
    }
    s += "</table>";
    return s;
}
</script>

<script for=pad event=onclick>
// 分枝节点的点击呼应
v = this.parentElement.rows[this.rowIndex+1].style;
if(v.display == 'block') {
    v.display = 'none';
    this.cells[0].innerHTML = "+";
    view.innerHTML = ""; // 自行修正为参数数组界说的闭合举措
}else {
    v.display = 'block';
    this.cells[0].innerHTML = "-";
    view.innerHTML = "<b>"+tree_ar[this.value][1]+"</b>"; // 自行修正为参数数组界说的睁开举措
}

/**
* 以下代码用于封闭已睁开的其他分枝
* 如需自行封闭睁开的分枝则从这里直接前往或删去这段代码
*/
if(! tree_ar[this.value].type) // 如该节点为初次进入,则纪录地点条理信息
    genTreeInfo(this);
var n = 1*this.value+1;
for(i=n;i<tree_ar.length-1;i++) { // 封闭分列在以后节点以后的树
    if(tree_ar[i].type == "pad") {
        tree_ar[i].obj2.style.display = 'none';
        tree_ar[i].obj1.cells[0].innerHTML = "+";
    }
}
while(tree_ar[--n][0] > 1); // 回溯到以后树的出发点
while(--n >= 0) // 封闭分列在以后树的出发点之前的树
if(tree_ar[n].type == "pad") {
    tree_ar[n].obj2.style.display = 'none';
    tree_ar[n].obj1.cells[0].innerHTML = "+";
}

/** 纪录条理信息,用以简化遍历树时的庞杂的节点描写 **/
function genTreeInfo(o) {
  var el = o.parentElement;
  for(var i=0;i<el.rows.length;i++) {
    if(el.rows[i].id != "") {
      tree_ar[el.rows[i].value].type = el.rows[i].id;
    }
    if(el.rows[i].id == "pad") {
      tree_ar[el.rows[i].value].obj1 = el.rows[i];
      tree_ar[el.rows[i].value].obj2 = el.rows[i+1];
    }
  }
}
</script>

<script for=bar event=onclick>
// 无分枝节点的点击呼应
view.innerHTML = "<b>"+tree_ar[this.value][1]+"</b>"; // 自行修正为参数数组界说的点击举措
</script>

<script>
/**
* 根基参数数组,依据详细使用自行扩大
* 数据可较复杂的由办事器端供应
* 列1:节点条理
* 列2:节点题目
* 其他自行扩大
*/
tree_ar = new Array(
  new Array(1,"节点1"),
  new Array(1,"节点2"),
  new Array(2,"节点3"),
  new Array(2,"节点4"),
  new Array(3,"节点5"),
  new Array(4,"节点6"),
  new Array(5,"节点7"),
  new Array(6,"节点8"),
  new Array(7,"节点9"),
  new Array(2,"节点10"),
  new Array(1,"节点11"),
  new Array(2,"节点12"),
  new Array(2,"节点13"),
  new Array(1,"节点14"),
  new Array(1,"") // 为简化终止判别附加的空数据项
);

/*** 创立菜单 ***/
menus.innerHTML =tree(0);
</script>

  会HTML吗?会,我能编好几个大表格排板的网页啦!
变相怪杰 该用户已被删除
沙发
发表于 2015-2-4 12:51:59 | 只看该作者
首先声明:我是一个菜鸟,是一个初学者。学习了一段php后总是感觉自己没有提高,无奈。经过反思我认为我学习过程中存在很多问题,我改变了学习方法后自我感觉有了明显的进步。
兰色精灵 该用户已被删除
板凳
发表于 2015-2-8 07:17:12 | 只看该作者
本文当是我的笔记啦,遇到的问题随时填充
admin 该用户已被删除
地板
发表于 2015-2-19 15:35:29 | 只看该作者
兴趣是最好的老师,百度是最好的词典。
分手快乐 该用户已被删除
5#
发表于 2015-3-6 15:04:31 | 只看该作者
你很难利用原理去编写自己的代码。对于php来说,系统的学习我认为还是很重要的,当你有一定理解后,你可你针对某种效果研究,我想那时你不会只是复制代码的水平了。
小女巫 该用户已被删除
6#
发表于 2015-3-10 01:23:49 | 只看该作者
要进行开发,搭建环境是首先需要做的事,windows下面我习惯把环境那个安装在C盘下面,因为我配的环境经常出现诡异事件,什么事都没做环境有的时候就不能用啦。
蒙在股里 该用户已被删除
7#
发表于 2015-3-17 03:38:48 | 只看该作者
环境搭建好,当你看见你的浏览器输出“it works\\\\\\\"时你一定是喜悦的。在你解决问题的时候,我强烈建议多读php手册。
只想知道 该用户已被删除
8#
发表于 2015-3-20 12:18:54 | 只看该作者
本人接触php时间不长,算是phper中的小菜鸟一只吧。由于刚开始学的时候没有名师指,碰过不少疙瘩,呗很多小问题卡过很久,白白浪费不少宝贵的时间,在次分享一些子的学习的心得。
老尸 该用户已被删除
9#
发表于 2015-3-27 20:30:52 | 只看该作者
我还是推荐用firefox ,配上firebug 插件调试js能省下不受时间。谷歌的浏览器最好也不少用,因为谷歌的大侠们实在是太天才啦,把一些原来的js代码加了一些特效。
精灵巫婆 该用户已被删除
10#
发表于 2015-4-14 05:18:29 | 只看该作者
对于懒惰的朋友,我推荐php的集成环境xampp或者是wamp。这两个软件安装方便,使用简单。但是我还是强烈建议自己动手搭建开发环境。
深爱那片海 该用户已被删除
11#
 楼主| 发表于 2015-4-16 04:09:52 | 只看该作者
这些中手常用的知识,当你把我说的这些关键字都可以熟练运用的时候,你可以选择自己
透明 该用户已被删除
12#
发表于 2015-4-23 19:12:49 | 只看该作者
本人接触php时间不长,算是phper中的小菜鸟一只吧。由于刚开始学的时候没有名师指,碰过不少疙瘩,呗很多小问题卡过很久,白白浪费不少宝贵的时间,在次分享一些子的学习的心得。
愤怒的大鸟 该用户已被删除
13#
发表于 2015-4-27 12:56:14 | 只看该作者
学习php的目的往往是为了开发动态网站,phper就业的要求也涵盖了很多。我大致总结为:精通php和mysql
飘灵儿 该用户已被删除
14#
发表于 2015-5-1 08:27:56 | 只看该作者
实践是检验自己会不会的真理。
山那边是海 该用户已被删除
15#
发表于 2015-5-4 06:27:39 | 只看该作者
开发工具也会慢慢的更专业,每个公司的可能不一样,但是zend studio是个大伙都会用的。
冷月葬花魂 该用户已被删除
16#
发表于 2015-5-8 08:33:27 | 只看该作者
Apache不是非得用80或者8080端口的,我刚开始安得时候就是80端口老占用,就用了个 81端口,结果照常,就是输localhost的时候,应该输入为 localhost:81
小魔女 该用户已被删除
17#
发表于 2015-6-24 20:51:29 | 只看该作者
写的比较杂,因为我也是个新手,不当至于大家多多指正。
第二个灵魂 该用户已被删除
18#
发表于 2015-6-28 21:26:49 | 只看该作者
当留言板完成的时候,下步可以把做1个单人的blog程序,做为目标,
灵魂腐蚀 该用户已被删除
19#
发表于 2015-7-8 03:35:21 | 只看该作者
说php的话,首先得提一下数组,开始的时候我是最烦数组的,总是被弄的晕头转向,不过后来呢,我觉得数组里php里最强大的存储方法,所以建议新手们要学好数组。
不帅 该用户已被删除
20#
发表于 2015-7-12 09:17:11 | 只看该作者
写的比较杂,因为我也是个新手,不当至于大家多多指正。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-5-2 04:58

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表