• 微信
您当前的位置: 首页> PHP> TPshop商城系统>

tpshop函数tpCache()功能备注

作者:Alpha时间:2017-09-14 阅读数:3800 +人阅读

tpCache函数位置:\Application\Common\Common\common.php,

作用:获取缓存或者更新缓存

参数:缓存文件名称 缓存数据

一处使用的位置:网站后台网站信息设置

QQ截图20170316155143.png

/**
* 获取缓存或者更新缓存
* @param string $config_key 缓存文件名称
* @param array $data 缓存数据  array('k1'=>'v1','k2'=>'v3')
* @return array or string or bool
*/
function tpCache($config_key,$data = array()){
   $param = explode('.', $config_key);
   if(empty($data)){
       //如$config_key=shop_info则获取网站信息数组
       //如$config_key=shop_info.logo则获取网站logo字符串
       $config = F($param[0],'',TEMP_PATH);//直接获取缓存文件
       if(empty($config)){
           //缓存文件不存在就读取数据库
           $res = D('config')->where("inc_type='$param[0]'")->select();
           if($res){
               foreach($res as $k=>$val){
                   $config[$val['name']] = $val['value'];
               }
               F($param[0],$config,TEMP_PATH);
           }
       }
       if(count($param)>1){
           return $config[$param[1]];
       }else{
           return $config;
       }
   }else{
       //更新缓存
       $result =  D('config')->where("inc_type='$param[0]'")->select();
       if($result){
           foreach($result as $val){
               $temp[$val['name']] = $val['value'];
           }
           foreach ($data as $k=>$v){
               $newArr = array('name'=>$k,'value'=>trim($v),'inc_type'=>$param[0]);
               if(!isset($temp[$k])){
                   M('config')->add($newArr);//新key数据插入数据库
               }else{
                   if($v!=$temp[$k])
                       M('config')->where("name='$k'")->save($newArr);//缓存key存在且值有变更新此项
               }
           }
           //更新后的数据库记录
           $newRes = D('config')->where("inc_type='$param[0]'")->select();
           foreach ($newRes as $rs){
               $newData[$rs['name']] = $rs['value'];
           }
       }else{
           foreach($data as $k=>$v){
               $newArr[] = array('name'=>$k,'value'=>trim($v),'inc_type'=>$param[0]);
           }
           M('config')->addAll($newArr);
           $newData = $data;
       }
       return F($param[0],$newData,TEMP_PATH);
   }
}

如果提交了数据,$data数值不为空进入else判断开始更新缓存。

更新数据前先做判断:

1、取出数据库中对应表数据

$result =  D('config')->where("inc_type='$param[0]'")->select();

2、如果数据不为空,数据比对

a、如果有新的name字段,

M('config')->add($newArr);//新key数据插入数据库

b、提交的数据值都有,但是有字段值已经变更,则更新该字段值:

 M('config')->where("name='$k'")->save($newArr);//缓存key存在且值有变更新此项


以上为个人分析仅供参考,如有理解错误之处欢迎评论留言!


本站所有文章、数据、图片均来自互联网,一切版权均归源网站或源作者所有。

如果侵犯了你的权益请来信告知我们删除。邮箱:595397166@qq.com

标签: 小程序

阿尔法

软件开发工程师#全栈工程师

{include file=foot.html}