转载请注明出处,谢谢:http://write.blog.csdn.net/postedit/8199827
如何创建?
假设discuz数据库中已经有下面这个数据表:pre_xxjob_cardcategory,保存的是充值卡信息
我们切换到discuz目录source/function/cache/下创建cache_plugincard.php,代码如下:
<?php
if(!defined('IN_DISCUZ')){
exit("Access Denied");
}
function build_cache_plugincard(){
$data=array();
$query=DB::query("SELECT name FROM ".DB::table('xxjob_cardcategory')); //从数据库检索数据
while($row=DB::fetch($query)){
$data[]=$row['name']; //将数据存放到数据中
}
save_syscache('plugincard',$data); //通过save_syscache()将数组保存到pre_common_syscache表中
}
?>
保存后我们到管理后台更新一下缓存,然后查看pre_common_syscache表中会多出一条数据,表明已经创建成功
如何使用?
我们在discuz根目录下创建一个单页test.php
<?php
require_once './source/class/class_core.php';
require_once './source/function/function_home.php';
$discuz = & discuz_core::instance();
$discuz->cachelist=array("plugincard");//加载指定缓存,内部会自动调用loadcache();
$discuz->init();
print_r($_G['cache']['plugincard']) ;
?>
运行显示结果是:
当然我们也可以自己手动加载缓存
loadcache('plugincard');
print_r($_G['cache']['plugincard'];
如何自己创建缓存?不依靠$discuz->init()初始化.
如果不想让系统自动初始化缓存,则可以自己单独用save_syscache()和loadcache();
下面是伪代码:
//从数据库获取数据
$query=DB::query('xxxxxx');
//数据存放到数组里
$arr=array();
while(DB::fetch($query){
$arr=.....;
}
//保存到数据表中
save_syscache('plugincard',$arr);
.......
.......
//使用时这样
loadcache('plugincard');
//然后就可以在$_G全局变量使用
print_r($_G['cache']['plugincard']);
如何更新缓存?
在管理后台点"更新缓存"会更新全部系统缓存,当然我们也可以自己更新,使用
updatecache($name);
当我们在数据库中新增或更新数据之后,可以调用该函数更新缓存表里的数据