我目前正在寻找一种方法来将过滤功能添加到SharePoint中的列表,该列表通过复选框选择过滤列表内容。
这个小模型可能有助于理解我在说什么:
我们的想法是在右侧有一个普通的SharePoint自定义列表,在左侧有一个复选框列表,它将从列表的内容动态生成 - >一列是“过滤器组”,所有字段内容都是过滤器值。
当在左侧选择一个或多个值时,列表中的项目应立即相应地过滤(ajax,而不重新加载页面)。 例如,在样机中,选择“纽约”和“蓝色”只会显示“Steve's Car”这个项目。
您现在,就像几乎所有在线商店中的产品过滤器一样。
如何实现?如果这可以包含在我的解决方案包中(包括C#/ jQuery中的其他内容),那将是非常棒的。
我是SharePoint的前端自定义新手,但我确信有一种方法: - )
编辑:我顺便使用SP2016。
答案 0 :(得分:2)
潘多拉!
据我了解,您的第一个问题是如何通过动态获取左侧滤镜的值。我看到有两种方法:第一种方法,你可以建立caml查询并从列表中获取项目;第二种方法,你可以使用ctx.ListData,它自己初始化sharepoint并在ctx.ListData.Row(项目数组)中处理项目并获得唯一的字段值。请注意,ctx.ListData.Row仅包含页面上列表视图中加载的项目。
对于列表过滤,您可以连接页面哈希的过滤器链接。示例:“?List = {ListID}& View = {ViewID}& FilterField1 = Color-FilterValue1 = Blue”。尝试过滤列表中的列,您将看到网址修改。您可以通过ctx.listName和ctx.view检索ListID和ViewId。
然后在函数MyRefreshPageToEx中传递它。列表将被过滤。
的
的function FilterList(){
var tableId = $(".ms-listviewtable").attr("id");
var filterUrl = "?List={ListID}&View={ViewID}&FilterField1=Color-FilterValue1=Blue";
MyRefreshPageToEx(tableId, filterUrl, false);
}
function MyRefreshPageToEx(lvTableID, url, bForceSubmit) {
var tblv = document.getElementById(lvTableID);
var clvp = CLVPFromCtx(tblv);
if (clvp != null && clvp.ctx.IsClientRendering) {
clvp.RefreshPaging(url);
clvp.ctx.queryString = url;
if ((typeof clvp.ctx.operationType == "undefined" || clvp.ctx.operationType == SPListOperationType.Default) && Boolean(clvp.ctx.ListData)) {
var fromPage = clvp.ctx.ListData.FirstRow - 1;
var toPage = Number(GetUrlKeyValue("PageFirstRow", false, url));
if (!isNaN(fromPage) && !isNaN(toPage) && fromPage != toPage)
fromPage < toPage ? (clvp.ctx.operationType = SPListOperationType.PagingRight) : (clvp.ctx.operationType = SPListOperationType.PagingLeft);
}
}
else {
SubmitFormPost(url, bForceSubmit);
}
}
的