在本文中,我们将给您介绍关于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 分页)
- PHP编程:ThinkPHP 3.2.3实现页面静态化功能的方法详解
- PHP编程:在Thinkphp中使用ajax实现无刷新分页的方法
- ThinkPHP 3.2.3实现页面静态化功能的方法详解
- thinkphp 一个页面使用2次分页的方法
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>条记录 第<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"> {$user.id}</td> <td bgcolor="#FFFFFF"> {$user.account}</td> <td bgcolor="#FFFFFF"> {$user.pwd}</td> </tr> </foreach> <tr> <!--<td colspan="3" bgcolor="#FFFFFF"> {$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实现页面静态化功能的方法详解
《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实现无刷新分页的方法
《在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实现页面静态化功能的方法详解
前言
大家都知道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次分页的方法
但是如果一个页面里需要使用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次分页的方法等更多相关知识的信息可以在本站进行查询。
本文标签: