返回节点表Node模型类的数据获取演示

实例演示foreach的用法与高亮显示当前页效果
数据来源:演示站点一

一:动态演示高亮显示当前页效果(请点击下面的链接)
首页 关于我们 公司简介 企业文化 新闻中心 行业资迅 公司动态 产品展示 生活家电 智能家电 客户案例 联系我们

上面看到的是下面的10行红色代码运行结果,左边是行数,只起一个提示作用,与代码运行结果无关
1:<?php $nodetrs1 = Node::getTrs();?>
2:<?php foreach ($nodetrs1 as $key1 = > $nodetr1) { ?>
3:<?php $nodetrs2 = Node::getTrs($nodetr1['id']);?>
4:<a href="foreach.php?nid=<?=$nodetr1['id']?>"<?php if($rid == $nodetr1['id']) { echo ' style="background-color:red"'; } ?>><?=cutStr($nodetr1['name'],4)?></a>
5:   <?php if($nodetrs2) { ?>
6:      <?php foreach ($nodetrs2 as $key2 => $nodetr2) { ?>
7:         <a href="foreach.php?nid=<?=$nodetr2['id']?>"<?php if($nid == $nodetr2['id']) { echo ' style="background-color:blue;color:white"'; } ?>><?=cutStr($nodetr2['name'],4)?></a>
8:      <?php } ?>
9:   <?php } ?>
10:<?php } ?>


当前页面是哪个节点?是客户案例这个节点,当前节点id是网址中问号后面的nid的值8
当前节点的根节点是谁?是客户案例它自已,当前根节点id就是第4行代码中的$rid的这个值8

每行代码是什么意思?这里解释一下
第1行:获取一级节点的数据,具体过程是通过Node模型类的getTrs方法获取,获取到之后保存到$nodetrs1这个变量中
第2行:开始循环一级节点的数据,代码中的左花括号"{"是循环的开始符号,点击这里了解代码中的$key1与$nodetr1
第3行:获取二级节点的数据,具体过程是通过Node模型类的getTrs方法获取,方法中传递一级循环中当前一级节点的id
第4行:循环输出带链接的a标签,href是链接地址,<?php if($rid == $nodetr1['id']) { echo ' style="background-color:red"'; } ?>这些代码的意思是如果根节点id等于循环中当前一级节点的id,那么输出 style="background-color:red"这些字符串,这些字符串的作用是设置a标签的背景色为红色的样式,注意style有一个空格
第5行:如果获取到了二级节点的数据,代码中的左花括号"{"是IF语句的开始符号
第6行:开始循环二级节点的数据,代码中的左花括号"{"是循环的开始符号,点击这里了解代码中的$key2与$nodetr2
第7行:循环输出带链接的a标签,<?php if($nid == $nodetr2['id']) { echo ' style="background-color:blue;color:white"'; } ?>这些代码的意思是如果当前节点id等于循环中当前二级节点的id,那么输出 style="background-color:blue;color:white"这些字符串,这些字符串的作用是设置a标签的背景色为蓝色,字体颜色为白色的样式,注意style也有一个空格
第8行:代码中的右花括号"}"是循环二级节点数据的结束符号,对应第6行的左花括号"{"
第9行:代码中的右花括号"}"是IF语句的结束符号,对应第5行的左花括号"{"
第10行:代码中的右花括号"}"是循环一级节点数据的结束符号,对应第2行的左花括号"{"

下面看到的就是上面红色代码中第2行的$key1与$nodetr1,左边的数字就是$key1,数字右边的就是$nodetr1
0
10首页index.php21101112147483647index.html关键词1_关键词2_关键词3关键词1,关键词2,关键词3这里是描述
1
50关于我们31100051619062482gywm/
2
60新闻中心news.php41101161620343262xwzx/
3
70产品展示product.php41101171619500695cpzs/
4
80客户案例case.php41101181619058515khal/
5
90联系我们contact.php21100091619058533lxwm/
说明:上面$key1其实是循环中的序号,也叫键,也叫索引,多种叫法其实都是一个意思,注意序号是从0开始的,不是从1开始的

下面看到的就是上面红色代码中第6行的$key2与$nodetr2,左边的数字就是$key2,数字右边的就是$nodetr2
0
325公司简介about.…21100032161906…gywm/i…
1
335企业文化about.…21100033161906…gywm/q…

0
356行业资迅news.p…41101134162026…xwzx/h…
1
346公司动态news.p…41101135162026…xwzx/g…

0
367生活家电produc…41101136161906…cpzs/s…
1
377智能家电produc…41101137161906…cpzs/z…



二:一级节点中的最后一个二级节点与一级节点中的最后一个节点高亮显示效果演示
首页 关于我们 公司简介 企业文化 新闻中心 行业资迅 公司动态 产品展示 生活家电 智能家电 客户案例 联系我们
1:<?php $nodetrs1 = Node::getTrs(); ?>
2:<?php foreach ($nodetrs1 as $key1 => $nodetr1) { ?>
3:<?php $nodetrs2 = Node::getTrs($nodetr1['id']);?>
4:<span<?php if(count($nodetrs1) == ($key1+1)){ echo ' style="background-color:red"';}?>><?=cutStr($nodetr1['name'],4)?></span>
5:    <?php if($nodetrs2) { ?>
6:        <?php foreach ($nodetrs2 as $key2 => $nodetr2) { ?>
7:            <span<?php if(count($nodetrs2) == ($key2+1)){ echo ' style="background-color:blue;color:white"'; } ?>><?=cutStr($nodetr2['name'],4)?></span>
8:        <?php } ?>
9:    <?php } ?>
10:<?php } ?>


1:如果要一级节点中第一个节点高亮显示时怎么改代码?
将第4行代码中的count($nodetrs1) == ($key1+1) 换成 $key1 == 0

2:如果要一级节点中的第一个二级节点高亮显示时怎么改代码?
将第7行代码中的count($nodetrs2) == ($key1+1) 换成 $key2 == 0

3:如果不需要一级节点中第一个节点高亮显示时删除下面的代码
<?php if($key1 == 0){ echo ' style="background-color:red"';}?>

4:如果不需要一级节点中的第一个二级节点高亮显示时删除下面的代码
<?php if($key2 == 0){ echo 'style="background-color:blue;color:white"'; } ?>


三:foreach循环中break的用法(使用break实现只取一级节点中的前4条数据与二级节点中的前2条数据效果)
首页关于我们 公司简介 企业文化新闻中心 行业资迅 公司动态产品展示 生活家电 智能家电
1:<?php $nodetrs1 = Node::getTrs(); ?>
2:<?php foreach ($nodetrs1 as $key1 => $nodetr1) { ?>
3:<?php $nodetrs2 = Node::getTrs($nodetr1['id']);?>
4:<?=cutStr($nodetr1['name'],4)?>
5:    <?php if($nodetrs2) { ?>
6:        <?php foreach ($nodetrs2 as $key2 => $nodetr2) { ?>
7:            <?=cutStr($nodetr2['name'],4)?>
8:            <?php if($key2 == 1) { break; } ?>
9:        <?php } ?>
10:    <?php } ?>
11:    <?php if($key1 == 3) { break; } ?>
12:<?php } ?>


1:改变第11行代码中的数字,就可以控制取出来的一级节点数据的条数
2:改变第8行代码中的数字,就可以控制取出来的二级节点数据的条数
3:规律:上面两处代码中的数字再加上1就刚好等于实际取出来的数据的条数
4:break解释:break是终止的意思,放在循环中就是用于终止循环的,当break被放在if条件语句中时,那么就是当某个条件满足时,循环就会被终止


四:foreach循环中continue的用法(使用continue实现不取一级节点中的第一条与最后一条数据、不取二级节点中的第一条与最后一条数据效果)
关于我们新闻中心产品展示客户案例
1:<?php $nodetrs1 = Node::getTrs(); ?>
2:<?php foreach ($nodetrs1 as $key1 => $nodetr1) { ?>
3:<?php if($key1 == 0 || ($key1 == count($nodetrs1)-1)) { continue; } ?>
4:<?php $nodetrs2 = Node::getTrs($nodetr1['id']);?>
5:<?=cutStr($nodetr1['name'],4)?>
6:    <?php if($nodetrs2) { ?>
7:        <?php foreach ($nodetrs2 as $key2 => $nodetr2) { ?>
8:            <?php if($key2 == 0 || $key2 == (count($nodetrs2)-1)) { continue; } ?>
9:            <?=cutStr($nodetr2['name'],4)?>
10:        <?php } ?>
11:    <?php } ?>
12:<?php } ?>


1:第3行代码用于控制不取一级节点的哪几条数据
2:第8行代码用于控制不取二级节点的哪几条数据
3:continue解释:continue是继续的意思,放在循环中就是用于跳过当前循环继续执行下一次循环