discuz X2更新CSS自动生成缓存

默认DISCUZ更新了CSS后要在后台更新模板缓存,费力不说,常常会带来页面样式丢失问题。今天花时间把生成改成自动的了。

 

生成CSS的函数是在source\function\cache\cache_styles.php文件的,调用是通过

 

require_once libfile('function/cache');
updatecache('styles');
 
另外增加了MD5校验,不是每次都要重新生成缓存滴,只有在有CSS文件被改后才....
 
现在说下改动的地方
修改source\function\function_core.php文件
在template函数内部增加
//检查样式改动
	if($checkfiles = @file(DISCUZ_ROOT.'./data/cache/checkfiles.md5')) {
	   $checkfiles[0] = trim($checkfiles[0]);
	   $newmd5 = gettplmd5();
	   if ($newmd5!=$checkfiles[0]) {
	   		update_css($newmd5);
	   }
	} else {
		$newmd5 = gettplmd5();
		update_css($newmd5);
	}

 

在函数外面增加自定义的函数

 

//文件夹的遍历和MD5
//@author liminggui
function checkfiles($currentdir, $ext = '', $sub = 1, $skip = '') {
	global $md5data;
	$dir = @opendir(DISCUZ_ROOT."./".$currentdir);
	$exts = '/('.$ext.')$/i';
	$skips = explode(',', $skip);

	while($entry = @readdir($dir)) {
		$file = $currentdir.$entry;
		if($entry != '.' && $entry != '..' && (($ext && preg_match($exts, $entry) || !$ext) || $sub && is_dir(DISCUZ_ROOT."./".$file)) && !in_array($entry, $skips)) {
			if($sub && is_dir(DISCUZ_ROOT."./".$file)) {
				checkfiles($file.'/', $ext, $sub, $skip);
			} else {
				if(is_dir(DISCUZ_ROOT."./".$file)) {
					$md5data[$file] = md5(DISCUZ_ROOT."./".$file);
				} else {
					$md5data[$file] = md5_file(DISCUZ_ROOT."./".$file);
				}
			}
		}
	}
}
//模板和样式的MD5
//@author liminggui
function gettplmd5() {
	global $md5data;
	
	$md5data = array();
	checkfiles('template/2020star/common/', '\.css', 1,'.svn');
	$newmd5 = md5(serialize($md5data));
	return $newmd5;
}
//更新CSS
function update_css($newmd5)
{
	require_once libfile('function/cache');
	updatecache('styles');
	file_put_contents(DISCUZ_ROOT.'./data/cache/checkfiles.md5',$newmd5);
}

 

Tags: css , discuz

上一篇: Android开发打包apk程序   下一篇: 百度增加新域名首页快照

提交疑问

回顶部