View LotusDomino:web上的视图分页
我在许多论坛上读到关于如何实现视图分页的解决方案,但我没有解决它 我创建了View LotusDomino:web上的视图分页,view,pagination,lotus-domino,View,Pagination,Lotus Domino,我在许多论坛上读到关于如何实现视图分页的解决方案,但我没有解决它 我创建了$$ViewTemplateDefault,其中包含一些用于下一个、上一个的个性化热点按钮和一个文本字段$$ViewBody。(或者,嵌入式视图) 任何提示和帮助都将不胜感激 为了清楚起见,我将用几句话来解释: 因此,最初:前30行将显示=>在右角:第1页 如果单击Next=>接下来的30行=>第2页。等等。我理解您的问题,您有一个工作表单$$ViewTemplateDefault,现在正在寻找在该表单中显示当前页码“pa
$$ViewTemplateDefault
,其中包含一些用于下一个
、上一个
的个性化热点按钮和一个文本字段$$ViewBody
。(或者,嵌入式视图)
任何提示和帮助都将不胜感激
为了清楚起见,我将用几句话来解释:
因此,最初:前30行将显示=>在右角:第1页
如果单击Next=>接下来的30行=>第2页。等等。我理解您的问题,您有一个工作表单$$ViewTemplateDefault,现在正在寻找在该表单中显示当前页码“page nn”的可能性 我假设您使用
@DbCommand(“Domino”;“ViewNextPage”)
获取下一页,使用@DbCommand(“Domino”;“ViewPreviousPage”)
获取上一页
下一个和上一个功能的工作方式始终是一个文档“重叠”。如果您每页有30行,并单击“下一步”,则最后一个文档将位于下一页的第一行,另外还会显示下一个29行。您可以在已使用的URL参数“&Start=”:1中看到这一点。。。30 ... 59 ... 88
知道这一点后,您可以通过以下方式计算当前页码:
_start := @ToNumber(@Replace(@UrlQueryString("start"); ""; "1"));
_count := @ToNumber(@Replace(@UrlQueryString("count"); ""; "30")) - 1;
@Integer((@ToNumber(_start) / _count) + 1)
请注意,这仅适用于未分类和不可折叠的视图
您可以找到更复杂的解决方案。它还具有其他功能,如转到页面和每页文档
如果你有机会完成你的项目,那么改用XPages。您可以更轻松地进行分页,因为它是“开箱即用”的
更新:
您将无法为分类视图找到合理的解决方案。如果您不想使用RESTAPI,您必须使用Domino视图URL参数(查找“OpenView”)。您无法从“&Start=”或任何其他参数判断您当前所在的页面
获得良好工作分页的最简单方法是使用XPages。希望您可以在项目中使用它…这里还有一个分类视图的工作解决方案。它基于上一个页码计算当前页码,并使用cookie 将通过HTML文本
的路径添加到表单中,以显示页码:
并将以下代码作为Web/JavaScript添加到表单的onLoad
事件中:
function getURLParameter(parameter) {
return decodeURIComponent((new RegExp('[?|&]' + parameter + '=' + '([^&;]+?)(&|#|;|$)').exec(location.search) || [, ""])[1].replace(/\+/g, '%20')) || null;
}
function getCookie(cname) {
var name = cname + "=";
var ca = document.cookie.split(';');
for(var i=0; i<ca.length; i++) {
var c = ca[i].trim();
if (c.indexOf(name)==0) return c.substring(name.length,c.length);
}
return "";
}
function compareStart(start1, start2) {
var list1 = start1.split(".");
var list2 = start2.split(".");
for (i=0; i <100; i++) {
var value1 = list1[i];
var value2 = list2[i];
if (value1 == null) {
return value2 == null ? 0 : -1;
} else if (value2 == null) {
return 1;
}
value1 = Math.round(value1);
value2 = Math.round(value2);
if (value1 !== value2) {
return value1 < value2 ? -1 : 1;
}
}
}
var start = getURLParameter("Start");
var page = "1";
if (start == null || start === "1") {
window.name = Math.floor((Math.random()*10000)+1);
start = "1";
} else {
page = getCookie("page" + window.name);
var oldStart = getCookie("start" + window.name);
page = Math.round(page) + compareStart(start, oldStart);
}
document.getElementById('pageNumber').innerHTML = page;
document.cookie = "page" + window.name + "=" + page;
document.cookie = "start" + window.name + "=" + start;
函数getURLParameter(参数){
返回decodeURIComponent((新的RegExp('[?&]'+参数+'='+'([^&]+?)(&&| | | | | | | | | | | |$)).exec(location.search)| | |[,'')[1]。替换(/\+//g,'%20'))| |空;
}
函数getCookie(cname){
变量名称=cname+“=”;
var ca=document.cookie.split(“;”);
对于(var i=0;i您在“下一个”和“上一个”的热点按钮中放置了什么?单击它们时会发生什么?您看过其他人的代码吗?有很多示例可以查看,例如标准讨论模板中的视图模板。感谢您的回复。我的视图每次列出30行。下一个=>下一个30行nes。类似地,上一个按钮。这是正常的默认行为。如果你想让它做一些不同的事情,那么你需要重新编写你的问题,告诉我们你想让它做什么;你需要向我们展示你已经尝试了什么,并告诉我们发生了什么。请查看关于如何提出好问题的指南,我不认为在web下对视图进行分页是一种正常的默认行为。如果是这样,你能告诉我它是如何工作的吗?确切地说,我想你不知道。祝你有好的一天,祝你好运,把-1指向你不知道答案的问题。很抱歉,你不相信我,但每个视图30行绝对是Domino web服务的默认行为呃。您可以通过转到服务器上Domino目录中服务器文档中的Web引擎选项卡并更改标记为“每个查看页面的默认行”的字段来更改该默认值。在某些服务器上,该设置可能在其他位置,即在Internet站点文档中。每个vi中显示的最大条目数也有一个设置ew,您可以将其设置为零,但这会影响服务器上所有数据库中的所有视图。感谢您的响应。不幸的是,我使用的是分类视图;(。此外,当我单击“下一步/上一步”时,我的URL不会显示&Start变量。@DbCommand(“Domino”;“ViewNextPage”);@SetTargetFrame(“Myframe”)您必须在没有框架集的情况下测试它才能查看OpenView URL参数-只需在浏览器中打开一个视图,并将“下一步/上一步”按钮减少到@DbCommand()。我测试了它,但它会在浏览器的另一个选项卡中打开视图。考虑到这一点,我想使用@SetTargetFrame…在Designer中打开“Web浏览器中的设计/预览/…”菜单中的视图。然后您应该会看到类似
http://Server/Database.nsf/ViewName?OpenView
在浏览器中。请告诉我如何在表单上插入通过HTML文本的路径?将文本写入表单,标记文本,然后单击菜单“文本/通过HTML的路径”它能工作!太棒了!我观察到,即使你在窗口的两个不同选项卡中打开应用程序,它也能工作。非常感谢!(再次)现在我必须研究OnLoad事件的代码。关于cookies,一个(愚蠢的)问题:如果cookies被删除,而应用程序在web上运行,它还能工作吗?