GVKun编程网logo

ThinkPHP3.2.3实现分页的方法详解(thinkphp 分页)

32

在本文中,我们将给您介绍关于ThinkPHP3.2.3实现分页的方法详解的详细内容,并且为您解答thinkphp分页的相关问题,此外,我们还将为您提供关于PHP编程:ThinkPHP3.2.3实现页面

在本文中,我们将给您介绍关于ThinkPHP3.2.3实现分页的方法详解的详细内容,并且为您解答thinkphp 分页的相关问题,此外,我们还将为您提供关于PHP编程:ThinkPHP 3.2.3实现页面静态化功能的方法详解、PHP编程:在Thinkphp中使用ajax实现无刷新分页的方法、ThinkPHP 3.2.3实现页面静态化功能的方法详解、thinkphp 一个页面使用2次分页的方法的知识。

本文目录一览:

ThinkPHP3.2.3实现分页的方法详解(thinkphp 分页)

ThinkPHP3.2.3实现分页的方法详解(thinkphp 分页)

本文实例讲述了ThinkPHP3.2.3实现分页的方法。分享给大家供大家参考,具体如下:

首先要搞清楚的就是ThinkPHP3.2.3的分页类已经被移到了Think\Page.class.php,这是跟以前的版本有些不一样的,使用起来还是跟以前版本差不多,但是默认的效果不敢恭维,所以最好是自己加些样式。

我加了一些样式(不怎么好看),大家可以自行的再去改进分页样式,效果图:

在这里我有先把page的设置做成了一个函数getpage,将这个方法放到Application\Common\Common\function.php(注意function不是类)中方便其他地方调用,代码如下:

<?php
/**
 * TODO 基础分页的相同代码封装,使前台的代码更少
 * @param $count 要分页的总记录数
 * @param int $pagesize 每页查询条数
 * @return \Think\Page
 */
function getpage($count, $pagesize = 10) {
  $p = new Think\Page($count, $pagesize);
  $p->setConfig(''header'', ''<li>共<b>%TOTAL_ROW%</b>条记录&nbsp;第<b>%NOW_PAGE%</b>页/共<b>%TOTAL_PAGE%</b>页</li>'');
  $p->setConfig(''prev'', ''上一页'');
  $p->setConfig(''next'', ''下一页'');
  $p->setConfig(''last'', ''末页'');
  $p->setConfig(''first'', ''首页'');
  $p->setConfig(''theme'', ''%FIRST%%UP_PAGE%%LINK_PAGE%%DOWN_PAGE%%END%%HEADER%'');
  $p->lastSuffix = false;//最后一页不显示为总页数
  return $p;
}
?>

控制器中使用的代码如下:

public function showAllUsers() {
    $m = M(''User'');
    $where = "id>10";
    $count = $m->where($where)->count();
    $p = getpage($count,1);
    $list = $m->field(true)->where($where)->order(''id'')->limit($p->firstRow, $p->listRows)->select();
    $this->assign(''select'', $list); // 赋值数据集
    $this->assign(''page'', $p->show()); // 赋值分页输出
    $this->display();
}

接下来在View中的使用:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>用户信息输出</title>
    <link href="__ROOT__/Public/Css/style.css" rel="stylesheet" type="text/css" />
    <link href="__ROOT__/Public/Css/mypage.css" rel="stylesheet" type="text/css"/>
  </head>
  <body>
    <table width="405" border="1" cellpadding="1" cellspacing="1" bgcolor="#99CC33" bordercolor="#FFFFFF">
      <tr>
        <td colspan="3" bgcolor="#FFFFFF"align="center">当前登录用户:{$Think.session.admin}</td>
      </tr>
      <tr>
        <td colspan="3" bgcolor="#FFFFFF"align="center">用户信息</td>
      </tr>
      <tr>
        <td bgcolor="#FFFFFF" width="44">ID</td>
        <td bgcolor="#FFFFFF" width="120">用户名</td>
        <td bgcolor="#FFFFFF" width="223">密码</td>
      </tr>
      <foreach name=''select'' item=''user'' >
        <tr>
          <td bgcolor="#FFFFFF">&nbsp;{$user.id}</td>
          <td bgcolor="#FFFFFF">&nbsp;{$user.account}</td>
          <td bgcolor="#FFFFFF">&nbsp;{$user.pwd}</td>
        </tr>
      </foreach>
      <tr>
        <!--<td colspan="3" bgcolor="#FFFFFF">&nbsp;{$page}</td>-->
        <td colspan="3" bgcolor="#FFFFFF"><div>
            {$page}
        </div></td>
      </tr>
    </table>
  </body>
</html>

其中设置分页的样式mypage.css,如下:

.pages a,.pages span {
  display:inline-block;
  padding:2px 5px;
  margin:0 1px;
  border:1px solid #f0f0f0;
  -webkit-border-radius:3px;
  -moz-border-radius:3px;
  border-radius:3px;
}
.pages a,.pages li {
  display:inline-block;
  list-style: none;
  text-decoration:none; color:#58A0D3;
}
.pages a.first,.pages a.prev,.pages a.next,.pages a.end{
  margin:0;
}
.pages a:hover{
  border-color:#50A8E6;
}
.pages span.current{
  background:#50A8E6;
  color:#FFF;
  font-weight:700;
  border-color:#50A8E6;
}

这样就可以了。

更多关于thinkPHP相关内容感兴趣的读者可查看本站专题:《ThinkPHP入门教程》、《ThinkPHP常用方法总结》、《PHP中cookie用法总结》、《smarty模板入门基础教程》及《PHP模板技术总结》。

希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。

您可能感兴趣的文章:
  • tp5框架内使用tp3.2分页的方法分析
  • tp5框架无刷新分页实现方法分析
  • TP5框架实现自定义分页样式的方法示例
  • ThinkPHP分页类使用详解
  • ThinkPHP 3.2 数据分页代码分享
  • Thinkphp搜索时首页分页和搜索页保持条件分页的方法
  • thinkPHP5分页功能实现方法分析
  • 在Thinkphp中使用ajax实现无刷新分页的方法
  • Thinkphp和Bootstrap结合打造个性的分页样式(推荐)
  • thinkPHP5框架分页样式类完整示例
  • thinkPHP3.2实现分页自定义样式的方法
  • TP3.2框架分页相关实现方法分析

PHP编程:ThinkPHP 3.2.3实现页面静态化功能的方法详解

PHP编程:ThinkPHP 3.2.3实现页面静态化功能的方法详解

《ThinkPHP 3.2.3实现页面静态化功能的方法详解》要点:
本文介绍了ThinkPHP 3.2.3实现页面静态化功能的方法详解,希望对您有用。如果有疑问,可以联系我们。

前言PHP学习

大家都知道PHP 的页面静态化有多种实现方式,比如使用输出缓冲(output buffering),该种方式是把数据缓存在 PHP 的缓冲区(内存)中,下一次取数据时直接从缓冲区中读取数据,从而避免了脚本的编译和访问数据库等过程;另一种方式是直接生成静态的 HTML 文件,使用文件读写函数来实现,一些内容不经常改动的页面可以使用静态页面,访客访问到的页面就是真实的 HTML 页面,一些常见的 CMS 会使用该种方法.

以第二种方法为例,参考 Dedecms 5.7 的静态化功能,在 ThinkPHP 3.2.3 下实现该方法.由于 ThinkPHP 是单入口系统,而且每一个页面都要对应控制器中的某个方法,因此不能直接把静态文件的地址作为实际访问的地址,而是需要在控制器中以模版加载的方式读取静态文件.

首页静态化的实现

在 Dedecms 5.7 中,可以生成静态的首页、栏目页和文章页.其中首页的生成在后台的“生成”栏目进行设置,包括模板的选择、首页静态文件的存放路径以及首页模式(使用动态首页还是静态首页),Dedecms 还专门为首页的设置设计了一张表 dede_homepageset,包含的字段包括 templet(模板位置)、position(首页静态文件的路径)、showmod(首页模式),通过在后台进行设置与生成,来控制网站首页使用动态首页还是静态首页,用到的核心文件是 \dede\makehtml_homepage.PHP.

流程大致是:

① 在后台选择生成静态页面时,通过表单向 makehtml_homepage.PHP 发送请求,参数包括 dede_homepageset 的所有字段

② 根据传递参数中的 templet、position、showmod 更新 dede_homepageset 表

③ 如果 showmod 是使用静态,加载模板,把模板保存为静态文件.使用的方法是 fopen(),fwrite() 和 fclose(),非常简单

④ 生成了静态页面之后,访客访问的就直接是静态的 index.html,如果首页发生了改变,则手动在后台重新生成一下首页

在 ThinkPHP 中可以这样设计:

config.PHP

<?PHP
return array(
 //'配置项'=>'配置值'
 'INDEX_MOD'=>1,//首页模式 0-动态模式 1-静态模式
 'INDEX_HTML_FILE'=>__ROOT__.'Application/Home/View/Index/index_html.html',//静态首页地址
);

/Application/Home/Controller/IndexController.PHP

<?PHP
namespace Home\Controller;
use Think\Controller;
class IndexController extends Controller {
 
 //首页
 public function index() {
  if(1 == C('INDEX_MOD')) {
   //静态
   $this->display('index_html');
  } else {
   //动态
   $list = M('category')->select();
   $this->assign('list',$list);
   $this->display('index_PHP');
  }
 }
 
 //根据动态首页的内容生成静态页面
 public function makehtml_homepage() {
  $homepage = 'http://'.$_SERVER['HTTP_HOST'].U('Home/Index/index_PHP'); 
  $content = @file_get_contents($homepage);
  file_put_contents(C('INDEX_HTML_FILE'),$content);
 }
 
 //动态首页数据
 public function index_PHP() {
  C('INDEX_MOD',0);
  $this->index();
 }
}

模版文件 /Application/Home/View/Index/index_PHP.PHP

<!DOCTYPE html>
<html lang="en">
<head>
 <Meta charset="UTF-8">
 <title>Document</title>
</head>
<body>
 <volist name="list" id="vo">
  {$vo.cat_name}<br />
 </volist> 
</body>
</html>

在执行 http://ServerName/Home/Index/makehtml_homepage,即手动生成静态首页后,在 /Application/Home/View/Index/ 路径下生成了静态文件:index_html.html,根据配置文件中设置的 INDEX_MODE 为静态,访问 http://ServerName 实际访问的就是新生成的静态文件.

ThinkPHP 也自带了生成静态文件的方法 buildHtml,使用方法是 buildHtml('生成的静态文件名称','生成的静态文件路径','指定要调用的模板文件');

方法在 /ThinkPHP/Library/Think/Controller.class.PHP,Line 86:

/**
  * 创建静态页面
  * @access protected
  * @htmlfile 生成的静态文件名称
  * @htmlpath 生成的静态文件路径
  * @param string $templateFile 指定要调用的模板文件
  * 默认为空 由系统自动定位模板文件
  * @return string
  */
 protected function buildHtml($htmlfile='',$htmlpath='',$templateFile='') {
  $content = $this->fetch($templateFile);
  $htmlpath = !empty($htmlpath)?$htmlpath:HTML_PATH;
  $htmlfile = $htmlpath.$htmlfile.C('HTML_FILE_SUFFIX');
  Storage::put($htmlfile,$content,'html');
  return $content;
 }

其中 Storage 类在 /ThinkPHP/Library/Think/Storage.class.PHP

<?PHP
// +----------------------------------------------------------------------
// | TOPThink [ WE CAN DO IT JUST THINK ]
// +----------------------------------------------------------------------
// | copyright (c) 2013 http://topthink.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: liu21st <liu21st@gmail.com>
// +----------------------------------------------------------------------
namespace Think;
// 分布式文件存储类
class Storage {
 /**
  * 操作句柄
  * @var string
  * @access protected
  */
 static protected $handler ;
 /**
  * 连接分布式文件系统
  * @access public
  * @param string $type 文件类型
  * @param array $options 配置数组
  * @return void
  */
 static public function connect($type='File',$options=array()) {
  $.ucwords($type);
  self::$handler = new $class($options);
 }
 static public function __callstatic($method,$args){
  //调用缓存驱动的方法
  if(method_exists(self::$handler,$method)){
   return call_user_func_array(array(self::$handler,$method),$args);
  }
 }
}

默认的文件类型是 File,所以实例化的类的地址在 /ThinkPHP/Library/Think/Storage/Driver/File.class.PHP

<?PHP
// +----------------------------------------------------------------------
// | TOPThink [ WE CAN DO IT JUST THINK ]
// +----------------------------------------------------------------------
// | copyright (c) 2013 http://topthink.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: liu21st <liu21st@gmail.com>
// +----------------------------------------------------------------------
namespace Think\Storage\Driver;
use Think\Storage;
// 本地文件写入存储类
class File extends Storage{
 private $contents=array();
 /**
  * 架构函数
  * @access public
  */
 public function __construct() {
 }
 /**
  * 文件内容读取
  * @access public
  * @param string $filename 文件名
  * @return string  
  */
 public function read($filename,$type=''){
  return $this->get($filename,'content',$type);
 }
 /**
  * 文件写入
  * @access public
  * @param string $filename 文件名
  * @param string $content 文件内容
  * @return boolean   
  */
 public function put($filename,$type=''){
  $dir   = dirname($filename);
  if(!is_dir($dir))
   mkdir($dir,0755,true);
  if(false === file_put_contents($filename,$content)){
   E(L('_STORAGE_WRITE_ERROR_').':'.$filename);
  }else{
   $this->contents[$filename]=$content;
   return true;
  }
 }
 /**
  * 文件追加写入
  * @access public
  * @param string $filename 文件名
  * @param string $content 追加的文件内容
  * @return boolean  
  */
 public function append($filename,$type=''){
  if(is_file($filename)){
   $content = $this->read($filename,$type).$content;
  }
  return $this->put($filename,$type);
 }
 /**
  * 加载文件
  * @access public
  * @param string $filename 文件名
  * @param array $vars 传入变量
  * @return void  
  */
 public function load($_filename,$vars=null){
  if(!is_null($vars))
   extract($vars,EXTR_OVERWRITE);
  include $_filename;
 }
 /**
  * 文件是否存在
  * @access public
  * @param string $filename 文件名
  * @return boolean  
  */
 public function has($filename,$type=''){
  return is_file($filename);
 }
 /**
  * 文件删除
  * @access public
  * @param string $filename 文件名
  * @return boolean  
  */
 public function unlink($filename,$type=''){
  unset($this->contents[$filename]);
  return is_file($filename) ? unlink($filename) : false; 
 }
 /**
  * 读取文件信息
  * @access public
  * @param string $filename 文件名
  * @param string $name 信息名 mtime或者content
  * @return boolean  
  */
 public function get($filename,$name,$type=''){
  if(!isset($this->contents[$filename])){
   if(!is_file($filename)) return false;
   $this->contents[$filename]=file_get_contents($filename);
  }
  $content=$this->contents[$filename];
  $info = array(
   'mtime'  => filemtime($filename),'content' => $content
  );
  return $info[$name];
 }
}

可以看到 get 和 put 方法所使用的方法是 file_get_contents() file_put_contents() .

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对小编的支持.

PHP编程:在Thinkphp中使用ajax实现无刷新分页的方法

PHP编程:在Thinkphp中使用ajax实现无刷新分页的方法

《在ThinkPHP中使用ajax实现无刷新分页的方法》要点:
本文介绍了在ThinkPHP中使用ajax实现无刷新分页的方法,希望对您有用。如果有疑问,可以联系我们。

在ThinkPHP目录的Lib\ORG\Util\目录里新建AjaxPage.class.PHP,写入一下内容:PHP应用

<?PHP
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK IT ]
// +----------------------------------------------------------------------
// | copyright (c) 2009 http://thinkPHP.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: liu21st <liu21st@gmail.com>
// +----------------------------------------------------------------------
// $Id: Page.class.PHP 2712 2012-02-06 10:12:49Z liu21st $
class AjaxPage {
// 分页栏每页显示的页数
public $rollPage = 5;
// 页数跳转时要带的参数
public $parameter ;
// 默认列表每页显示行数
public $listRows = 20;
// 起始行数
public $firstRow ;
// 分页总页面数
protected $totalPages ;
// 总行数
protected $totalRows ;
// 当前页数
protected $NowPage ;
// 分页的栏的总页数
protected $coolPages ;
// 分页显示定制
protected $config = array('header'=>'条记录','prev'=>'上一页','next'=>'下一页','first'=>'第一页','last'=>'最后一页','theme'=>' %totalRow% %header% %NowPage%/%totalPage% 页 %upPage% %downPage% %first% %prePage% %linkPage% %nextPage% %end%');
// 默认分页变量名
protected $varPage;
public function __construct($totalRows,$listRows='',$ajax_func,$parameter='') {
$this->totalRows = $totalRows;
$this->ajax_func = $ajax_func;
$this->parameter = $parameter;
$this->varPage = C('VAR_PAGE') ? C('VAR_PAGE') : 'p' ;
if(!empty($listRows)) {
$this->listRows = intval($listRows);
}
$this->totalPages = ceil($this->totalRows/$this->listRows); //总页数
$this->coolPages = ceil($this->totalPages/$this->rollPage);
$this->NowPage = !empty($_GET[$this->varPage])?intval($_GET[$this->varPage]):1;
if(!empty($this->totalPages) && $this->NowPage>$this->totalPages) {
$this->NowPage = $this->totalPages;
}
$this->firstRow = $this->listRows*($this->NowPage-1);
}
public function setConfig($name,$value) {
if(isset($this->config[$name])) {
$this->config[$name] = $value;
}
}
public function show() {
if(0 == $this->totalRows) return '';
$p = $this->varPage;
$NowCoolPage = ceil($this->NowPage/$this->rollPage);
$url = $_SERVER['REQUEST_URI'].(strpos($_SERVER['REQUEST_URI'],'?')?'':"?").$this->parameter;
$parse = parse_url($url);
if(isset($parse['query'])) {
parse_str($parse['query'],$params);
unset($params[$p]);
$url = $parse['path'].'?'.http_build_query($params);
}
//上下翻页字符串
$upRow = $this->NowPage-1;
$downRow = $this->NowPage+1;
if ($upRow>0){
$upPage="<a id='big' href='".$this->ajax_func."(".$upRow.")'>".$this->config['prev']."</a>";
}else{
$upPage="";
}
if ($downRow <= $this->totalPages){
$downPage="<a id='big' href='".$this->ajax_func."(".$downRow.")'>".$this->config['next']."</a>";
}else{
$downPage="";
}
// << < > >>
if($NowCoolPage == 1){
$theFirst = "";
$prePage = "";
}else{
$preRow = $this->NowPage-$this->rollPage;
$prePage = "<a id='big' href='".$this->ajax_func."(".$preRow.")'>上".$this->rollPage."页</a>";
$theFirst = "<a id='big' href='".$this->ajax_func."(1)' >".$this->config['first']."</a>";
}
if($NowCoolPage == $this->coolPages){
$nextPage = "";
$theEnd="";
}else{
$nextRow = $this->NowPage+$this->rollPage;
$theEndRow = $this->totalPages;
$nextPage = "<a id='big' href='".$this->ajax_func."(".$nextRow.")' >下".$this->rollPage."页</a>";
$theEnd = "<a id='big' href='".$this->ajax_func."(".$theEndRow.")' >".$this->config['last']."</a>";
}
// 1 2 3 4 5
$linkPage = "";
for($i=1;$i<=$this->rollPage;$i++){
$page=($NowCoolPage-1)*$this->rollPage+$i;
if($page!=$this->NowPage){
if($page<=$this->totalPages){
$linkPage .= " <a id='big' href='".$this->ajax_func."(".$page.")'> ".$page." </a>";
}else{
break;
}
}else{
if($this->totalPages != 1){
$linkPage .= " <span>".$page."</span>";
}
}
}
$pageStr = str_replace(
array('%header%','%NowPage%','%totalRow%','%totalPage%','%upPage%','%downPage%','%first%','%prePage%','%linkPage%','%nextPage%','%end%'),array($this->config['header'],$this->NowPage,$this->totalRows,$this->totalPages,$upPage,$downPage,$theFirst,$prePage,$linkPage,$nextPage,$theEnd),$this->config['theme']);
return $pageStr;
}
}
?>

控制器里写入以下内容:

<?PHP
class UserAction extends Action{
public function user(){
import("ORG.Util.AjaxPage");// 导入分页类 注意导入的是自己写的AjaxPage类
$credit = M('user');
$count = $credit->count(); //计算记录数
$limitRows = 5; // 设置每页记录数
$p = new AjaxPage($count,$limitRows,"user"); //第三个参数是你需要调用换页的ajax函数名
$limit_value = $p->firstRow . "," . $p->listRows;
$data = $credit->order('id desc')->limit($limit_value)->select(); // 查询数据
$page = $p->show(); // 产生分页信息,AJAX的连接在此处生成
$this->assign('list',$data);
$this->assign('page',$page);
$this->display();
}
}
?>

模板文件如下:

<html>
<head>
<title>Ajax无刷新分页</title>
<script type="text/javascript" src="../Public/jquery-1.7.2.min.js"></script>
<script type="text/javascript">
function user(id){ //user函数名 一定要和action中的第三个参数一致上面有
var id = id;
$.get('User/user',{'p':id},function(data){ //用get方法发送信息到UserAction中的user方法
$("#user").replaceWith("<div id='user'>"+data+"</div>"); //user一定要和tpl中的一致
});
}
</script>
</head>
<body>
<div id='user'> <!--这里的user和下面js中的test要一致-->
<volist id='list' name='list'> <!--内容输出-->
<{$list.id}>  <{$list.username}><br/>
</volist>
<{$page}> <!--分页输出-->
</div>
</body>
</html>

以上所述是小编给大家介绍的在ThinkPHP中使用ajax实现无刷新分页的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的.在此也非常感谢大家对小编网站的支持!

ThinkPHP 3.2.3实现页面静态化功能的方法详解

ThinkPHP 3.2.3实现页面静态化功能的方法详解

前言

大家都知道PHP 的页面静态化有多种实现方式,比如使用输出缓冲(output buffering),该种方式是把数据缓存在 PHP 的缓冲区(内存)中,下一次取数据时直接从缓冲区中读取数据,从而避免了脚本的编译和访问数据库等过程;另一种方式是直接生成静态的 HTML 文件,使用文件读写函数来实现,一些内容不经常改动的页面可以使用静态页面,访客访问到的页面就是真实的 HTML 页面,一些常见的 CMS 会使用该种方法。

以第二种方法为例,参考 DedeCMS 5.7 的静态化功能,在 ThinkPHP 3.2.3 下实现该方法。由于 ThinkPHP 是单入口系统,而且每一个页面都要对应控制器中的某个方法,因此不能直接把静态文件的地址作为实际访问的地址,而是需要在控制器中以模版加载的方式读取静态文件。

首页静态化的实现

在 DedeCMS 5.7 中,可以生成静态的首页、栏目页和文章页。其中首页的生成在后台的“生成”栏目进行设置,包括模板的选择、首页静态文件的存放路径以及首页模式(使用动态首页还是静态首页),DedeCMS 还专门为首页的设置设计了一张表 dede_homepageset,包含的字段包括 templet(模板位置)、position(首页静态文件的路径)、showmod(首页模式),通过在后台进行设置与生成,来控制网站首页使用动态首页还是静态首页,用到的核心文件是 \dede\makehtml_homepage.php。

流程大致是:

① 在后台选择生成静态页面时,通过表单向 makehtml_homepage.php 发送请求,参数包括 dede_homepageset 的所有字段

② 根据传递参数中的 templet、position、showmod 更新 dede_homepageset 表

③ 如果 showmod 是使用静态,加载模板,把模板保存为静态文件。使用的方法是 fopen(),fwrite() 和 fclose(),非常简单

④ 生成了静态页面之后,访客访问的就直接是静态的 index.html,如果首页发生了改变,则手动在后台重新生成一下首页

在 ThinkPHP 中可以这样设计:

config.php

<?php
return array(
 //''配置项''=>''配置值''
 ''INDEX_MOD''=>1,//首页模式 0-动态模式 1-静态模式
 ''INDEX_HTML_FILE''=>__ROOT__.''Application/Home/View/Index/index_html.html'',//静态首页地址
);

/Application/Home/Controller/IndexController.php

<?php
namespace Home\Controller;
use Think\Controller;
class IndexController extends Controller {
 
 //首页
 public function index() {
  if(1 == C(''INDEX_MOD'')) {
   //静态
   $this->display(''index_html'');
  } else {
   //动态
   $list = M(''category'')->select();
   $this->assign(''list'', $list);
   $this->display(''index_php'');
  }
 }
 
 //根据动态首页的内容生成静态页面
 public function makehtml_homepage() {
  $homepage = ''http://''.$_SERVER[''HTTP_HOST''].U(''Home/Index/index_php''); 
  $content = @file_get_contents($homepage);
  file_put_contents(C(''INDEX_HTML_FILE''), $content);
 }
 
 //动态首页数据
 public function index_php() {
  C(''INDEX_MOD'', 0);
  $this->index();
 }
}

模版文件 /Application/Home/View/Index/index_php.php

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>Document</title>
</head>
<body>
 <volist name="list" id="vo">
  {$vo.cat_name}<br />
 </volist> 
</body>
</html>

在执行 http://ServerName/Home/Index/makehtml_homepage ,即手动生成静态首页后,在 /Application/Home/View/Index/ 路径下生成了静态文件:index_html.html,根据配置文件中设置的 INDEX_MODE 为静态,访问 http://ServerName 实际访问的就是新生成的静态文件。

ThinkPHP 也自带了生成静态文件的方法 buildHtml,使用方法是 buildHtml(''生成的静态文件名称'', ''生成的静态文件路径'', ''指定要调用的模板文件'');

方法在 /ThinkPHP/Library/Think/Controller.class.php,Line 86:

/**
  * 创建静态页面
  * @access protected
  * @htmlfile 生成的静态文件名称
  * @htmlpath 生成的静态文件路径
  * @param string $templateFile 指定要调用的模板文件
  * 默认为空 由系统自动定位模板文件
  * @return string
  */
 protected function buildHtml($htmlfile='''',$htmlpath='''',$templateFile='''') {
  $content = $this->fetch($templateFile);
  $htmlpath = !empty($htmlpath)?$htmlpath:HTML_PATH;
  $htmlfile = $htmlpath.$htmlfile.C(''HTML_FILE_SUFFIX'');
  Storage::put($htmlfile,$content,''html'');
  return $content;
 }

其中 Storage 类在 /ThinkPHP/Library/Think/Storage.class.php

<?php
// +----------------------------------------------------------------------
// | TOPThink [ WE CAN DO IT JUST THINK ]
// +----------------------------------------------------------------------
// | Copyright (c) 2013 http://topthink.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: liu21st <liu21st@gmail.com>
// +----------------------------------------------------------------------
namespace Think;
// 分布式文件存储类
class Storage {

 /**
  * 操作句柄
  * @var string
  * @access protected
  */
 static protected $handler ;

 /**
  * 连接分布式文件系统
  * @access public
  * @param string $type 文件类型
  * @param array $options 配置数组
  * @return void
  */
 static public function connect($type=''File'',$options=array()) {
  $Think\\Storage\\Driver\\''.ucwords($type);
  self::$handler = new $class($options);
 }

 static public function __callstatic($method,$args){
  //调用缓存驱动的方法
  if(method_exists(self::$handler, $method)){
   return call_user_func_array(array(self::$handler,$method), $args);
  }
 }
}

默认的文件类型是 File,所以实例化的类的地址在 /ThinkPHP/Library/Think/Storage/Driver/File.class.php

<?php
// +----------------------------------------------------------------------
// | TOPThink [ WE CAN DO IT JUST THINK ]
// +----------------------------------------------------------------------
// | Copyright (c) 2013 http://topthink.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: liu21st <liu21st@gmail.com>
// +----------------------------------------------------------------------
namespace Think\Storage\Driver;
use Think\Storage;
// 本地文件写入存储类
class File extends Storage{

 private $contents=array();

 /**
  * 架构函数
  * @access public
  */
 public function __construct() {
 }

 /**
  * 文件内容读取
  * @access public
  * @param string $filename 文件名
  * @return string  
  */
 public function read($filename,$type=''''){
  return $this->get($filename,''content'',$type);
 }

 /**
  * 文件写入
  * @access public
  * @param string $filename 文件名
  * @param string $content 文件内容
  * @return boolean   
  */
 public function put($filename,$content,$type=''''){
  $dir   = dirname($filename);
  if(!is_dir($dir))
   mkdir($dir,0755,true);
  if(false === file_put_contents($filename,$content)){
   E(L(''_STORAGE_WRITE_ERROR_'').'':''.$filename);
  }else{
   $this->contents[$filename]=$content;
   return true;
  }
 }

 /**
  * 文件追加写入
  * @access public
  * @param string $filename 文件名
  * @param string $content 追加的文件内容
  * @return boolean  
  */
 public function append($filename,$content,$type=''''){
  if(is_file($filename)){
   $content = $this->read($filename,$type).$content;
  }
  return $this->put($filename,$content,$type);
 }

 /**
  * 加载文件
  * @access public
  * @param string $filename 文件名
  * @param array $vars 传入变量
  * @return void  
  */
 public function load($_filename,$vars=null){
  if(!is_null($vars))
   extract($vars, EXTR_OVERWRITE);
  include $_filename;
 }

 /**
  * 文件是否存在
  * @access public
  * @param string $filename 文件名
  * @return boolean  
  */
 public function has($filename,$type=''''){
  return is_file($filename);
 }

 /**
  * 文件删除
  * @access public
  * @param string $filename 文件名
  * @return boolean  
  */
 public function unlink($filename,$type=''''){
  unset($this->contents[$filename]);
  return is_file($filename) ? unlink($filename) : false; 
 }

 /**
  * 读取文件信息
  * @access public
  * @param string $filename 文件名
  * @param string $name 信息名 mtime或者content
  * @return boolean  
  */
 public function get($filename,$name,$type=''''){
  if(!isset($this->contents[$filename])){
   if(!is_file($filename)) return false;
   $this->contents[$filename]=file_get_contents($filename);
  }
  $content=$this->contents[$filename];
  $info = array(
   ''mtime''  => filemtime($filename),
   ''content'' => $content
  );
  return $info[$name];
 }
}

可以看到 get 和 put 方法所使用的方法是 file_get_contents() file_put_contents()

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。

您可能感兴趣的文章:
  • PHP页面静态化——纯静态与伪静态用法详解
  • PHP实现HTML页面静态化的方法
  • 使用ob系列函数实现PHP网站页面静态化
  • PHP实现页面静态化深入讲解

thinkphp 一个页面使用2次分页的方法

thinkphp 一个页面使用2次分页的方法

thinkphp内置org.util.page方法分页,使分页变得非常简单快捷。

但是如果一个页面里需要使用2次分页,就会产生冲突,这里先记录下百度来的解决办法

可以说是毫无技术含量的办法:

  将Page.class.php复制重命名一个,如nPage.class.php.

  并在nPage.calss.php中将

立即学习“PHP免费学习笔记(深入)”;

      $this->varPage=C(''VAR_PAGE'')?C(''VAR_PAGE''):''p''

  改为

      $this->varPage=C(''VAR_PAGE'')?C(''VAR_PAGE''):''np''

  当然类名也记得要改为nPage.class.php,然后就在php里直接引用这个类分页,就不会和原来的冲突了……

今天关于ThinkPHP3.2.3实现分页的方法详解thinkphp 分页的介绍到此结束,谢谢您的阅读,有关PHP编程:ThinkPHP 3.2.3实现页面静态化功能的方法详解、PHP编程:在Thinkphp中使用ajax实现无刷新分页的方法、ThinkPHP 3.2.3实现页面静态化功能的方法详解、thinkphp 一个页面使用2次分页的方法等更多相关知识的信息可以在本站进行查询。

本文标签: