Annoucements Slider using SP Web Services
Posted: July 17th, 2009 | Author: davecavins | Filed under: SharePoint Design | Tags: jQuery, SharePoint, web services | 12 Comments »This is a simple news slider I put together using SharePoint web services, jQuery and the Easy Slider Plugin from CSS Globe. You can get the plugin here. The Web Part points to the local site’s Annoucements list and display the title, body and a link to view the item. The jQuery connection to the SharePoint web service is based on code from Jan Tielens.

Installation
4 simple steps.
- Paste the code below into a Content Editor Web Part (CEWP) on your page.
- Change the link to jQuery if needed. The code references the jQuery library on Google Code so if you are working in an isolated environment or already have jQuery on your server just change the link (its on the first line).
- Put the Easy Slider code in a document library and adjust the link to it on the second line of the code.
- Update the CSS to match your site (The CSS can be moved to an external file or added to your custom theme).
Code
/*Link to jQuery change this to point to where you have the jQuery files */
<script type="text/javascript" src="js/jquery-1.3.2.min.js"></script>
/*Change this to point to the plugin file on your sever */
<script type="text/javascript" src= js/easySlider1.5.js></script>
<script type="text/javascript">
$(document).ready(function() {
var soapEnv =
"<soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/'> \
<soapenv:Body> \
<GetListItems xmlns='http://schemas.microsoft.com/sharepoint/soap/'> \
<listName>Announcements</listName> \
<viewFields> \
<ViewFields> \
<FieldRef Name='Title' /> \
<FieldRef Name='Body' /> \
<FieldRef Name='ID' /> \
<FieldRef Name='FileDirRef' /> \
</ViewFields> \
</viewFields> \
</GetListItems> \
</soapenv:Body> \
</soapenv:Envelope>";
$.ajax({
url: "_vti_bin/lists.asmx",
type: "POST",
dataType: "xml",
data: soapEnv,
complete: processResult,
contentType: "text/xml; charset=\"utf-8\""
});
});
function processResult(xData, status) {
$(xData.responseXML).find("z\\:row").each(function() {
var teaser = $(this).attr("ows_Body");
var teaserText = teaser.slice(0,500);
var urlValue = $(this).attr("ows_FileDirRef");
var urlArray;
var urlName;
if (urlValue == undefined)
{
urlName = "- - -";
}
else {
urlArray = urlValue.split(";#");
urlName= urlArray[1];
}
var liHtml = "<li><h5>" + $(this).attr("ows_Title") + "</h5><p>" + teaserText +
"<br/><a class='readMore' href='/" + urlName + "/Dispform.aspx?ID=" + + $(this).attr("ows_ID") + "'>Read More<a/></p></li>";
$("#tasksUL").append(liHtml);
});
$("#slider").easySlider({
controlsBefore: '<div id="controls2">',
controlsAfter: '</div>',
auto: true,
continuous: true,
//vertical: true,
prevText: '< Prev',
nextText: 'Next >',
speed: 1000,
pause: 4000
});
}
</script>
<style type="text/css">
#slider{font-size:x-small; background:#E2EFFF;}
#slider h5{padding:5px; font-size:small; color:#315F9B; letter-spacing:-1px; line-height:20px;margin:0px;}
#slider div {font-size: x-small; padding:0px; margin:3px;}
#slider ul, #slider li{margin:0; padding:0; list-style:none;}
#slider li{width:600px; height:241px; overflow:hidden; padding:0px;}
#controls2 {padding:3px 0 0 0; text-align:right; width:600px;}
.readMore {margin:3px;padding:2px;background:#F7FBFF;}
#prevBtn, #nextBtn{}
#nextBtn{}
#prevBtn a, #nextBtn a{font-size:x-small;}
#nextBtn a{}
</style>
<div id="slider">
<ul id="tasksUL"/>
</div>
Enjoy
Notes
Announcements with really long bodies will get cut off because the div that holds the contents has a fixed height. This can be adjusted in the CSS. Long titles could also cause a problem if they wrap to multiple lines. One other thing to watch out for is inline styles applied by the WYSIWYG editor on the body of the announcement. They can override the default styles and cause items to look different.
Changing whats displayed
To change which fields are displayed edit the section and add a tag for the fields you want to reference. If you have customized your list or renamed fields the names that appear on the column headings and on the list settings page may not be correct. The fastest way to find the real name of a field is to go to the list settings page and click on the name of the column to edit it. On the edit page look at the very end of the URL and it will say Field=[real name of your field].
Once you have edited the added the all you need to do is edit the liHtml var to include the new field in the output html. To show the field just use this $(this).attr(“ows_MyFieldName”).
Upate
New Stlyes for the slider. A little less grey and will match better with a default SharePoint theme
<style type="text/css">
#slider{font-size:x-small; background:#E2EFFF;}
#slider h5{padding:5px; font-size:small; color:#315F9B;
letter-spacing:-1px; line-height:20px;margin:0px;}
#slider div {font-size: x-small; padding:0px; margin:3px;}#slider ul, #slider li{margin:0; padding:0; list-style:none;}#slider li{width:600px; height:241px; overflow:hidden; padding:0px;}#controls2 {padding:3px 0 0 0; text-align:right; width:600px;}.readMore {margin:3px;padding:2px;background:#F7FBFF;}#prevBtn, #nextBtn{}#nextBtn{}#prevBtn a, #nextBtn a{font-size:x-small;}#nextBtn a{}</style>
Conclusion
This is very basic but provides some nice functionality and can be easily styled to match your site. Because it uses the web service instead of a data view webpart it is portable and will work on any site with an announcements list. With some more work on the JavaScript it would be simple to limit the amount of text from the body that is displayed.
Related posts:
- Image Slideshow with captions
- SharePoint Vertical News Ticker
- Adding Suggestions to the Sharepoint search box : Part 2


[...] from a SharePoint list. It was easy to do because I just used some of the code from the announcements slider I built a while back so I did not bother to write a post about it. Yesterday I saw a post on [...]
[...] slider could also be implemented to run off of the SharePoint list web service the same way I did in this post. If you have any questions or comments feel free to post. var addthis_pub = 'davecavins'; var [...]
That’s exactly what I was looking for.
I was trying to include a Slider script in SharePoint, but it just didn’t work the way I wanted.
This is really cool, because it pulls the data out of an announcement list instead of html code! Thanks!
I can’t seem to get this to work on my site. It reads the announcements list fine. But, it displays all of them from top to bottom without the “next” and “previous” buttons and no sliding.
Check and make sure the javascript files are linked up properly. The functionailty you are missing all comes from the javascript files. Is the page showing a Javascript error?
I am wondering what could be cuasing jquery not to run properly on the site when it is referencing internal MOSS lists!
a jquery working with in-code html list items is OK but once i try to load a list via soap, nothing is shown ,no error, no display…
I am thinking that this could be the same issue as RSS/XML webparts not supporting authenticated internal lists!
Thanks
@Fadi I have used the SOAP method in environments where authenticated feeds are not supported and it worked fine. Check and make sure the list name is correct in the SOAP envelope. I like using the SOAP/wweb service method but it is very picky and easy to break.
Hi Dave,
I’m having a little problem: I’ve adjusted the height in the CSS and I can clearly see that there is enough space for at least two more lines, but my text gets cut off in the middle of a row as if there was a maximum number of characters. Do you have an idea what the problem could be?
Thanks
Nicole
There is a character limit set in the javascript.
This code gets the first 500 characters of the body of the announcement. Just change 500 to a larger number if you want to show more text. Hope this helps.
Thanks, Dave! Looks much better now.
One more question: is there a way to make the sliding stop when you click or mouseover, so that people can read without having to go back all the time?
I’m having the same problem as @FADI.
I add the code to a CEWP and nothing is shown ,no error, no display. Any ideas how to troubleshoot?
Thanks.
@Frank – In the past I have tried adding alerts to the script just to be sure it is firing. I plan to rewrite this script one day because so many people have had issues with it not working.