在这里使用了dz中的模板语法 loop 与 /loop 间循环把 $_G['cache']['blockclass'] 中的值以html形式输出。好了,我们知道了问题的上一个根源。$_G是dx中的全局变量,那我们在dx中把它输出出来看看,里面有没有内容。在
- http://x2/portal.php?mod=portalcp&ac=diy&op=blockclass&inajax=1&ajaxtarget=
根据这个地址,找到portal_portalcp.php,其中还包含了比较重要的一个文件是 portalcp_diy.php
其中的
- if($op == 'blockclass') {
这段对我们上面js中的请求进行了处理。
- loadcache('blockclass');
这段是读取 blockclass 为名字的缓存,读到$_G['cache']['blockclass']中。说到这里,大家应该明白这之间的关系了吧。
鼠标点击触发js函数,js函数中get一个php文件,php文件中对这次请求进行了处理,读取了 blockclass 缓存,存到了 $_G['cache']['blockclass'] 中,然后在模板文件中把它们循环显示出来。就是这样。
问题分析到这里知道了流程,那么这个问题就出在 $_G['cache']['blockclass'] 上。我尝试打印了$_G['cache']['blockclass']的值。
- <?php
- require './source/class/class_core.php';
- $discuz = & discuz_core::instance();
- $discuz->cachelist = $cachelist;
- $discuz->init();
- loadcache('blockclass');
- print_r($_G['cache']['blockclass']);
- ?>
这段程序就是读下blockclass 缓存,然后把 $_G['cache']['blockclass'] 的值打出来,奇怪的是,我在这个站长的站上这个值打印出来是空的,只有结构没有数据,所以当然显示模块为空了。
没办法,只有继续往上查。查什么?查读取缓存的程序,读取模块缓存的函数是 blockclass_cache() 在 function_block.php 中
在这里,我摘出了部分代码,然后让它输出我需要的东西。程序代码不在这里贴了。上传附件中了。
在这个函数中程序分别读取 class/block 下面文件夹中的程序文件,输出结果如图: