您的位置:首页 > 编程语言 > PHP开发

超强PHP 分页类(转自PHPCHINA)

2010-03-01 12:20 337 查看
1

<?

2

/**

3

* filename: ext_page.class.php

4

* @package:phpbean

5

* @author :feifengxlq<feifengxlq#gmail.com><http://www.phpobject.net/>

6

* @copyright :Copyright 2006 feifengxlq

7

* @license:version 2.0

8

* @create:2006-5-31

9

* @modify:2006-6-1

10

* @modify:feifengxlq 2006-11-4

11

* description:超强分页类,四种分页模式,默认采用类似baidu,google的分页风格。

12

* 2.0增加功能:支持自定义风格,自定义样式,同时支持PHP4和PHP5,

13

* to see detail,please visit http://www.phpobject.net/blog/read.php?

14

* example:

15

* 模式四种分页模式:

16

require_once('../libs/classes/page.class.php');

17

$page=new page(array('total'=>1000,'perpage'=>20));

18

echo 'mode:1<br>'.$page->show();

19

echo '<hr>mode:2<br>'.$page->show(2);

20

echo '<hr>mode:3<br>'.$page->show(3);

21

echo '<hr>mode:4<br>'.$page->show(4);

22

开启AJAX:

23

$ajaxpage=new page(array('total'=>1000,'perpage'=>20,'ajax'=>'ajax_page','page_name'=>'test'));

24

echo 'mode:1<br>'.$ajaxpage->show();

25

采用继承自定义分页显示模式:

26

demo:http://www.phpobject.net/blog

27

*/

28

class page

29

{

30

/**

31

* config ,public

32

*/

33

var $page_name="PB_page";//page标签,用来控制url页。比如说xxx.php?PB_page=2中的PB_page

34

var $next_page='>';//下一页

35

var $pre_page='<';//上一页

36

var $first_page='First';//首页

37

var $last_page='Last';//尾页

38

var $pre_bar='<<';//上一分页条

39

var $next_bar='>>';//下一分页条

40

var $format_left='[';

41

var $format_right=']';

42

var $is_ajax=false;//是否支持AJAX分页模式

43


44

/**

45

* private

46

*

47

*/

48

var $pagebarnum=10;//控制记录条的个数。

49

var $totalpage=0;//总页数

50

var $ajax_action_name='';//AJAX动作名

51

var $nowindex=1;//当前页

52

var $url="";//url地址头

53

var $offset=0;

54


55

/**

56

* constructor构造函数

57

*

58

* @param array $array['total'],$array['perpage'],$array['nowindex'],$array['url'],$array['ajax']


59

*/

60

function page($array)

61

{

62

if(is_array($array)){

63

if(!array_key_exists('total',$array))$this->error(__FUNCTION__,'need a param of total');

64

$total=intval($array['total']);

65

$perpage=(array_key_exists('perpage',$array))?intval($array['perpage']):10;

66

$nowindex=(array_key_exists('nowindex',$array))?intval($array['nowindex']):'';

67

$url=(array_key_exists('url',$array))?$array['url']:'';

68

}else{

69

$total=$array;

70

$perpage=10;

71

$nowindex='';

72

$url='';

73

}

74

if((!is_int($total))||($total<0))$this->error(__FUNCTION__,$total.' is not a positive integer!');

75

if((!is_int($perpage))||($perpage<=0))$this->error(__FUNCTION__,$perpage.' is not a positive integer!');

76

if(!empty($array['page_name']))$this->set('page_name',$array['page_name']);//设置pagename

77

$this->_set_nowindex($nowindex);//设置当前页

78

$this->_set_url($url);//设置链接地址

79

$this->totalpage=ceil($total/$perpage);

80

$this->offset=($this->nowindex-1)*$this->perpage;

81

if(!empty($array['ajax']))$this->open_ajax($array['ajax']);//打开AJAX模式

82

}

83

/**

84

* 设定类中指定变量名的值,如果改变量不属于这个类,将throw一个exception

85

*

86

* @param string $var

87

* @param string $value

88

*/

89

function set($var,$value)

90

{

91

if(in_array($var,get_object_vars($this)))

92

$this->$var=$value;

93

else {

94

$this->error(__FUNCTION__,$var." does not belong to PB_Page!");

95

}

96


97

}

98

/**

99

* 打开倒AJAX模式

100

*

101

* @param string $action 默认ajax触发的动作。

102

*/

103

function open_ajax($action)

104

{

105

$this->is_ajax=true;

106

$this->ajax_action_name=$action;

107

}

108

/**

109

* 获取显示"下一页"的代码

110

*

111

* @param string $style

112

* @return string

113

*/

114

function next_page($style='')

115

{

116

if($this->nowindex<$this->totalpage){

117

return $this->_get_link($this->_get_url($this->nowindex+1),$this->next_page,$style);

118

}

119

return '<span class="'.$style.'">'.$this->next_page.'</span>';

120

}

121


122

/**

123

* 获取显示“上一页”的代码

124

*

125

* @param string $style

126

* @return string

127

*/

128

function pre_page($style='')

129

{

130

if($this->nowindex>1){

131

return $this->_get_link($this->_get_url($this->nowindex-1),$this->pre_page,$style);

132

}

133

return '<span class="'.$style.'">'.$this->pre_page.'</span>';

134

}

135


136

/**

137

* 获取显示“首页”的代码

138

*

139

* @return string

140

*/

141

function first_page($style='')

142

{

143

if($this->nowindex==1){

144

return '<span class="'.$style.'">'.$this->first_page.'</span>';

145

}

146

return $this->_get_link($this->_get_url(1),$this->first_page,$style);

147

}

148


149

/**

150

* 获取显示“尾页”的代码

151

*

152

* @return string

153

*/

154

function last_page($style='')

155

{

156

if($this->nowindex==$this->totalpage){

157

return '<span class="'.$style.'">'.$this->last_page.'</span>';

158

}

159

return $this->_get_link($this->_get_url($this->totalpage),$this->last_page,$style);

160

}

161


162

function nowbar($style='',$nowindex_style='')

163

{

164

$plus=ceil($this->pagebarnum/2);

165

if($this->pagebarnum-$plus+$this->nowindex>$this->totalpage)$plus=($this->pagebarnum-$this->totalpage+$this->nowindex);

166

$begin=$this->nowindex-$plus+1;

167

$begin=($begin>=1)?$begin:1;

168

$return='';

169

for($i=$begin;$i<$begin+$this->pagebarnum;$i++)

170

{

171

if($i<=$this->totalpage){

172

if($i!=$this->nowindex)

173

$return.=$this->_get_text($this->_get_link($this->_get_url($i),$i,$style));

174

else

175

$return.=$this->_get_text('<span class="'.$nowindex_style.'">'.$i.'</span>');

176

}else{

177

break;

178

}

179

$return.="/n";

180

}

181

unset($begin);

182

return $return;

183

}

184

/**

185

* 获取显示跳转按钮的代码

186

*

187

* @return string

188

*/

189

function select()

190

{

191

$return='<select name="PB_Page_Select" >';

192

for($i=1;$i<=$this->totalpage;$i++)

193

{

194

if($i==$this->nowindex){

195

$return.='<option value="'.$i.'" selected>'.$i.'</option>';

196

}else{

197

$return.='<option value="'.$i.'">'.$i.'</option>';

198

}

199

}

200

unset($i);

201

$return.='</select>';

202

return $return;

203

}

204


205

/**

206

* 获取mysql 语句中limit需要的值

207

*

208

* @return string

209

*/

210

function offset()

211

{

212

return $this->offset;

213

}

214


215

/**

216

* 控制分页显示风格(你可以增加相应的风格)

217

*

218

* @param int $mode

219

* @return string

220

*/

221

function show($mode=1)

222

{

223

switch ($mode)

224

{

225

case '1':

226

$this->next_page='下一页';

227

$this->pre_page='上一页';

228

return $this->pre_page().$this->nowbar().$this->next_page().'第'.$this->select().'页';

229

break;

230

case '2':

231

$this->next_page='下一页';

232

$this->pre_page='上一页';

233

$this->first_page='首页';

234

$this->last_page='尾页';

235

return $this->first_page().$this->pre_page().'[第'.$this->nowindex.'页]'.$this->next_page().$this->last_page().'第'.$this->select().'页';

236

break;

237

case '3':

238

$this->next_page='下一页';

239

$this->pre_page='上一页';

240

$this->first_page='首页';

241

$this->last_page='尾页';

242

return $this->first_page().$this->pre_page().$this->next_page().$this->last_page();

243

break;

244

case '4':

245

$this->next_page='下一页';

246

$this->pre_page='上一页';

247

return $this->pre_page().$this->nowbar().$this->next_page();

248

break;

249

case '5':

250

return $this->pre_bar().$this->pre_page().$this->nowbar().$this->next_page().$this->next_bar();

251

break;

252

}

253


254

}

255

/*----------------private function (私有方法)-----------------------------------------------------------*/

256

/**

257

* 设置url头地址

258

* @param: String $url

259

* @return boolean

260

*/

261

function _set_url($url="")

262

{

263

if(!empty($url)){

264

//手动设置

265

$this->url=$url.((stristr($url,'?'))?'&':'?').$this->page_name."=";

266

}else{

267

//自动获取

268

if(empty($_SERVER['QUERY_STRING'])){

269

//不存在QUERY_STRING时

270

$this->url=$_SERVER['REQUEST_URI']."?".$this->page_name."=";

271

}else{

272

//

273

if(stristr($_SERVER['QUERY_STRING'],$this->page_name.'=')){

274

//地址存在页面参数

275

$this->url=str_replace($this->page_name.'='.$this->nowindex,'',$_SERVER['REQUEST_URI']);

276

$last=$this->url[strlen($this->url)-1];

277

if($last=='?'||$last=='&'){

278

$this->url.=$this->page_name."=";

279

}else{

280

$this->url.='&'.$this->page_name."=";

281

}

282

}else{

283

//

284

$this->url=$_SERVER['REQUEST_URI'].'&'.$this->page_name.'=';

285

}//end if

286

}//end if

287

}//end if

288

}

289


290

/**

291

* 设置当前页面

292

*

293

*/

294

function _set_nowindex($nowindex)

295

{

296

if(empty($nowindex)){

297

//系统获取

298


299

if(isset($_GET[$this->page_name])){

300

$this->nowindex=intval($_GET[$this->page_name]);

301

}

302

}else{

303

//手动设置

304

$this->nowindex=intval($nowindex);

305

}

306

}

307


308

/**

309

* 为指定的页面返回地址值

310

*

311

* @param int $pageno

312

* @return string $url

313

*/

314

function _get_url($pageno=1)

315

{

316

return $this->url.$pageno;

317

}

318


319

/**

320

* 获取分页显示文字,比如说默认情况下_get_text('<a href="">1</a>')将返回[<a href="">1</a>]

321

*

322

* @param String $str

323

* @return string $url

324

*/

325

function _get_text($str)

326

{

327

return $this->format_left.$str.$this->format_right;

328

}

329


330

/**

331

* 获取链接地址

332

*/

333

function _get_link($url,$text,$style=''){

334

$style=(empty($style))?'':'class="'.$style.'"';

335

if($this->is_ajax){

336

//如果是使用AJAX模式

337

return '<a '.$style.' href="javascript:'.$this->ajax_action_name.'(/''.$url.'/')">'.$text.'</a>';

338

}else{

339

return '<a '.$style.' href="'.$url.'">'.$text.'</a>';

340

}

341

}

342

/**

343

* 出错处理方式

344

*/

345

function error($function,$errormsg)

346

{

347

die('Error in file <b>'.__FILE__.'</b> ,Function <b>'.$function.'()</b> :'.$errormsg);

348

}

349

}

350

?>

实例应用:

1

<?

2

require_once('../libs/classes/page.class.php');

3

$page=new page(array('total'=>1000,'perpage'=>20));

4

echo 'mode:1<br>'.$page->show();

5

echo '<hr>mode:2<br>'.$page->show(2);

6

echo '<hr>mode:3<br>'.$page->show(3);

7

echo '<hr>mode:4<br>'.$page->show(4);

8

echo '<hr>开始AJAX模式:';

9

$ajaxpage=new page(array('total'=>1000,'perpage'=>20,'ajax'=>'ajax_page','page_name'=>'test'));

10

echo 'mode:1<br>'.$ajaxpage->show();

11

?>

12


13
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: