您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

discuz的数据库调用机制到底是怎么回事

2026/1/1 14:18:44发布18次查看
给100分 
最近研究discuz,看到官方包中很多htm模板中没有调用数据库的语句,几乎清一色的全是loop循环,这我就有点不明白了, 在调用前没有sql语句出现,循环什么呢?
但是事实正好相反,它是能调出来的,所以不明白它的调用机制是怎么回事!
为了更好的说明举一个例子吧!
比如下面这个loop循环:
¥ $trade[price] {lang additional} $trade[credit] {$_g[setting][extcredits][$_g['setting']['creditstransextra'][5]][unit]}{$_g[setting][extcredits][$_g['setting']['creditstransextra'][5]][title]} $trade[subject]

loop语法是这样的:if(is_array($abc)) {
      foreach($abc as $key => $val) {
        }
}
所以上面那段代码中$trades[$tid]肯定是一个数组了,即然是数组,他就是一个数据表的集合,,那么这个表php文件是如何调取的呢,还有就是这个 htm模板怎么知道它用的是哪个php里面调取的数据表 呢?
当然有人会说了:discuz的默认包,官方自己写的判断,也许是这样的,可是别忘了,程序要扩展的,如果用户自己写一个表加进去,那怎么办呢?当然了,在htm中写一个sql也是可以的,但是即然官方不这么写,我想它肯定有一个规律在里面,只是官方没有说明罢了!那么这个机制是啥呢?
希望回答时关键地方要说明,不要清描淡写!
回复讨论(解决方案) 数据库是在model中连接读取的,$trades[$tid]已经是一个数组了,当然能直接loop循环。
例如forum.php 就是获取数据的, forum.html就是view。
php里面是没有loop循环,loop是discuz的代码,模版是预先编辑好的,你可以在discuz根目录/data/template下看见很多编译好的文件,里面就变成了foreach
htm模板怎么知道它用的是哪个php里面调取的数据表呢?
这个你可以根据链接来找
如:forum.php?mod=viewthread&tid=1
forum.php就是根目录下的入口文件(还有home.php)
mod=viewthread,最后一句引入了另外一个文件(根据mod可知引入的文件是/source/module/forum/forum_viewthread.php)
forum_viewthread.php这个文件就是逻辑处理的php页面,查询数据库,组织变量...都是在这个文件中完成的
组织好数据后用include template引入htm文件,在里面执行loop循环之类的
你可以根据上面的方法来追踪discuz的代码执行顺序
你也知道你在看的是html模板而不是php脚本
百度搜搜dz的简单手册吧,了解一下大概部署
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product