Submitted by 淡水河边 on 2007, November 17, 11:39 AM
要实现无限级分类,递归一般是第一个也是最容易想到的,但是递归一般被认为占用资源的方法,所以很多系统是不考虑使用递归的
本文还是通过数据库的设计,用一句sql语句实现
数据库字段大概如下:
-----------------------------------------------------------------------------------
id 编号
fid 父分类编号
class_name 分类名
path 分类路径,以 id 为节点,组成类似 ,1,2,3,4, 这样的字符串
----------------------------------------------------------------------------------
可以假设有如下的数据
id fid class_name path
----------------------------------------------------
1 0 分类1 ,1,
2 0 分类2 ,2,
3 1 分类1-1 ,1,3,
4 1 分类1-2 ,1,4,
5 2 分类2-1 ,2,5,
6 4 分类1-2-1 ,1,4,6,
----------------------------------------------------
PHP代码
- <?php
- $sql="SELECT * FROM tree order by path";
- $result=$nbs->Query($sql);
- while($rows=$nbs->fetch_array($result)){
- if(substr_count($rows['path'],',')>2){
- for($i=0;$i<(substr_count($rows['path'],',')-2);$i++)
- echo ' ';
- }
- echo $rows['class_name'].'<br>';
- }
- ?>
其中$nbs是数据库操作类,此方法简单明了!
原文地址:http://www.phpangel.cn/php/unlimited-categories.html
Tags: 递归, 无限分类
网站|PHP学习 | 评论:0
| Trackbacks:0
| 阅读:1027
Submitted by 淡水河边 on 2007, November 17, 9:57 AM
Submitted by 淡水河边 on 2007, November 16, 10:53 PM
淡水河边php视频教程基础篇终章。
基于一个php的留言本的讲解。
a部分说明了数据库的设计和一些公用的功能模块,以及显示留言这一块(包含了分页)。
b部分说明了发布留言,管理登录,审核留言,删除留言,删除回复,管理员登出。
» 阅读全文
Tags: php视频教程
网站|PHP学习 | 评论:0
| Trackbacks:0
| 阅读:1769
Submitted by 淡水河边 on 2007, November 14, 4:24 PM
动态生成单选按钮和动态生成多选。html表单的重复提交,安全等问题
» 阅读全文
网站|PHP学习 | 评论:0
| Trackbacks:0
| 阅读:1259
Submitted by 淡水河边 on 2007, November 11, 9:27 PM
这两天的光阴我打发得甚是无趣。
就和今天在菜市场边上,看到的身穿蓝缎古装买武大郎炊饼的情景一样。
就是把php视频教程的第六集录完了。说了一些session和cookie的东西。东西不多,本不算一集的,但是不在状态,就不多录了。视频可以到php同盟会下载。
生活|我的生活 | 评论:0
| Trackbacks:0
| 阅读:1014
Submitted by 淡水河边 on 2007, November 10, 10:33 AM
我上次的文章( tinybutstrong的By-Page分页插件使用)是按官方是实例用的数组做的,可能说明不够本地话。这次,我使用了mysql做的。tinybutstrong其实已经集成了部分sql的操作,我们只要输入sql语句就可以了。以前淡水河边使用了adodb,这样效率就没那么高了,模板解析一次(包括了数据库的调用解析,就算没有调用,至少有个判断啥的操作),adodb类又是比较庞大的类库,又是判断啥的操作。所以效率肯定没有直接用tinybutstrong内封装好的数据操作高。
» 阅读全文
Tags: tinybutstrong, 分页
网站|PHP学习 | 评论:0
| Trackbacks:0
| 阅读:1034
Submitted by 淡水河边 on 2007, November 8, 5:38 PM
PHP代码
- $GLOBALS['_start_time_'] = array_sum(explode(' ', microtime()));
-
-
-
- function debug_using()
- {
- echo '执行时间:'.(array_sum(explode(' ', microtime()))-$GLOBALS['_start_time_']).' 秒.<br>';
- if (function_exists('memory_get_usage')) {
- echo '内存使用:'.number_format(memory_get_usage()).' 字节.<br>';
- }
- }
…………
网站|PHP学习 | 评论:0
| Trackbacks:0
| 阅读:864
Submitted by 淡水河边 on 2007, November 8, 4:01 PM
附件: tbs_db_plus.rar (1.63 K, 下载次数:22)
Tags: tinybutstrong, adodb学习, adodb
网站|PHP学习 | 评论:0
| Trackbacks:0
| 阅读:873
Submitted by 淡水河边 on 2007, November 8, 1:59 PM
发完邮件之后,我又对着电脑屏幕盯了半天,显然我奢望立刻能得到什么回复。不过可惜没有,我直盯到双眼发酸,也没见到什么动静,无奈之下,起身去厨房找吃的。
找了一圈忽然在厨房的角落里发现一只小强,然后拿起一只拖鞋和它奋战了好久,从厨房一路追杀到厕所里,才终于将它消灭,此时却累得不轻,喘息未平却有些茫然了。
我拿着拖鞋,一屁股坐在马桶上,这模样有些深沉,随后我陷入沉思。
我到底在做什么?
这个问题有些太过深奥了,于是我干脆跳开,那么下一个问题是,我接下来,该做些什么?
——邪气凛然
乱谈|杂七杂八 | 评论:0
| Trackbacks:0
| 阅读:742
Submitted by 淡水河边 on 2007, November 8, 10:57 AM
a,
你可以合并数块具有相同的数据显示,他们的名字分开,由逗号在blockname参数。在这种情况下,就只执行一次查询,并缓冲记录并填充到块。
示例:
PHP代码
- $TBS->MergeBlock('block1,block2,block3','mysql','SELECT * FROM MyTable');
b,
[block1.#] :在块中时,合并成当前的行号。如果放到块外,就是显示记录总数。
c,
[block1.$]:虚拟的“$”列,将显示当前的纪录的key,如果数据源是一个php数组
d,
如果数据源的参数是“”,那么,当合并一个空的array时,所有的块和sections 都会被删除。
PHP代码
- $TBS->MergeBlock('b1','clear');
e,
block块的循环的特殊用法:
<table><tr>[b1.field1;block=tr+tr+tr]</tr><tr>...</tr><tr>...</tr></table>
上例会循环三个连接着的tr标签。
... <span>...</span><div>[b1.field1;block=span+(div)]</div> ...
上例会一起循环span和div
... <span>...</span> <div>[b1.field1;block=span+(div)+table]</div> <table>...</table> ...
上例会一起循环span,div和table
<div> <div> [b1.field1;block=((div))] </div> </div>
上例会循环外侧的div
f,
bmagnet=expr
如果数据源为空,那么用bmagnet指定的标签将会删除。示例:
为确保php代码不会出错,在为空的情况下,我们可以给它赋值为没有item的空数组,示例:
PHP代码
- if (is_null($data)) $data = array();
- $TBS->MergeBlock('b1',$data);
注意在使用tbs时,有时需要实时刷新的。在php里用
PHP代码
- header("expires:mon,26 jul 1997 05:00:00 gmt");
- header("cache-control:no-cache,must-revalidate");
- header("pragma:no-cache");
无效,而是在html模板里使用
XML/HTML代码
- <META HTTP-EQUIV="pragma" CONTENT="no-cache">
- <META HTTP-EQUIV="Cache-Control" CONTENT="no-cache, must-revalidate">
- <META HTTP-EQUIV="expires" CONTENT="Wed, 26 Feb 1997 08:21:57 GMT">
- <META HTTP-EQUIV="expires" CONTENT="0">
Tags: tinybutstrong
网站|PHP学习 | 评论:0
| Trackbacks:0
| 阅读:829