歡迎您光臨本站 註冊首頁

分頁的實現原理(附公式,代理和js代碼)

←手機掃碼閱讀     火星人 @ 2014-03-04 , reply:0

分頁的實現原理(附公式,代理和js代碼)

轉至於 http://q.hexun.com/lotus/discussionlist.aspx

表單要「產生所有域的HTML」,因為有隱藏域值要用;兩個可編輯隱藏域totalpages,query_string(前者代理中要進行存取,後者保存url參數)兩個計算域total,dpage(總頁數,第幾頁);一個可編輯域gopage(到第幾頁);
兩個代理,gotopage和viewpage,前者直接實現轉到第幾頁;後者實現共幾頁,第幾頁;翻頁操作時向url傳遞start=?參數,代理來計算是第幾頁。

幾個操作公式
下一頁 s:=@If(@Trim(@Right(query_string;"start="))="";"1";@Trim(@Right(query_str ing;"start=")));
p:=@TextToNumber(s);
start:=@If((p+20)>(@TextToNumber(totalpages)*20);s;@Text(p+20));
url:= @Subset(@DbName;-1)+"/$$viewtemplate+for+($inbox)?openform&start="+start;
@URLOpen(url)
上一頁 s:=@If(@Trim(@Right(query_string;"start="))="";"1";@Trim(@Right(query_str ing;"start=")));
p:=@TextToNumber(s);
s2:=@If(p<=20;1;p-20);
start:=@Text(s2);
url:= @Subset(@DbName;-1)+"/$$viewtemplate+for+($inbox)?openform&start="+start;
@URLOpen(url)
首頁 REM "@Command(;@ViewTitle)";
@URLOpen("$$viewtemplate+for+($inbox)?openform&start=1") < /TR>  
末頁 end:=@Text((@TextToNumber(totalpages)-1)*20+1);
url:= @Subset(@DbName;-1)+"/$$viewtemplate+for+($inbox)?openform&start="+end;
@URLOpen(url)


gotopage代理如下:

Sub Initialize
On Error Goto errorhandler

Dim session As New notessession
Set db=session.currentdatabase
Set doc=session.documentcontext
"///////////////////////////////////
&nb sp;If doc.gopage(0)="0" Then
  
  Print "<script language=javascript> window.alert("請輸入正確的頁碼!") </script>"
  Print "<script language=javascript> window.history.back()</script>"
  Exit Sub
End If
"//////////////////////////////////
If Cint(doc.gopage(0))>Cint(doc.totalpages(0)) Then
  
  Print "<script language=javascript> window.alert("輸入超過最大頁碼!")</script>"
  Print "<script language=javascript> window.history.back()</script>"
  Exit Sub
End If

"///////////////////////////////////
path=db.file path
dp=Cint(doc.gopage(0))
dp=Cstr((dp-1)*20+1)
Prin t "["+path+"/$$viewtemplate+for+($inbox)?openform&start="+dp+"]"

Exit Sub

errorhandler:

Messagebox "代理運行發生錯誤!!" &Str(Err)&":"&Error$
Exit Sub


下面的分頁原理使用JS語句進行分頁

function getpage()
{
  var Start=document.all.Start.value-0;"在表單中建Start域,文檔開始處
  var AllNum=document.all.AllNum.value-0;"在表單中建AllNum域,此域獲得當前視圖的所有文檔數
  var PageNum=document.all.PageNum.value-0;.在表單中建PageNum域,此域指定每頁顯示多少個文檔
  var cdbname=document.all.cdbname.value;"在表單中建cdbname域些域用@subset(@dbname;-1)取得資料庫名
  var PageName=document.all.PageName.value; "在表單中建PageName域,並默認為當前表單的名稱
  var AllPage=AllNum/PageNum;//算出總頁數
  if (AllNum%PageNum!=0)
  {
    AllPage=Math.round(AllPage+0.5);
  }
  var CPage=Start/PageNum;//當前頁
  if (Start%PageNum!=0)
  {
    CPage=Math.round(CPage+0.5);
  }
  var PreStart=Start-PageNum;
  if(PreStart<0);PreStart=1;
  var NextStart=Start+PageNum;
  var PrePage="<<a href=/"+cdbname+"/"+PageName+"?openform&Start="+PreStart+"><font color=ffffff>上一頁</font></a>&nbsp;";
  var NextPage="<a href=/"+cdbname+"/"+PageName+"?openform&Start="+NextStart+"><font color=ffffff>下一頁</font></a>>&nbsp;"
  var pagestr="共有(<font color=ffffff>"+AllPage+"</font>)頁&nbsp;&nbsp;"
  pagestr+="當前頁<font color=Red>"+CPage+"</font>/</font><font color=ffffff>"+AllPage+"</font>&nbsp;&nbsp;&nbsp;"
  if(NextStart<AllNum){
   pagestr+=PrePage+NextPage;
  }
  else{
   pagestr+=PrePage+"下一頁>&nbsp;&nbsp;"
  }
  document.all.Pages.innerHTML=pagestr;
}
function gotoPage()
{
  var Start=document.all.Start.value-0;
  var AllNum=document.all.AllNum.value-0;
  var PageNum=document.all.PageNum.value-0;
  var cdbname=document.all.cdbname.value;
  var PageName=document.all.PageName.value;
  if(document.all.goPage.value==""||document.all.goPage.value=="0"){alert("請輸入頁數...");return false;}
  var goPage=document.all.goPage.value-0;
  if(goPage!=1)
  {
     var AllPage=AllNum/PageNum;//總頁數
     if (AllNum%PageNum!=0)
     {
       AllPage=Math.round(AllPage+0.5);
     }
    if(goPage>AllPage){
      alert("您輸入的頁數超過了現有頁數...");
      document.all.goPage.value=AllPage;
      return false;
     }
  }
goPage=(goPage-1)*PageNum+1;
  var url="/"+cdbname+"/"+PageName+"?openform&Start="+goPage;
  location.href=url;
}
function checknum(obj)
{
if((window.event.keyCode>95 && window.event.keyCode<106)
  || (window.event.keyCode>47 && window.event.keyCode<59)
  || window.event.keyCode == 8
  || window.event.keyCode == 46
  || window.event.keyCode == 37
  || window.event.keyCode == 39)
     {
  
}
else {
  alert("請您輸入0-9之間的數字!");
  obj.value="";
  return false;
}
}

在表單中需要顯示分頁的地方內置如下HTML代碼:

<font id=Pages></font>輸入頁碼:
<INPUT NAME="goPage" VALUE="" onKeyUp="checknum(this)" size=5>
<INPUT TYPE=button onClick="gotoPage()" VALUE="GO">

並在表單的onload事件中執行如下函數:getpage()

這樣就完全實現一個通用的使用js語句進行分頁的通用函數.

[火星人 ] 分頁的實現原理(附公式,代理和js代碼)已經有560次圍觀

http://coctec.com/docs/service/show-post-17358.html