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

效果如下:

技术要求:使用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. hadoop完全分布式模式的安装和配置

    本文是将三台电脑用路由器搭建本地局域网,系统为centos6.5,已经实验验证,搭建成功. 一.设置静态IP&修改主机名&关闭防火墙(all-root)(对三台电脑都需要进行操作) 0 ...

  2. Android高手进阶教程(五)之----Android 中LayoutInflater的使用!

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://weizhulin.blog.51cto.com/1556324/311450 大 ...

  3. Python学习2-列表和元组

    Python学习2-列表和元组 标签(空格分隔): 列表 元组 在Python中,最基本的数据结构是序列(sequence).序列中的每个元素被分配一个序号--即元素的位置,也称为索引.索引从0开始. ...

  4. window 7 下一台cp 两个mysql 配置主从

    环境 : 个人 pc windows7 一台 ; 使用 : 官方下载: mysql-noinstall-5.5.11-win32.zip 1. 解压 成2个 (文件夹) mysql_master (主 ...

  5. core文件分析

    http://baidutech.blog.51cto.com/4114344/904419/ http://www.newsmth.net/pc/pccon.php?id=10001977& ...

  6. cocos2dx lua中继承与覆盖C++方法

    cocos2dx的extern.lua中的class方法为lua扩展了面向对象的功能,这使我们在开发中可以方便的继承原生类 但是用function返回对象的方法来继承C++类是没有super字段的,这 ...

  7. 基数排序/Go实现

    package main import ( "fmt" ) type Radix struct { length int //序列中最大数的位数 radix [][]int //0 ...

  8. Effective java笔记6--异常

    充分发挥异常的优点,可以提高一个程序的可读性.可靠性和可维护性.如果使用不当的话,它们也会带来负面影响. 一.只针对不正常的条件才使用异常 先看一段代码: //Horrible abuse of ex ...

  9. 存储过程中使用事务与try catch

    一.存储过程中使用事务的简单语法 在存储过程中使用事务时非常重要的,使用数据可以保持数据的关联完整性,在Sql server存储过程中使用事务也很简单,用一个例子来说明它的语法格式: 代码 : ) ) ...

  10. Aptana 插件 for Eclipse 4.4

    http://download.aptana.com/studio3/plugin/install Aptana Update Site This site is designed to be use ...