免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3743 | 回复: 0

[Lotus] 分页的实现原理(附公式,代理和js代码) [复制链接]

论坛徽章:
0
发表于 2010-07-04 11:35 |显示全部楼层
转至于 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([OpenView];@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)reStart=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语句进行分页的通用函数.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

DTCC2020中国数据库技术大会

【架构革新 高效可控】2020年12月21日-23日第十一届中国数据库技术大会将在北京隆重召开。

大会设置2大主会场,20+技术专场,将邀请超百位行业专家,重点围绕数据架构、AI与大数据、传统企业数据库实践和国产开源数据库等内容展开分享和探讨,为广大数据领域从业人士提供一场年度盛会和交流平台。

http://dtcc.it168.com


大会官网>>
  

北京盛拓优讯信息技术有限公司. 版权所有 16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122
中国互联网协会会员  联系我们:huangweiwei@it168.com
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP