Thinkphp3.2实现静态化

1)在根目录下的程序入口文件index.php中添加下面这行:

define('HTML_PATH', './HTML/');

2)在项目的配置文件config.php中进行如下配置:

return array(
        'HTML_CACHE_ON'   => true,     // 开启静态缓存  
'HTML_CACHE_TIME' => 604800,   // 全局静态缓存有效期(秒)(3600*24*7)  
'HTML_FILE_SUFFIX'=> '.html',  // 设置静态缓存文件后缀  
'HTML_CACHE_RULES'=> array(    // 定义静态缓存规则  
// 定义格式1 数组方式  
// 定义格式2 字符串方式  
//后一个参数是静态缓存有效期,单位为秒。如果不定义,则会获取配置参数HTML_CACHE_TIME 的设置值,如果定义为0则表示永久缓存。  
'Index:index'    =>array('{:controller}_{:action}'),  
'Index:articalList'    =>array('{:controller}_{:action}/{id}_{p}_list'),  
'Index:articalInfo'    =>array('{:controller}_{:action}/{id}'),  
'Index:productList'    =>array('{:controller}_{:action}/{id}_{p}_list'),  
'Index:productInfo'    =>array('{:controller}_{:action}/{id}'),  
)

);

{:module} 、{:controller} 和{:action} 分别表示当前模块名、控制器名和操作名,{id} 其实等效于 {$_GET.id},{p}则表示分页。在{}之外的字符作为字符串对待,如果包含有"/",会自动创建目录。

在前台第一次访问某个模块的某个控制器的某个方法时,就会在指定的目录按照指定的文件名格式生成静态HTML文件。

如果系统分电脑版和手机版两套模板,那么生成的静态页面只有一套,手机先访问就生成手机的模板,再用电脑访问的界面就会混乱。

但如若网站只有一套模板(比如电脑版)那么到此就够了。如果手机电脑两套模板,解决方法如下


二. 网站分手机版和电脑版两套模板

(1)在根目录下的程序入口文件index.php中进行如下配置:

  1. define('HTML_PATH''./HTML/');//生成静态页面的文件位置  
  2.   
  3. //如果是手机访问,设置手机缓存目录  
  4. if(isMobile()){  
  5.     $_SESSION['theme_path'] = 'mobile/';  
  6. }elseif(isset($_SESSION['theme_path'])){  
  7.     unset($_SESSION['theme_path']);      
  8. }  
  9.   
  10. //判断是否是手机访问  
  11. function isMobile(){  
  12.     if(isset($_SERVER['HTTP_X_WAP_PROFILE'])) return true;  
  13.     if(isset($_SERVER['HTTP_VIA']))return stristr($_SERVER['HTTP_VIA'], "wap") ? true : false;  
  14.     if(isset($_SERVER['HTTP_USER_AGENT'])){$clientkeywords = array ('nokia','sony','ericsson','mot','samsung','htc','sgh','lg','sharp','sie-','philips','panasonic','alcatel','lenovo','iphone','ipod','blackberry','meizu','android','netfront','symbian','ucweb','windowsce','palm','operamini','operamobi','openwave','nexusone','cldc','midp','wap','mobile');if (preg_match("/(" . implode('|'$clientkeywords) . ")/i"strtolower($_SERVER['HTTP_USER_AGENT'])))return true;}  
  15.     if(isset($_SERVER['HTTP_ACCEPT'])){if((strpos($_SERVER['HTTP_ACCEPT'], 'vnd.wap.wml') !== false) && (strpos($_SERVER['HTTP_ACCEPT'], 'text/html') === false || (strpos($_SERVER['HTTP_ACCEPT'], 'vnd.wap.wml') < strpos($_SERVER['HTTP_ACCEPT'], 'text/html'))))return true;}   
  16.     return false;  
  17.  }  

(2)在项目的配置文件config.php中进行如下配置:

  1. //设置静态缓存  
  2. 'HTML_CACHE_ON'   => true,     // 开启静态缓存  
  3. 'HTML_CACHE_TIME' => 604800,   // 全局静态缓存有效期(秒)(3600*24*7)  
  4. 'HTML_FILE_SUFFIX'=> '.html',  // 设置静态缓存文件后缀  
  5. 'HTML_CACHE_RULES'=> array(    // 定义静态缓存规则  
  6.      // 定义格式2 字符串方式  
  7.      'Index:index'    =>array('{$_SESSION.theme_path}/{:controller}_{:action}'),  
  8.      'Index:articalList'    =>array('{$_SESSION.theme_path}/{:controller}_{:action}/{id}_{p}_list'),  
  9.      'Index:articalInfo'    =>array('{$_SESSION.theme_path}/{:controller}_{:action}/{id}'),  
  10.      //'Index:productList'    =>array('{$_SESSION.theme_path}/{:controller}_{:action}/{id}_{p}_list'),  
  11.      //'Index:productInfo'    =>array('{$_SESSION.theme_path}/{:controller}_{:action}/{id}'),  
  12. )  
那么手机访问的时候,会先以缓存的方式生成一个名字为theme_path内容为mobile/的字符串缓存,然后在HTML/mobile/目录下生成相应的手机模板静态文件;如果再用电脑访问,那么会先清除名字为theme_path的字符串缓存内容,那么再生成静态文件的时候就在HTML/目录下了。



你可能感兴趣的:(Thinkphp3.2实现静态化)