Rumah  >  Artikel  >  pembangunan bahagian belakang  >  discuz的数据库调用机制到底是怎么回事

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

WBOY
WBOYasal
2016-06-23 13:48:511164semak imbas

给100分 
最近研究discuz,看到官方包中很多htm模板中没有调用数据库的语句,几乎清一色的全是loop循环,这我就有点不明白了, 在调用前没有sql语句出现,循环什么呢?
但是事实正好相反,它是能调出来的,所以不明白它的调用机制是怎么回事!

为了更好的说明举一个例子吧!
比如下面这个loop循环:

<!--{loop $trades[$tid] $key $trade}-->			<li class="cl">				<!--{if $trade[aid]}-->					<a href="forum.php?mod=viewthread&do=tradeinfo&tid=$tid&pid=$trade[pid]" target="_blank"><img src="$trade[aid]" width="80" alt="$trade[subject]" /></a>				<!--{else}-->					<a href="forum.php?mod=viewthread&do=tradeinfo&tid=$tid&pid=$trade[pid]" target="_blank"><img src="{IMGDIR}/nophoto.gif" width="80" alt="$trade[subject]" /></a>				<!--{/if}-->				<!--{if $trade[price] > 0}-->					&yen; $trade[price]				<!--{/if}-->				<!--{if $trade[credit] > 0}-->					<!--{if $trade[price] > 0}-->{lang additional} <!--{/if}--> $trade[credit] {$_G[setting][extcredits][$_G['setting']['creditstransextra'][5]][unit]}{$_G[setting][extcredits][$_G['setting']['creditstransextra'][5]][title]}				<!--{/if}-->				<p><a href="forum.php?mod=viewthread&do=tradeinfo&tid=$tid&pid=$trade[pid]" target="_blank">$trade[subject]</a></p>			</li>		<!--{/loop}-->


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的简单手册吧,了解一下大概部署

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn