分頁顯示資料的問題
分頁程式已寫好,但在htm的部份不知如何把它顯示出來程式部份
<?php
require "config.php";
$query = "SELECT * FROM $manager order by no";
$result = mysql_query($query) or die("Query failed");
$std = array();
while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {
array_push($std, $line);
}
$PageSize = 10;
$sql = "select no,id,file,type,name from $img order by id desc";
$rs = mysql_query($sql,$link);
$total = mysql_num_rows($rs);
$page_count = ceil($total / $PageSize);
$rows = ($page -1) * $PageSize;
$result = mysql_query($sql ." LIMIT ".$rows.",".$PageSize);
$page_string = '<a href=?page=1>第一頁</a>|';
if( $page - 1 )
$page_string .= '<a href=?page='.($page-1).'>上一頁</a>|';
else
$page_string .= '上一頁';
$nextpage = ($page == $page_count) ? 0 : $page+1;
if($nextpage)
$page_string .= '<a href=?page='.($page+1).'>下一頁</a>';
else
$page_string .= '下一頁';
$page_string .= "|<a href=?page=$page_count>最後一頁</a>";
$tpl->assign("page_string", $page_string);
?>
htm部份
<html>
<head>
<meta http-equiv="Content-Type" c>
</head>
<body>
<div align="center">
<p><br>
</p>
</div>
<table align=center cellspacing=0 cellpadding=0><tr><td bgcolor="#FFCCCC">
<table cellspacing=1 cellpadding=3 border=0>
<tr bgcolor=#ff69b4>
<td align=center>
姓 名
</td>
</tr>
<{section name=show_name loop=$img}>
<{if $smarty.section.show_name.rownum is div by 1 && $smarty.section.show_name.rownum < $smarty.section.show_name.total}>
<td align=center nowrap>
<a href="pic.php?no=<{$img[show_name].no}>"><{$img[show_name].name}>
</a>
</tr>
<tr>
<{/if}><{/section}>
</table> </td></tr></table>
<div class="change_page" align="center"><{$page_string}>
</div>
</body>
</html>
試了很多方法,還是只能顯示出全部的資料,或者是前10筆,或者是最後幾筆的....
剛接觸smarty...還是不太懂...請大大幫幫忙 邏輯沒有搞清礎 assign 進去的資料沒有 整理好 很亂 .
這是我三年前寫的 你參考看看我的寫法 如果你 看不懂 可以畫一下流程圖 應該可以加強你的邏輯能力 .
搞懂邏輯後 這種功能就沒什麼難的了 .
page function :[code]####################################################################################################
// $ecstart["input"]["get"] get 陣列變數
// $max_page 最大頁數
// $max_range 每多少頁數為一週期
function ecstart_record_page($ecstart , $max_page ,$max_range , $rows){
if(!isset($ecstart["input"]["get"]["p"])){$ecstart["input"]["get"]["p"] = "" ;}
if(trim($ecstart["input"]["get"]["p"])=="" or $ecstart["input"]["get"]["p"] < 1){$ecstart["input"]["get"]["p"] = 1 ; }
$lastpage = ceil($rows/$max_page);
if($ecstart["input"]["get"]["p"] > $lastpage){ $ecstart["input"]["get"]["p"]=1 ;}
$rec_start= ($ecstart["input"]["get"]["p"]-1)*$max_page +1;
$rec_end = $rec_start + $max_page -1;
$ploops = floor(($ecstart["input"]["get"]["p"]-1)/$max_range)*$max_range + 1 ;
$ploope = $ploops + $max_range -1;
if($ploope >= $lastpage){ $ploope=$lastpage;}
$ppg = $ecstart["input"]["get"]["p"] - 1 ;
$npg = $ecstart["input"]["get"]["p"] + 1 ;
if($ppg<= 0) $ppg=$lastpage;
if($npg > $lastpage) $npg=1;
if($rec_end > $rows) $rec_end=$rows;
$ecstart_page["rec_start"] = $rec_start ;
$ecstart_page["rec_end"] = $rec_end ;
$ecstart_page["firstpage"] = 1 ;
$ecstart_page["lastpage"] = $lastpage ;
$ecstart_page["previousrange"] = $ploops - $max_range ;
$ecstart_page["nextrange"] = $ploops + $max_range ;
$ecstart_page["previouspage"] = $ppg ;
$ecstart_page["nextpage"] = $npg ;
$ecstart_page["thispage"] = $ecstart["input"]["get"]["p"] ;
$ecstart_page["total"] = $rows ;
$ecstart_page["loop"] = $lastpage+1 ;
for($i=$ploops;$i <= $ploope;$i++){
$ecstart_page["item"][]["p"] = $i ;
}
return $ecstart_page;
}[/code]smarty :[code] <!--{if $page.total > 0}-->
<a href="./?action=<!--{$status.path.action}-->&fun=<!--{$status.path.fun}-->&permit=<!--{$status.path.permit}--><!--{$status.path.search}--><!--{$status.path.sort}-->&p=<!--{$page.firstpage}--><!--{if $status.wizard !=''}-->&wizard=<!--{$status.wizard}--><!--{/if}--><!--{if $parameters.last_fun !=''}-->&last_fun=<!--{$parameters.last_fun}--><!--{/if}--><!--{if $parameters.status !=''}-->&status=<!--{$parameters.status}--><!--{/if}-->" class="link">最前頁</a> |
<a href="./?action=<!--{$status.path.action}-->&fun=<!--{$status.path.fun}-->&permit=<!--{$status.path.permit}--><!--{$status.path.search}--><!--{$status.path.sort}-->&p=<!--{$page.previouspage}--><!--{if $status.wizard !=''}-->&wizard=<!--{$status.wizard}--><!--{/if}--><!--{if $parameters.last_fun !=''}-->&last_fun=<!--{$parameters.last_fun}--><!--{/if}--><!--{if $parameters.status !=''}-->&status=<!--{$parameters.status}--><!--{/if}-->" class="link">上一頁</a> |
<!--{section name=loop1 loop=$page.item}-->
<!--{if $page.item[loop1].p == $page.thispage}-->
<b>[<!--{$page.item[loop1].p}-->]</b>
<!--{else}-->
<a href="./?action=<!--{$status.path.action}-->&fun=<!--{$status.path.fun}-->&permit=<!--{$status.path.permit}--><!--{$status.path.search}--><!--{$status.path.sort}-->&p=<!--{$page.item[loop1].p}--><!--{if $status.wizard !=''}-->&wizard=<!--{$status.wizard}--><!--{/if}--><!--{if $parameters.last_fun !=''}-->&last_fun=<!--{$parameters.last_fun}--><!--{/if}--><!--{if $parameters.status !=''}-->&status=<!--{$parameters.status}--><!--{/if}-->" class="link"><!--{$page.item[loop1].p}--></a>
<!--{/if}-->
<!--{/section}-->
|
<a href="./?action=<!--{$status.path.action}-->&fun=<!--{$status.path.fun}-->&permit=<!--{$status.path.permit}--><!--{$status.path.search}--><!--{$status.path.sort}-->&p=<!--{$page.nextpage}--><!--{if $status.wizard !=''}-->&wizard=<!--{$status.wizard}--><!--{/if}--><!--{if $parameters.last_fun !=''}-->&last_fun=<!--{$parameters.last_fun}--><!--{/if}--><!--{if $parameters.status !=''}-->&status=<!--{$parameters.status}--><!--{/if}-->" class="link">下一頁</a> |
<a href="./?action=<!--{$status.path.action}-->&fun=<!--{$status.path.fun}-->&permit=<!--{$status.path.permit}--><!--{$status.path.search}--><!--{$status.path.sort}-->&p=<!--{$page.lastpage}--><!--{if $status.wizard !=''}-->&wizard=<!--{$status.wizard}--><!--{/if}--><!--{if $parameters.last_fun !=''}-->&last_fun=<!--{$parameters.last_fun}--><!--{/if}--><!--{if $parameters.status !=''}-->&status=<!--{$parameters.status}--><!--{/if}-->" class="link">最終頁</a>
</span>
<!--{if $page.lastpage > 0}-->
<select name="page" size="1" onChange="location.href=this.options[this.selectedIndex].value;" class="select-01">
<!--{section name=p loop=$page.loop start=$page.firstpage max=$page.lastpage step=1}-->
<option value="./?action=<!--{$status.path.action}-->&fun=<!--{$status.path.fun}-->&permit=<!--{$status.path.permit}--><!--{$status.path.search}--><!--{$status.path.sort}-->&p=<!--{$smarty.section.p.index}-->&wizard=<!--{$status.wizard}-->&last_fun=<!--{$parameters.last_fun}-->" <!--{if $smarty.request.p == $smarty.section.p.index}-->selected<!--{/if}-->>
<!--{$smarty.section.p.index}-->
</option>
<!--{/section}-->
</select>
<!--{/if}-->
<!--{/if}-->[/code]下面是 smarty assign 進去的 array .
你參照它 比對上述
function 和 page array 就明白了 .[code]Array
(
[SCRIPT_NAME] => /register/admin/index.php
[parameters] => Array
(
[default_title] => XX大學線上報名系統
[copyright] => Copyright (C) 2005 EcStart All rights reserved .
[request_uri] => /register/admin/?action=module&fun=fun&permit=view&show_me_the_var=1
[charset] => Big5
[action] => module
[fun] => fun
[permit] => view
[show_me_the_var] => 1
)
[user] => Array
(
[prefixid] => ecstart
[id] => 2
[groupid] => super
[deptid] => 100
[memberid] => FIEND
[idcard] =>
[passwd] => d4d511cf5a6695b486391fd80c0xxxxx
[email] => fiend@ecstart.com
[sex] => 1
[mobile] =>
[realname] => 黃xx
[tel] => 0952719xxx
[fax] =>
[address] =>
[idatetime] => 2005-09-10 00:16:53
[sdatetime] => 2007-10-18 23:54:59
[odatetime] => 0000-00-00 00:00:00
[status] => Y
)
[record] => Array
(
[0] => Array
(
[no] => 1
[sno] => 1
[prefixid] => ecstart
[id] => member
[pjid] => member
[name] => 會員系統
[node] => 0
[layer] => 1
[link] =>
[seq] => 10
[descript] =>
[message] => 您沒有管理此項的權限
[open] => Y
[idatetime] => 0000-00-00 00:00:00
[sdatetime] => 0000-00-00 00:00:00
)
[1] => Array
(
[no] => 2
[sno] => 2
[prefixid] => ecstart
[id] => usergms
[pjid] => member
[name] => 會員群組
[node] => member
[layer] => 2
[link] =>
[seq] => 11
[descript] => 管理會員資料
[message] => 您沒有會員管理此項權的權限
[open] => Y
[idatetime] => 2005-05-29 12:39:25
[sdatetime] => 0000-00-00 00:00:00
)
[2] => Array
(
[no] => 3
[sno] => 3
[prefixid] => ecstart
[id] => dept
[pjid] => member
[name] => 單位管理
[node] => member
[layer] => 2
[link] =>
[seq] => 11
[descript] => 單位管理
[message] => 您沒有會員管理此項權的權限
[open] => Y
[idatetime] => 2005-05-29 12:39:25
[sdatetime] => 0000-00-00 00:00:00
)
[3] => Array
(
[no] => 4
[sno] => 4
[prefixid] => ecstart
[id] => userms
[pjid] => member
[name] => 會員管理
[node] => member
[layer] => 2
[link] =>
[seq] => 12
[descript] => 管理會員資料
[message] => 您沒有會員管理此項權的權限
[open] => Y
[idatetime] => 2005-05-29 12:21:47
[sdatetime] => 0000-00-00 00:00:00
)
[4] => Array
(
[no] => 5
[sno] => 5
[prefixid] => ecstart
[id] => permitms
[pjid] => permitms
[name] => 系統權限管理
[node] => 0
[layer] => 1
[link] =>
[seq] => 120
[descript] =>
[message] => 您沒有管理此項的權限
[open] => Y
[idatetime] => 0000-00-00 00:00:00
[sdatetime] => 0000-00-00 00:00:00
)
[5] => Array
(
[no] => 6
[sno] => 6
[prefixid] => ecstart
[id] => project
[pjid] => permitms
[name] => 專案
[node] => permitms
[layer] => 2
[link] =>
[seq] => 121
[descript] =>
[message] => 您沒有管理此項的權限
[open] => Y
[idatetime] => 2005-06-15 23:01:44
[sdatetime] => 0000-00-00 00:00:00
)
[6] => Array
(
[no] => 7
[sno] => 7
[prefixid] => ecstart
[id] => fun
[pjid] => permitms
[name] => 功能設定
[node] => permitms
[layer] => 2
[link] =>
[seq] => 122
[descript] => 設定功\能
[message] => 您沒有管理此項的權限
[open] => Y
[idatetime] => 0000-00-00 00:00:00
[sdatetime] => 0000-00-00 00:00:00
)
[7] => Array
(
[no] => 8
[sno] => 8
[prefixid] => ecstart
[id] => permit
[pjid] => permitms
[name] => 系統群組權限設定
[node] => permitms
[layer] => 2
[link] =>
[seq] => 123
[descript] => 根據群組設定權限
[message] => 您沒有群組權限設定的管理權限
[open] => Y
[idatetime] => 0000-00-00 00:00:00
[sdatetime] => 0000-00-00 00:00:00
)
[8] => Array
(
[no] => 9
[sno] => 9
[prefixid] => ecstart
[id] => permitdump
[pjid] => permitms
[name] => 重設權限
[node] => permitms
[layer] => 2
[link] => ./dumpdata/permit.php
[seq] => 124
[descript] => 重設權限
[message] => 您沒有管理此項的權限
[open] => Y
[idatetime] => 2005-08-14 13:22:06
[sdatetime] => 0000-00-00 00:00:00
)
[9] => Array
(
[no] => 10
[sno] => 10
[prefixid] => ecstart
[id] => services
[pjid] => permitms
[name] => 服務名稱
[node] => permitms
[layer] => 2
[link] =>
[seq] => 125
[descript] =>
[message] =>
[open] => Y
[idatetime] => 0000-00-00 00:00:00
[sdatetime] => 0000-00-00 00:00:00
)
)
[rt] => Array
(
[project] => Array
(
[0] => Array
(
[id] => classms
[name] => 課程管理
)
[1] => Array
(
[id] => member
[name] => 會員系統
)
[2] => Array
(
[id] => permitms
[name] => 系統權限系統
)
)
)
[status] => Array
(
[sitmap] => Array
(
[thisfun] => fun
[thispermit] => view
[thisnode] => permitms
[thislayer] => 2
[thisname] => 功能設定
[nodefun] => permitms
[nodelayer] => 1
[nodename] => 系統權限管理
)
[message] => 您沒有管理此項的權限
[list] => 1,2,3,4,5,6,7,8,9,10
[path] => Array
(
[action] => module
[fun] => fun
[permit] => view
[search] =>
[sort] =>
)
[search] =>
[sort] =>
)
[page] => Array
(
[rec_start] => 1
[rec_end] => 10
[firstpage] => 1
[lastpage] => 2
[previousrange] => -9
[nextrange] => 11
[previouspage] => 2
[nextpage] => 2
[thispage] => 1
[total] => 15
[loop] => 3
[item] => Array
(
[0] => Array
(
[p] => 1
)
[1] => Array
(
[p] => 2
)
)
)
)[/code] 不好意思...我試了好久還是不行...又要麻煩板大了...= =
試了好多的板本都不行...只好勉強放上沒有出錯但內容出不來的板本請板大幫幫忙了.....
<?
// $ecstart["input"]["get"] get 陣列變數
// $max_page 最大頁數
// $max_range 每多少頁數為一週期
require "config.php";
$query = "select * from $cfg_img";
$result = mysql_query($query,$link) or die("Query failed");
$total = mysql_num_rows($result);
$std = array();
while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {
array_push($std, $line);
}
mysql_free_result($result);
function ecstart_record_page($ecstar, $max_page,$max_range=10, $rows=10){
global $total;
$max_page = $total;
if(!isset($ecstart["input"]["get"]["p"])){$ecstart["input"]["get"]["p"] = "" ;}
if(trim($ecstart["input"]["get"]["p"])=="" or $ecstart["input"]["get"]["p"] < 1){$ecstart["input"]["get"]["p"] = 1 ; }
$lastpage = ceil($rows/$max_page);
if($ecstart["input"]["get"]["p"] > $lastpage){ $ecstart["input"]["get"]["p"]=1 ;}
$rec_start= ($ecstart["input"]["get"]["p"]-1)*$max_page +1;
$rec_end = $rec_start + $max_page -1;
$ploops = floor(($ecstart["input"]["get"]["p"]-1)/$max_range)*$max_range + 1 ;
$ploope = $ploops + $max_range -1;
if($ploope >= $lastpage){ $ploope=$lastpage;}
$ppg = $ecstart["input"]["get"]["p"] - 1 ;
$npg = $ecstart["input"]["get"]["p"] + 1 ;
if($ppg<= 0) $ppg=$lastpage;
if($npg > $lastpage) $npg=1;
if($rec_end > $rows) $rec_end=$rows;
$ecstart_page["rec_start"] = $rec_start ;
$ecstart_page["rec_end"] = $rec_end ;
$ecstart_page["firstpage"] = 1 ;
$ecstart_page["lastpage"] = $lastpage ;
$ecstart_page["previousrange"] = $ploops - $max_range ;
$ecstart_page["nextrange"] = $ploops + $max_range ;
$ecstart_page["previouspage"] = $ppg ;
$ecstart_page["nextpage"] = $npg ;
$ecstart_page["thispage"] = $ecstart["input"]["get"]["p"] ;
$ecstart_page["total"] = $rows ;
$ecstart_page["loop"] = $lastpage+1 ;
for($i=$ploops;$i <= $ploope;$i++){
$ecstart_page["item"][]["p"] = $i ;
}
return $rec_start;
}
echo $page.total;
$tpl->assign("page.item", ecstart_record_page($ecstar, $max_page,$max_range=10, $rows=10));
$tpl->assign("img", $std);
$tpl->display('3.htm');
?>
<{section name=show_name loop=$img}>
<{$img[show_name].name}>
<{/section}>
<{if $page.total > 0}>
<a href="./?action=<{$status.path.action}>&fun=<{$status.path.fun}>&permit=<{$status.path.permit}><{$status.path.search}><{$status.path.sort}>&p=<{$page.firstpage}><{if $status.wizard !=''}>&wizard=<{$status.wizard}><{/if}><{if $parameters.last_fun !=''}>&last_fun=<{$parameters.last_fun}><{/if}><{if $parameters.status !=''}>&status=<{$parameters.status}><{/if}>" class="link">最前頁</a> |
<a href="./?action=<{$status.path.action}>&fun=<{$status.path.fun}>&permit=<{$status.path.permit}><{$status.path.search}><{$status.path.sort}>&p=<{$page.previouspage}><{if $status.wizard !=''}>&wizard=<{$status.wizard}><{/if}><{if $parameters.last_fun !=''}>&last_fun=<{$parameters.last_fun}><{/if}><{if $parameters.status !=''}>&status=<{$parameters.status}><{/if}>" class="link">上一頁</a> |
<{section name=loop1 loop=$page.item}>
<{if $page.item[loop1].p == $page.thispage}>
<b>[<{$page.item[loop1].p}>]</b>
<{else}>
<a href="./?action=<{$status.path.action}>&fun=<{$status.path.fun}>&permit=<{$status.path.permit}><{$status.path.search}><{$status.path.sort}>&p=<{$page.item[loop1].p}><{if $status.wizard !=''}>&wizard=<{$status.wizard}><{/if}><{if $parameters.last_fun !=''}>&last_fun=<{$parameters.last_fun}><{/if}><{if $parameters.status !=''}>&status=<{$parameters.status}><{/if}>" class="link"><{$page.item[loop1].p}></a>
<{/if}>
<{/section}>
|
<a href="./?action=<{$status.path.action}>&fun=<{$status.path.fun}>&permit=<{$status.path.permit}><{$status.path.search}><{$status.path.sort}>&p=<{$page.nextpage}><{if $status.wizard !=''}>&wizard=<{$status.wizard}><{/if}><{if $parameters.last_fun !=''}>&last_fun=<{$parameters.last_fun}><{/if}><{if $parameters.status !=''}>&status=<{$parameters.status}><{/if}>" class="link">下一頁</a> |
<a href="./?action=<{$status.path.action}>&fun=<{$status.path.fun}>&permit=<{$status.path.permit}><{$status.path.search}><{$status.path.sort}>&p=<{$page.lastpage}><{if $status.wizard !=''}>&wizard=<{$status.wizard}><{/if}><{if $parameters.last_fun !=''}>&last_fun=<{$parameters.last_fun}><{/if}><{if $parameters.status !=''}>&status=<{$parameters.status}><{/if}>" class="link">最終頁</a>
</span>
<{if $page.lastpage > 0}>
<select name="page" size="1" onChange="location.href=this.options[this.selectedIndex].value;" class="select-01">
<{section name=p loop=$page.loop start=$page.firstpage max=$page.lastpage step=1}>
<option value="./?action=<{$status.path.action}>&fun=<{$status.path.fun}>&permit=<{$status.path.permit}><{$status.path.search}><{$status.path.sort}>&p=<{$smarty.section.p.index}>&wizard=<{$status.wizard}>&last_fun=<{$parameters.last_fun}>" <{if $smarty.request.p == $smarty.section.p.index}>selected<{/if}>>
<{$smarty.section.p.index}>
</option>
<{/section}>
</select>
<{/if}>
<{/if}>
看起來好像沒啥改到...但是我真的有試著去改了...
煩麻板大了...sorry...佔用你的時間 還有...我還有一個怪問題...
為什麼板大的htm程式部份要用<!--{}-->...我用了之後好像沒反應...
要用<{ }>才有反應...
是因為這個嗎???
$tpl->left_delimiter = '<{';
$tpl->right_delimiter = '}>';
可是我改了
$tpl->left_delimiter = '<!--{';
$tpl->right_delimiter = '}-->';
也是沒反應... [quote]原帖由 [i]kathy1986[/i] 於 2008-10-3 14:17 發表 [url=http://bbs.ecstart.com/redirect.php?goto=findpost&pid=89786&ptid=33681][img]http://bbs.ecstart.com/images/common/back.gif[/img][/url]
還有...我還有一個怪問題...
為什麼板大的htm程式部份要用...我用了之後好像沒反應...
要用才有反應...
是因為這個嗎???
$tpl->left_delimiter = '';
可是我改了
$tpl->left_delimiter = '';
也是沒反應... [/quote][code]############################################################################
# new smarty obj start
############################################################################
//define( 'SMARTY_LEFT_DELIMITER', '<!--{' );
//define( 'SMARTY_RIGHT_DELIMITER', '}-->' );
include_once $path_class."/template/libs/Smarty.class.php";
$smarty = new Smarty;
$smarty->left_delimiter ='<!--{' ;
$smarty->right_delimiter='}-->' ;
$smarty->compile_dir = $path_ecstart."/data/smarty";
$smarty->use_sub_dirs = !ini_get('safe_mode');
############################################################################[/code]這是我的 code ...
你看看那裡不對 對照一下 . 那支 function 不是直接給 它 10 , 10 就可以動了 .
你還要去跟 query 語法做結合 . [quote]原帖由 [i]FIEND[/i] 於 2008-10-3 18:37 發表 [url=http://bbs.ecstart.com/redirect.php?goto=findpost&pid=89800&ptid=33681][img]http://bbs.ecstart.com/images/common/back.gif[/img][/url]
############################################################################
# new smarty obj start
############################################################################
//define( 'SMARTY_L ... [/quote]
感謝板大的回答....
這個部分已解決...
但是分頁部分還在努力中....一直出不來.....= =
哎...之前用php可以做出來的東西改成smarty之後好多不會用的.... [quote]原帖由 [i]kathy1986[/i] 於 2008-10-6 18:00 發表 [url=http://bbs.ecstart.com/redirect.php?goto=findpost&pid=89882&ptid=33681][img]http://bbs.ecstart.com/images/common/back.gif[/img][/url]
感謝板大的回答....
這個部分已解決...
但是分頁部分還在努力中....一直出不來.....= =
哎...之前用php可以做出來的東西改成smarty之後好多不會用的.... [/quote]
重點是會不會用 .. 習不習慣不重要 ..
[color=Red]大部份的人都以為 用 smarty 只能將 版型和程式分離... ( 如果目的只是這樣 web 的設計功力還太膚淺 )[/color]
在使用上 可以發現 smarty 可以將 資料邏輯 和 展示邏輯 切出來 ...
設法讓 資料邏輯 和 展示邏輯 達到一致性 , 可以讓 模組的延展性很高 .
假設 今天寫過的展示邏輯 , 可以切的很漂亮 .
那資料邏輯的部份 只要丟對應的參數 , 一百多支程式都可以同時套用同一個展示邏輯 .
一來 加快程式的開發速度
二來 減少 debug 和維護的問題.
整個 架構在設計時是如何思考要怎麼去用 smarty .
不習慣是很正常的 , 如果 只是覺得用了它很 炫 跟別人不一樣...
沒有了解它真正的好處 那不如不要用 因為並沒有減輕你的工作量.
況且 smarty 的效能其實是很慢的 ( 它雖然遠比其它 template obj 快 ) , 但還是遠比你直接寫在 html 上慢多了 . 呼...終於把分頁用好了...雖然到最後不是用板大提供的程式碼...不過板大的回答也是對我很有幫助...
這次的問題雖然解決了...不過依我這個新手來講,一定還會遇到問題,到時後還請板大多多費心了...
最近比較忙...改天比較有空時,再把我的程式碼整理一下po上來... [quote]原帖由 [i]kathy1986[/i] 於 2008-10-15 15:52 發表 [url=http://bbs.ecstart.com/redirect.php?goto=findpost&pid=90244&ptid=33681][img]http://bbs.ecstart.com/images/common/back.gif[/img][/url]
呼...終於把分頁用好了...雖然到最後不是用板大提供的程式碼...不過板大的回答也是對我很有幫助...
這次的問題雖然解決了...不過依我這個新手來講,一定還會遇到問題,到時後還請板大多多費心了...
最近比較忙.. ... [/quote]
恭喜~~ ^^ 雖然我也是抓別人的程式來改的…
還是po上來給有需要的人參考看看吧…
第一次po不知會不會太亂……有需要的人看看吧!!還是有覺得我的程式寫不好或有問題的也請指教…
function.pager.php
<?php
function smarty_function_pager($params, &$smarty)
{
$posvar = 'pos';
$separator = ' «« ';
$class_text = 'nav';
$class_num = 'small';
$class_numon = 'big';
$txt_pos = 'bottom';
$txt_prev = '上一頁';
$txt_next = '下一頁';
$txt_first = 'More';
foreach($params as $key=>$value) {
$tmps[strtolower($key)] = $value;
$tmp = strtolower($key);
if (!(${$tmp} = $value)) {
${$tmp} = '';
}
}
$minVars = array('limit');
foreach($minVars as $tmp) {
if (empty($params[$tmp])) {
$smarty->trigger_error('plugin "pager": missing or empty parameter: "'.$tmp.'"');
}
}
if ($txt_pos == 'middle') {
$txt_pos = 'side';
}
if (!in_array($txt_pos, array('side', 'top', 'bottom'))) {
$smarty->trigger_error('plugin "pager": bad value for : "txt_pos"');
}
if (is_array($rowcount)) {
$rowcount = count($rowcount);
}
if ($rowcount <= $limit) {
return '';
}
if (!empty($no_first)) {
unset($txt_first);
}
if (!is_array($forwardvars)) {
$forwardvars = preg_split('/[,;\s]/', $forwardvars, PREG_SPLIT_NO_EMPTY);
}
$pos = $_REQUEST[$posvar];
$pages = array();
$removeVars = array($posvar, '_rc');
$url = $_SERVER['REQUEST_URI'];
foreach($removeVars as $tmp) {
$url = preg_replace('/&'.$tmp.'\=[^&]*/', '', $url);
}
$link_tag = substr_count($url,"php?") > 0 ? "&" : "?";
if ((empty($pos) OR ($pos < 1)) AND ($rowcount > $limit)) {
if (!empty($firstpos)) {
$url .= $link_tag.$posvar.'='.$firstpos;
} elseif ($pos == -1) {
$url .= $link_tag.$posvar.'=1';
} else {
$url .= $link_tag.$posvar.'='.$limit;
}
foreach ((array)$forwardvars as $tmp) {
if (!empty($tmp) AND (!empty($_REQUEST[$tmp])))
$url .= '&'.$tmp.'='.$_REQUEST[$tmp];
}
$short['first'] = $url;
}
if ($rowcount > $limit) {
if ($rowcount < ($limit * 30)) {
for ($i=1; $i < $rowcount+1; $i+=$limit) {
if (($pos+1 >=$i) and ($pos+1 < ($i+$limit)) ) {
$short['now'] = $i;
}
$pages[$i] = $url.'&'.$posvar.'='.($i-1);
}
} else {
for ($i=1;$i < ($pos-16*$limit); $i+=10*$limit) {
$pages[$i] = $url.'&'.$posvar.'='.($i-1);
}
for ($tmp=1;($i < $pos+16*$limit) AND ($i < $rowcount+1); $i += $limit) {
if (($pos+1 >= $i) and ($pos+1 < ($i+$limit)) ) {
$short['now'] = $i;
}
$pages[$i] = $url.'&'.$posvar.'='.($i-1);
}
for ($tmp=1;$i < $rowcount+1; $i += 10*$limit) {
$pages[$i] = $url.'&'.$posvar.'='.($i-1);
}
}
if ($pos >= $limit) {
$short['prev'] = $url.'&'.$posvar.'='.($pos - $limit);
}
if ( ($pos) < ($rowcount-$limit)) {
$short['next'] = $url.'&'.$posvar.'='.($pos + $limit);
}
}
if (($pos == 0) AND ((!empty($txt_first)) OR !empty($img_first))){
print '<p align="center">';
print '<a class="'.$class_text.'" href="'.$short['first'].'">';
if (!empty($img_first)) {
if (preg_match('/\</', $img_first)) {
print $img_first;
} else {
print '<img src="'.$img_first.'" border="0" />';
}
} else {
print $txt_first;
}
print '</a></p>'."\n";
} else {
if ($pos >= $limit) {
$cache['prev'] = '<a class="'.$class_text.'" href="'.$short['prev'].'">';
if (!empty($img_prev)) {
if (preg_match('/\</', $img_prev)) {
$cache['prev'] .= $img_prev;
} else {
$cache['prev'] .= '<img src="'.$img_prev.'" border="0" />';
}
} else {
$cache['prev'] .= $txt_prev;
}
$cache['prev'] .= '</a> ';
} else {
$cache['prev'] = '';
}
if ($pos < ($rowcount-$limit)) {
$cache['next'] = ' <a class="'.$class_text.'" href="'.$short['next'].'">';
if (!empty($img_next)) {
if (preg_match('/\</', $img_next)) {
$cache['next'] .= $img_next;
} else {
$cache['next'] .= '<img src="'.$img_next.'" border="0" />';
}
} else {
$cache['next'] .= $txt_next;
}
$cache['next'] .= '</a>';
} else {
$cache['next'] = '';
}
if ($txt_pos == 'top') {
print '<p align="center">'.$cache['prev'].$cache['next'].'</p>'."\n";
}
print '<p align="center">';
if ($txt_pos == 'side') {
print $cache['prev'];;
}
foreach($pages as $num=>$url) {
if ($num > $limit) {
print ' '.$separator.' ';
}
print '<a class="'.(($num == $short['now']) ? $class_numon : $class_num).'" href="'.$url.'">'.$num.'</a>';
}
if ($txt_pos == 'side') {
print $cache['next'];;
}
print '</p>'."\n";
if ($txt_pos == 'bottom') {
print '<p align="center">'.$cache['prev'].$cache['next'].'</p>'."\n";
}
}
return '';
}
111.php
<?php
include "library/Smarty/Smarty.class.php";
include "library/Smarty/plugins/function.pager.php";
define('APP_PATH', str_replace('\\', '/', dirname(__FILE__)));
$link = mysql_connect("主機", "帳號", "密碼");
mysql_select_db("資料庫名稱") or die("Could not select database");
mysql_query("SET NAMES BIG5");
$smarty = new Smarty;
$smarty->left_delimiter ='<!--{' ;
$smarty->right_delimiter='}-->' ;
$smarty->compile_dir = $path_ecstart."/data/smarty";
$smarty->use_sub_dirs = !ini_get('safe_mode');
$smarty->template_dir = APP_PATH . "/templates/";
$smarty->compile_dir = APP_PATH . "/templates_c/";
$smarty->config_dir = APP_PATH . "/configs/";
$smarty->cache_dir = APP_PATH . "/cache/";
$content = array();
$pagesize = 5; //一頁幾筆
$sql.= "select * from 資料表 ";
$result = mysql_query($sql,$link) or die("Query failed");
$total = mysql_num_rows($result);
$totalpage = ceil($total/$pagesize);
$page = ceil($_GET["pos"])+1;
$sql.= "limit ".($pagesize * ($page-1)).", ".$pagesize;
$idx = 0;
$result = mysql_query($sql);
while ($rs = mysql_fetch_array ($result))
{
array_push($content, $rs);
$idx++;
}
$smarty->assign('totalpage',$totalpage);
$smarty->assign('img',$content);
$smarty->display('111.htm');
?>
111.htm
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=big5">
</head>
<body>
<table align=center cellspacing=0 cellpadding=0><tr><td bgcolor="#FFCCCC">
<table cellspacing=1 cellpadding=3 border=0>
<!--{section name=show_name loop=$img}-->
<td align=center nowrap>
<!--{$img[show_name].欄位名稱}--></td>
</tr><!--{/section}-->
</table>
</td></tr></table>
<div class="change_page" align="center">
<!--{pager rowcount=$totalpage limit=1 shift=1 no_first=true separator="|" class_text="pager_text" txt_pos="side"}--></div>
</body>
</html> [quote]原帖由 [i]kathy1986[/i] 於 2008-10-20 17:46 發表 [url=http://bbs.ecstart.com/redirect.php?goto=findpost&pid=90395&ptid=33681][img]http://bbs.ecstart.com/images/common/back.gif[/img][/url]
雖然我也是抓別人的程式來改的…
還是po上來給有需要的人參考看看吧…
第一次po不知會不會太亂……有需要的人看看吧!!還是有覺得我的程式寫不好或有問題的也請指教…
function.pager.php
[/quote]
版型的邏輯 最好不要放在 content logic 內 .
這樣程式的彈性會很差 .
回復 12# 的帖子
SORRY…不太懂意思…>< [url]http://bbs.ecstart.com/thread-33583-1-1.html[/url]以這張圖為例 :
ap 做出來的 xml 你可以把它視為 content logic .
而 xml 上去 將 content logic 拿來結合成 結果的 邏輯
就是我指的 版型的邏輯
如果 你可以將 content logic 做到一致性 就會有好的 延展性 .
相對的 content logic 有好的 延展性和一致性 則 版型也可以 有好的一致性和延展性.
這樣寫程式就會輕鬆很多 .
所以 :
你可以把 smarty 的 array 相像成 content logic ...
如果你可以將它 做到有固定的格式 ( 一致性 ) .
那你的版型邏輯也會一致多了 .
未來 不管你如何變化 程式 , 這個版型邏輯都 可以重覆使用.
而如果你把 版型邏輯放到 content logic 內 ,
你的程式會變的
一來不好維護 二來沒有一致性 三來沒有延展性.
導致你永遠碰到相同的問題都要重寫就算了
還要一口氣維護 n 套 換頁邏輯.
所以我建議你不要把版型邏輯放到 content logic .
@@ .....
頁:
[1]