项目需求:自定义开发一个能分页显示列表项的小部件,允许左右翻页,能根据用户权限来显示管理链接等。

效果如下:

技术要求:使用sharepoint rest API 来获取列表项,这样性能高,能够快速响应用户操作。(关于REST API详细介绍见我的博客:SharePoint REST Service steps by steps

注意: 这里我固定单页显示5项,可自行更改。当页面在第一页时,默认左分页隐藏,最后一页时,右分页默认隐藏。在页面加载过程会出现加载图片的效果,页面重新刷新时,不会记录之前用户所在分页,默认回到第一页,有兴趣的朋友,可以把这功能改改。

步骤:

1. 创建一个自定义list,无需创建其他字段, 添加数据即可, 我这里list名称是News

2. 编辑当前list页面, 添加ScriptContent Webpart.

3. 编辑该scriptconten webpart, 加入下列布局代码片段:

<script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.9.1.min.js"></script>
<script type="text/javascript" src="/Style Library/CustomJSLink/news.js"></script>
<link rel="stylesheet" type="text/css" href="/Style Library/CustomJSLink/news.css"> <div> <div class="news"> <div class = "title">News</div> <div class="hidden" id="newsLink"><a class="manageLink">Manage Link</a></div> </div> <div class="btn"> <img id="pre" src="http://dev-sp/Marketing%20Document/pre.JPG"> </div> <div id="result" ><img id="load" src="http://dev-sp/Marketing%20Document/busy.gif"></div> <div class = "btn"> <img id="next" src="http://dev-sp/Marketing%20Document/next.JPG"> </div> </div>

4. 引入CSS文件和JS文件,保存下列代码到sharpoint 站点。

news.css 文件

#result
{
float: left;
width: 200px;
height: 200px;
text-align: left;
margin-left: 5px;
margin-right: 5px; } .btn
{
float: left;
width: 20px;
height: 20px;
} .head
{
font-size: 15px;
color: #19abef;
float:left;
max-width:150px;
overflow:hidden;
text-overflow:ellipsis;
} .time
{
clear:both;
font-size: 15px;
color: grey;
} .btn:hover img
{
border: 1px solid #0000ff;
} .news
{
width: 100%;
float:left;
clear:both;
margin-left:10px;
margin-bottom:10px;
} .title
{
font-size: 25px;
width: 70px;
float:left;
} #newsLink
{
width: 100px;
font-size: 15px;
font:#19abef;
float:left;
margin-top:10px;
margin-left:50px; } #load
{
margin-left:70px;
} .hidden
{
display:none;
}

JS文件:

var skip = 5;
var count = 0; function formatDate(date, pattern) {
var d;
if ((d = parseDate(date)) == null) {
return "";
}
if (!pattern) {
pattern = "yyyy-MM-dd";
}
var arrWeek = ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "Sunday", "Monday", "Tuesday", "Tuesday", "Thursday", "Friday", "Saturday"];
var value = new Object();
value["y"] = parseString(date.getFullYear());
value["M"] = parseString(date.getMonth() + 1);
value["d"] = parseString(date.getDate());
value["H"] = parseString(date.getHours());
value["h"] = parseString(value["H"] > 12 ? (value["H"] - 12) : value["H"]);
value["m"] = parseString(date.getMinutes());
value["s"] = parseString(date.getSeconds());
value["S"] = parseString(date.getMilliseconds());
value["E"] = arrWeek[date.getDay()];
value["e"] = arrWeek[date.getDay() + 7];
value["a"] = (value["H"] > 12 ? "PM" : "AM");
value["A"] = (value["H"] > 12 ? "下午" : "上午");
var result = "";
var i = 0;
var hasE = false;
var hasAMPM = false;
while (i < pattern.length) {
var c = pattern.charAt(i++);
var lc = c;
var tmpStr = c;
while (i < pattern.length && (c = pattern.charAt(i)) == lc) {
tmpStr += c;
i++;
}
if (value[lc] != "" && value[lc] != null && value[lc] != "undefined") {
if ((lc == "E" || lc == "e") && !hasE) {
result += value[lc];
hasE = true;
} else if (lc == "E" || lc == "e") {
result += tmpStr;
} else if ((lc == "a" || lc == "A") && !hasAMPM) {
result += value[lc];
hasAMPM = true;
} else if ((lc == "a" || lc == "A")) {
result += tmpStr;
} else {
if (tmpStr == "d" || tmpStr == "M" || tmpStr == "H" || tmpStr == "h" || tmpStr == "m" || tmpStr == "s") {
result += value[lc];;
} else {
result += value[lc].fillChar(tmpStr.length);
}
}
} else {
result += tmpStr;
}
}
return result;
} function parseDate(value) {
var date = null;
if (Date.prototype.isPrototypeOf(value)) {
date = value;
} else if (typeof (value) == "string") {
date = new Date(value.replace(/-/g, "/"));
} else if (value != null && value.getTime) {
date = new Date(value.getTime());
}
;
return date;
}; function parseString(value) {
if (value == null) {
return "";
} else {
return value.toString();
}
};
String.prototype.fillChar = function (length, mode, char) {
if (!char) {
char = "0";
}
if (this.length > length) {
if (mode == "after") {
return this.substr(0, length);
} else {
return this.substr(this.length - length, length);
}
}
var appendStr = "";
for (var i = 0; i < (length - this.length) / char.length; i++) {
appendStr += char;
}
if (mode == "after") {
return this + appendStr;
}
else {
return appendStr + this;
}
}; function execute(url, type, verb, data, success, error) {
var host = window.location.protocol + '//' + window.location.host;
var webUrl = _spPageContextInfo.webServerRelativeUrl;
var urlFull = host + webUrl;
$.ajax({
url: urlFull + "/_api/web/lists/GetByTitle('News')/" + url,
type: type,
data: data,
headers: {
"Accept": "application/json;odata=verbose",
"Content-Type": "application/json;odata=verbose",
"X-RequestDigest": $("#__REQUESTDIGEST").val(),
"IF-MATCH": "*",
"X-HTTP-Method": verb
},
cache: false,
success: success,
error: error
});
} function retriveListItem() {
$("#pre").off("click");
$("#next").off("click");
$("#result").html("<img id=\"load\" src=\"http://wsscfd/CEC/PublishingImages/busy.gif\">");
var skips = skip * count;
var numItmes = skip * (count + 1);
numPlus = numItmes + 1; execute(
"items?$orderby=Created desc&$select=ID,Title,Created&$top=" + numPlus,
"GET",
"GET",
null,
function (data, status, xhr) {
$("#result").html("");
var body = "";
var length = data.d.results.length;
if (length > numItmes) {
$("#next").show();
}
else {
$("#next").hide();
}
if (length <= 5) {
$("#pre").hide();
$("#next").hide();
}
if (length > 6) {
$("#pre").show();
}
else {
$("#pre").hide();
} for (var i = 0; i < data.d.results.length; i++) {
if (i >= skips && i < numItmes) {
var item = data.d.results[i];
var date = new Date(item.Created);
var str = date.toDateString();
var month = str.substr(4, 3);
dateFormat = formatDate(date, "dd yyyy hh:mm a");
var host = window.location.protocol + '//' + window.location.host;
var webUrl = _spPageContextInfo.webServerRelativeUrl;
var itemUrl = host + webUrl + "/Lists/News/DispForm.aspx" + "?ID=" + item.ID;
var sourceUrl = window.location.href;
if (sourceUrl.indexOf("&Source=") > 0) {
var sourceUrlR = sourceUrl.substring(0, sourceUrl.indexOf("&Source="));
sourceUrl = sourceUrl.replace(sourceUrlR, "");
}
else {
var sourceUrl = "&Source=" + window.location.href;
}
$("#result").append("<div class='item'><div class='head'><a href='" + itemUrl + sourceUrl + "' title = '" + item.Title + "'>" + item.Title + "</a></div>" + "<div class='time'>" + month + " " + dateFormat + "</div>" + "</div>");
}
} $("#pre").one("click", pre); $("#next").one("click", next);
},
function (xhr, status, error) {
$("#result").empty().text(error);
});
} function next() {
count++;
retriveListItem();
} function pre() {
if (count > 0) {
count--;
retriveListItem();
}
} function CheckPermissionOnWebForSpec() {
context = new SP.ClientContext.get_current(); web = context.get_web(); this._currentUser = web.get_currentUser(); context.load(this._currentUser); context.load(web, 'EffectiveBasePermissions'); context.executeQueryAsync(Function.createDelegate(this, this.onSuccessMethodForSpec), Function.createDelegate(this, this.onFailureMethodForSpec));
} function onSuccessMethodForSpec(sender, args) {
if (web.get_effectiveBasePermissions().has(SP.PermissionKind.manageWeb)) {
var specAccessManageLink = document.getElementById('newsLink');
specAccessManageLink.classList.remove('hidden'); var host = window.location.protocol + '//' + window.location.host;
var webUrl = _spPageContextInfo.webServerRelativeUrl;
var allItems = host + webUrl + "/Lists/News/AllItems.aspx";
$(".manageLink").attr("href", allItems);
}
} function onFailureMethodForSpec(sender, args) {
alert('error' + args.message);
} $(document).ready(function () {
ExecuteOrDelayUntilScriptLoaded(CheckPermissionOnWebForSpec, "sp.js");
ExecuteOrDelayUntilScriptLoaded(retriveListItem, "sp.js");
});

5. 到此,大功告成!如有疑问,相互探讨。。。。

SharePoint 2013 自定义翻页显示列表项的更多相关文章

  1. SharePoint 2013 自定义模板页后在列表里修改不了视图

    前言 最近系统从2010升级至2013,有自定义模板页.突然发现在列表中切换不了视图,让我很费解. 我尝试过以下解决方案: 去掉自定义css 去掉自定义js 禁用所有自定义功能 结果都没有效还是一样的 ...

  2. 每日学习心得:SharePoint 2013 自定义列表项添加Callout菜单项、文档关注、SharePoint服务端对象模型查询

    前言: 前一段时间一直都比较忙,没有什么时间进行总结,刚好节前项目上线,同时趁着放假可以好好的对之前遇到的一些问题进行总结.主要内容有使用SharePoint服务端对象模型进行查询.为SharePoi ...

  3. SharePoint 2010/2013 隐藏的速度下拉菜单列表项

    SharePoint 2010/2013 隐藏的速度下拉菜单列表项         有时为了防止一些用户编辑列表项.需要隐藏下拉菜单列表项.,仅仅须要添加一个内容编辑器控件,将css代码写入其HTML ...

  4. SharePoint 2013 自定义扩展菜单

    在对SharePoint进行开发或者功能扩展的时候,经常需要对一些默认的菜单进行扩展,以使我们开发的东西更适合SharePoint本身的样式.SharePoint的各种功能菜单,像网站设置.Ribbo ...

  5. SharePoint 2013 自定义扩展菜单(二)

    接博文<SharePoint 2013 自定义扩展菜单>,多加了几个例子,方便大家理解. 例七 列表设置菜单扩展(listedit.aspx) 扩展效果 XML描述 <CustomA ...

  6. IOS开发之--UIScrollView pagingEnabled自定义翻页宽度

    用到UIScrollview的翻页效果时,有时需要显示一部分左右的内容,但是UIScrollView的PagingEnabled只能翻过整页,下面几个简单的设置即可实现 技术点: 1. 创建一个继承U ...

  7. 【FBA】SharePoint 2013自定义Providers在基于表单的身份验证(Forms-Based-Authentication)中的应用

    //http://www.cnblogs.com/OceanEyes/p/custom-provider-in-sharepoint-2013-fba-authentication.html 由于项目 ...

  8. [FBA]SharePoint 2013自定义Providers在基于表单的身份验证(Forms-Based-Authentication)中的应用

    //http://tech.ddvip.com/2014-05/1401197453210723.html 由于项目的需要,登录SharePoint Application的用户将从一个统一平台中获取 ...

  9. SharePoint 2013自定义Providers在基于表单的身份验证(Forms-Based-Authentication)中的应用

    由于项目的需要,登录SharePoint Application的用户将从一个统一平台中获取,而不是从Domain中获取,所以需要对SharePoint Application的身份验证(Claims ...

随机推荐

  1. YouTrack Changing Database Location for EXE Distribution(windows service)

    If you have installed YouTrack from EXE Distribution, then the best way to change the database locat ...

  2. JFinal 部署在 Tomcat 下推荐方法(转)

    首先明确一下 JFinal 项目是标准的 java web 项目,其部署方式与普通 java web 项目没有任何差别.Java Web 项目在 Tomcat 下部署有一些不必要的坑需要避免,所以撰写 ...

  3. fcntl()功能 详解

    fcntl()函数可以改变已打开文件的性质 <pre lang="c" escaped="true"> #include <unistd.h& ...

  4. Java中Enum枚举的使用

    三种不同的用法 注意项: 1.在switch中使用枚举能使代码的可读性更强.   2.如果要自定义方法,那么必须在enum实例序列的最后添加分号.而且Java要求必须先定义enum实例.   3.所有 ...

  5. Pig实战

    1. pig简介 2. 安装pig 3. 实战pig 4. 深入pig 5. 参考资料及代码下载 <1>. Pig简介  pig是hadoop项目的一个拓展项目, 用以简化hadoop编程 ...

  6. APP打包上线应注意的问题!

    咱们只谈技术不谈业务!关系到怎么推广怎么让软件发扬光大,其实归根结底这都和公司的现状和产品经理有直接的联系,与我们程序员关系不太密切.   我总结的上线项目和我做的项目以及公司外包过来的项目升级再次发 ...

  7. AndroidManifest修改重打包全过程

    AndroidManifest修改重打包全过程: 作者: 蔡建良 2013-06-26 准备工具:apktool.jar和signapk.jar 下载: http://download.csdn.ne ...

  8. redmine 2.5.2 安装后邮件无法发送

    找到redmine安装目录-apps->redmine->htdocs->conflg->configuration.yml email_delivery:    delive ...

  9. c++中实现委托

    成员函数指针与高性能的C++委托(上篇) 撰文:Don Clugston 引子 标准C++中没有真正的面向对象的函数指针.这一点对C++来说是不幸的,因为面向对象的指针(也叫做"闭包(clo ...

  10. JavaScript对象(document对象 图片轮播)

    图片轮播: 需要注意的HTML需要img标签,他和input标签一样,是非封闭的标签 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Tran ...