This post is a follow up to the past 3 part series ‘Display News pages with CQWP’. In the last post (Part 3) I wrote about how to slide the news items one by one from right to left with the Content By Query Web Part (CQWP) and with help of jQuery.
In this post I will show how to use a similar technique but we’re now going to create an image slideshow that reads images from an image library in SharePoint. To achieve this I have used a slideshow plugin that support many types of effects, it also supports stuff like pause on hover, auto fit, click triggers and much more.
This blog do not cover how to configure the CQWP or the basics of modifying ItemStyle.xsl ContentQueryMain.xsl or other XSL files that describes the CQWP, we´re going straight to the core for the fun stuff which means XSLT, CSS and jQuery. Please read the previous posts for more information about options for created date, the count word function and the layout.
Some things to consider:
- By this example you need to modify ContentQueryMain.xsl. Changes in this file will affect all templates in ItemStyle.xsl, therefor I recommend you to create a copy of ContentQueryMain.xsl and ItemStyle.xsl and modify these copies separately.
- If you prefer you can create a provisioning module with Visual Studio 2010, a feature that pushes the copies and the web part into proper folders, but this is a SPD blog, so I will show how to do this by SharePoint Designer 2010.
- When JS is used for DOM manipulation, all the content could show up shortly when the page loads, before the DOM is fully loaded. This can be solved by CSS or jQuery, in this example I have simply used a fixed height for the container where the images displays.
- The images will be displayed from the thumbnail directory in the Picture Library, so you don’t need to think about loading time for full size images.
- Content Query web part is only available in SharePoint Server.
Let´s go!
Now create a standard Picture Library in SharePoint and upload a couple of images, type a title for each image. Go to a page in your SharePoint environment and add a Content Query Web Part (CQWP). Open the tool pane. Expand Query and click ‘Show items from the following list’. Select the picture library you just created. Click the OK button. Verify that you see the images onto the page, and then click the Web Part arrow and select Export. Save it on the desktop. You can now delete the Content Query Web Part on the page and close the page. Later on we going to do some changes in this file and upload it, let’s come back to that.
Download jQuery Cycle Plugin here and the latest jQuery, upload the files to Style library.
Open your custom master page and type the proper reference to latest jQuery and to the cycle plugin, for example
<!-- Custom Scripts --> <script type="text/javascript" src="/Style Library/Scripts/jquery-1.6.min.js"></script> <script type="text/javascript" src="/Style Library/Scripts/jquery.cycle.all.js"></script>
In the head section of the master page, copy and paste this script, remember that this plugin allows lots of cool effects more than this
<!-- Image Cycle --> <script type="text/javascript"> $(document).ready(function() { $('.slideshow').cycle({ fx: 'fade', speed: 3000, timeout:3000, random: 1 }); }); </script>
Copy and paste this CSS classes into your custom CSS file
/* --- CYCLE JQUERY --- */ .slideshow {position:relative;height:170px;overflow: hidden;} .slideshow img {display:block;height:143px;padding:5px;border:1px solid #ccc;background-color:#eee;} .SlideshowText {padding-left:5px;margin-bottom:10px;height:20px;}
Publish the master page and the CSS file and create a copy of ItemStyle.xsl check it out and rename this to ItemStyleImageCycle.xsl. In this file you’ll need only one template, so open jthe file and delete all its content. Copy and paste the following xslt stylesheet.
<xsl:stylesheet version="1.0" exclude-result-prefixes="x d xsl msxsl cmswrt" xmlns:x="http://www.w3.org/2001/XMLSchema" xmlns:d="http://schemas.microsoft.com/sharepoint/dsp" xmlns:cmswrt="http://schemas.microsoft.com/WebParts/v3/Publishing/runtime" xmlns:ddwrt="http://schemas.microsoft.com/WebParts/v2/DataView/runtime" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt"> <xsl:param name="ItemsHaveStreams"> <xsl:value-of select="'False'" /> </xsl:param> <xsl:variable name="OnClickTargetAttribute" select="string('javascript:this.target="_blank"')" /> <xsl:variable name="ImageWidth" /> <xsl:variable name="ImageHeight" /> <!-- CycleImage Template --> <xsl:template name="CycleImage" match="Row[@Style='CycleImage']" mode="itemstyle"> <xsl:variable name="SafeLinkUrl"> <xsl:call-template name="OuterTemplate.GetSafeLink"> <xsl:with-param name="UrlColumnName" select="'LinkUrl'"/> </xsl:call-template> </xsl:variable> <xsl:variable name="SafeImageUrl"> <xsl:call-template name="OuterTemplate.GetSafeStaticUrl"> <xsl:with-param name="UrlColumnName" select="'ImageUrl'"/> </xsl:call-template> </xsl:variable> <xsl:if test="string-length($SafeImageUrl) != 0"> <a href="{$SafeLinkUrl}"> <xsl:if test="$ItemsHaveStreams = 'True'"> <xsl:attribute name="onclick"> <xsl:value-of select="@OnClickForWebRendering"/> </xsl:attribute> </xsl:if> <xsl:if test="$ItemsHaveStreams != 'True' and @OpenInNewWindow = 'True'"> <xsl:attribute name="onclick"> <xsl:value-of disable-output-escaping="yes" select="$OnClickTargetAttribute"/> </xsl:attribute> </xsl:if> <img class="image" src="{$SafeImageUrl}" title="{@ImageUrlAltText}"><br /> <div class="SlideshowText"><xsl:value-of select="@Title"/></div> <xsl:if test="$ImageWidth != ''"> <xsl:attribute name="width"> <xsl:value-of select="$ImageWidth" /> </xsl:attribute> </xsl:if> <xsl:if test="$ImageHeight != ''"> <xsl:attribute name="height"> <xsl:value-of select="$ImageHeight" /> </xsl:attribute> </xsl:if> </img> </a> </xsl:if> </xsl:template> </xsl:stylesheet>
When you have checked in and published this file, create a copy of ContentQueryMain.xsl. check it out and rename this to ContentQueryMainImageCycle.xsl. Open this file and copy and paste the following xsl stylesheet.
<xsl:stylesheet version="1.0" exclude-result-prefixes="x xsl cmswrt cbq" xmlns:x="http://www.w3.org/2001/XMLSchema" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:cmswrt="http://schemas.microsoft.com/WebPart/v3/Publishing/runtime" xmlns:cbq="urn:schemas-microsoft-com:ContentByQueryWebPart"> <xsl:output method="xml" indent="no" media-type="text/html" omit-xml-declaration="yes"/> <xsl:param name="cbq_isgrouping" /> <xsl:param name="cbq_columnwidth" /> <xsl:param name="Group" /> <xsl:param name="GroupType" /> <xsl:param name="cbq_iseditmode" /> <xsl:param name="cbq_viewemptytext" /> <xsl:param name="cbq_errortext" /> <xsl:param name="SiteId" /> <xsl:param name="WebUrl" /> <xsl:param name="PageId" /> <xsl:param name="WebPartId" /> <xsl:param name="FeedPageUrl" /> <xsl:param name="FeedEnabled" /> <xsl:param name="SiteUrl" /> <xsl:param name="BlankTitle" /> <xsl:param name="BlankGroup" /> <xsl:param name="UseCopyUtil" /> <xsl:param name="DataColumnTypes" /> <xsl:param name="ClientId" /> <xsl:param name="Source" /> <xsl:param name="RootSiteRef" /> <xsl:param name="CBQPageUrl" /> <xsl:param name="CBQPageUrlQueryStringForFilters" /> <!--No UL start--> <xsl:variable name="BeginList" select="string()" /> <!--No end UL--> <xsl:variable name="EndList" select="string()" /> <!--No LI start--> <xsl:variable name="BeginListItem" select="string()" /> <!--No LI end--> <xsl:variable name="EndListItem" select="string()" /> <xsl:template match="/"> <xsl:call-template name="OuterTemplate" /> </xsl:template> <xsl:template name="OuterTemplate"> <xsl:variable name="Rows" select="/dsQueryResponse/Rows/Row" /> <xsl:variable name="RowCount" select="count($Rows)" /> <xsl:variable name="IsEmpty" select="$RowCount = 0" /> <div id="{concat('cbqwp', $ClientId)}" class="cbq-layout-main"> <xsl:if test="$cbq_iseditmode = 'True' and string-length($cbq_errortext) != 0"> <div class="wp-content description"> <xsl:value-of disable-output-escaping="yes" select="$cbq_errortext" /> </div> </xsl:if> <xsl:choose> <xsl:when test="$IsEmpty"> <xsl:call-template name="OuterTemplate.Empty" > <xsl:with-param name="EditMode" select="$cbq_iseditmode" /> </xsl:call-template> </xsl:when> <xsl:otherwise> <xsl:call-template name="OuterTemplate.Body"> <xsl:with-param name="Rows" select="$Rows" /> <xsl:with-param name="FirstRow" select="1" /> <xsl:with-param name="LastRow" select="$RowCount" /> </xsl:call-template> </xsl:otherwise> </xsl:choose> </div> <xsl:if test="$FeedEnabled = 'True' and $PageId != ''"> <div class="cqfeed"> <xsl:variable name="FeedUrl1" select="concat($SiteUrl,$FeedPageUrl,'xsl=1&web=',$WebUrl,'&page=',$PageId,'&wp=',$WebPartId,'&pageurl=',$CBQPageUrl,$CBQPageUrlQueryStringForFilters)" /> <a href="{cmswrt:RegisterFeedUrl( $FeedUrl1, 'application/rss+xml')}"><img src="\_layouts\images\rss.gif" border="0" alt="{cmswrt:GetPublishingResource('CbqRssAlt')}"/></a> </div> </xsl:if> </xsl:template> <xsl:template name="OuterTemplate.Empty"> <xsl:param name="EditMode" /> <xsl:if test="$EditMode = 'True' and string-length($cbq_errortext) = 0"> <div class="wp-content description"> <xsl:value-of disable-output-escaping="yes" select="$cbq_viewemptytext" /> </div> </xsl:if> </xsl:template> <xsl:template name="OuterTemplate.Body"> <xsl:param name="Rows" /> <xsl:param name="FirstRow" /> <xsl:param name="LastRow" /> <!--Div and class - no UL and id--> <xsl:variable name="BeginColumn1" select="string('<div class="slideshow" style="width:')" /> <xsl:variable name="BeginColumn2" select="string('%" >')" /> <xsl:variable name="BeginColumn" select="concat($BeginColumn1, $cbq_columnwidth, $BeginColumn2)" /> <!--End Div - No end UL--> <xsl:variable name="EndColumn" select="string('</div>')" /> <xsl:for-each select="$Rows"> <xsl:variable name="CurPosition" select="position()" /> <xsl:if test="($CurPosition >= $FirstRow and $CurPosition <= $LastRow)"> <xsl:variable name="StartNewGroup" select="@__begingroup = 'True'" /> <xsl:variable name="StartNewColumn" select="@__begincolumn = 'True'" /> <xsl:choose> <xsl:when test="$cbq_isgrouping != 'True'"> <xsl:if test="$CurPosition = $FirstRow"> <xsl:value-of disable-output-escaping="yes" select="$BeginColumn" /> </xsl:if> </xsl:when> <xsl:when test="$StartNewGroup and $StartNewColumn"> <xsl:choose> <xsl:when test="$CurPosition = $FirstRow"> <xsl:value-of disable-output-escaping="yes" select="$BeginColumn" /> <xsl:call-template name="OuterTemplate.CallHeaderTemplate"/> </xsl:when> <xsl:otherwise> <xsl:call-template name="OuterTemplate.CallFooterTemplate"/> <xsl:value-of disable-output-escaping="yes" select="concat($EndColumn, $BeginColumn)" /> <xsl:call-template name="OuterTemplate.CallHeaderTemplate"/> </xsl:otherwise> </xsl:choose> </xsl:when> <xsl:when test="$StartNewGroup"> <xsl:call-template name="OuterTemplate.CallFooterTemplate"/> <xsl:call-template name="OuterTemplate.CallHeaderTemplate"/> </xsl:when> <xsl:when test="$StartNewColumn"> <xsl:choose> <xsl:when test="$CurPosition = $FirstRow"> <xsl:value-of disable-output-escaping="yes" select="$BeginColumn" /> </xsl:when> <xsl:otherwise> <xsl:value-of disable-output-escaping="yes" select="concat($EndColumn, $BeginColumn)" /> </xsl:otherwise> </xsl:choose> </xsl:when> <xsl:otherwise> </xsl:otherwise> </xsl:choose> <xsl:call-template name="OuterTemplate.CallItemTemplate"> <xsl:with-param name="CurPosition" select="$CurPosition" /> </xsl:call-template> <xsl:if test="$CurPosition = $LastRow"> <xsl:if test="$cbq_isgrouping = 'True'"> <xsl:call-template name="OuterTemplate.CallFooterTemplate"/> </xsl:if> <xsl:value-of disable-output-escaping="yes" select="$EndColumn" /> </xsl:if> </xsl:if> </xsl:for-each> </xsl:template> <xsl:template name="OuterTemplate.CallHeaderTemplate"> <xsl:value-of disable-output-escaping="yes" select="$BeginListItem" /> <xsl:apply-templates select="." mode="header"> </xsl:apply-templates> <xsl:value-of disable-output-escaping="yes" select="$BeginList" /> </xsl:template> <xsl:template name="OuterTemplate.CallItemTemplate"> <xsl:param name="CurPosition" /> <xsl:value-of disable-output-escaping="yes" select="$BeginListItem" /> <xsl:choose> <xsl:when test="@Style='NewsRollUpItem'"> <xsl:apply-templates select="." mode="itemstyle"> <xsl:with-param name="EditMode" select="$cbq_iseditmode" /> </xsl:apply-templates> </xsl:when> <xsl:when test="@Style='NewsBigItem'"> <xsl:apply-templates select="." mode="itemstyle"> <xsl:with-param name="CurPos" select="$CurPosition" /> </xsl:apply-templates> </xsl:when> <xsl:when test="@Style='NewsCategoryItem'"> <xsl:apply-templates select="." mode="itemstyle"> <xsl:with-param name="CurPos" select="$CurPosition" /> </xsl:apply-templates> </xsl:when> <xsl:otherwise> <xsl:apply-templates select="." mode="itemstyle"> </xsl:apply-templates> </xsl:otherwise> </xsl:choose> <xsl:value-of disable-output-escaping="yes" select="$EndListItem" /> </xsl:template> <xsl:template name="OuterTemplate.CallFooterTemplate"> <xsl:value-of disable-output-escaping="yes" select="$EndList" /> <xsl:value-of disable-output-escaping="yes" select="$EndListItem" /> </xsl:template> <xsl:template name="OuterTemplate.GetSafeLink"> <xsl:param name="UrlColumnName"/> <xsl:if test="$UseCopyUtil = 'True'"> <xsl:value-of select="concat($RootSiteRef,'/_layouts/CopyUtil.aspx?Use=id&Action=dispform&ItemId=',@ID,'&ListId=',@ListId,'&WebId=',@WebId,'&SiteId=',$SiteId,'&Source=',$Source)"/> </xsl:if> <xsl:if test="$UseCopyUtil != 'True'"> <xsl:call-template name="OuterTemplate.GetSafeStaticUrl"> <xsl:with-param name="UrlColumnName" select="$UrlColumnName"/> </xsl:call-template> </xsl:if> </xsl:template> <xsl:template name="OuterTemplate.GetTitle"> <xsl:param name="Title"/> <xsl:param name="UrlColumnName"/> <xsl:param name="UseFileName" select="0"/> <xsl:choose> <xsl:when test="string-length($Title) != 0 and $UseFileName = 0"> <xsl:value-of select="$Title" /> </xsl:when> <xsl:when test="$UseCopyUtil = 'True' and $UseFileName = 0"> <xsl:value-of select="$BlankTitle" /> </xsl:when> <xsl:otherwise> <xsl:variable name="FileNameWithExtension"> <xsl:call-template name="OuterTemplate.GetPageNameFromUrl"> <xsl:with-param name="UrlColumnName" select="$UrlColumnName" /> </xsl:call-template> </xsl:variable> <xsl:choose> <xsl:when test="$UseFileName = 1"> <xsl:call-template name="OuterTemplate.GetFileNameWithoutExtension"> <xsl:with-param name="input" select="$FileNameWithExtension" /> </xsl:call-template> </xsl:when> <xsl:otherwise> <xsl:value-of select="$FileNameWithExtension" /> </xsl:otherwise> </xsl:choose> </xsl:otherwise> </xsl:choose> </xsl:template> <xsl:template name="OuterTemplate.FormatColumnIntoUrl"> <xsl:param name="UrlColumnName"/> <xsl:variable name="Value" select="@*[name()=$UrlColumnName]"/> <xsl:if test="contains($DataColumnTypes,concat(';',$UrlColumnName,',URL;'))"> <xsl:call-template name="OuterTemplate.FormatValueIntoUrl"> <xsl:with-param name="Value" select="$Value"/> </xsl:call-template> </xsl:if> <xsl:if test="not(contains($DataColumnTypes,concat(';',$UrlColumnName,',URL;')))"> <xsl:value-of select="$Value"/> </xsl:if> </xsl:template> <xsl:template name="OuterTemplate.FormatValueIntoUrl"> <xsl:param name="Value"/> <xsl:if test="not(contains($Value,', '))"> <xsl:value-of select="$Value"/> </xsl:if> <xsl:if test="contains($Value,', ')"> <xsl:call-template name="OuterTemplate.Replace"> <xsl:with-param name="Value" select="substring-before($Value,', ')"/> <xsl:with-param name="Search" select="',,'"/> <xsl:with-param name="Replace" select="','"/> </xsl:call-template> </xsl:if> </xsl:template> <xsl:template name="OuterTemplate.Replace"> <xsl:param name="Value"/> <xsl:param name="Search"/> <xsl:param name="Replace"/> <xsl:if test="contains($Value,$Search)"> <xsl:value-of select="concat(substring-before($Value,$Search),$Replace)"/> <xsl:call-template name="OuterTemplate.Replace"> <xsl:with-param name="Value" select="substring-after($Value,$Search)"/> <xsl:with-param name="Search" select="$Search"/> <xsl:with-param name="Replace" select="$Replace"/> </xsl:call-template> </xsl:if> <xsl:if test="not(contains($Value,$Search))"> <xsl:value-of select="$Value"/> </xsl:if> </xsl:template> <xsl:template name="OuterTemplate.GetSafeStaticUrl"> <xsl:param name="UrlColumnName"/> <xsl:variable name="Url"> <xsl:call-template name="OuterTemplate.FormatColumnIntoUrl"> <xsl:with-param name="UrlColumnName" select="$UrlColumnName"/> </xsl:call-template> </xsl:variable> <xsl:value-of select="cmswrt:EnsureIsAllowedProtocol($Url)"/> </xsl:template> <xsl:template name="OuterTemplate.GetColumnDataForUnescapedOutput"> <xsl:param name="Name"/> <xsl:param name="MustBeOfType"/> <xsl:if test="contains($DataColumnTypes,concat(';',$Name,',',$MustBeOfType,';'))"> <xsl:value-of select="@*[name()=$Name]"/> </xsl:if> </xsl:template> <xsl:template name="OuterTemplate.GetPageNameFromUrl"> <xsl:param name="UrlColumnName"/> <xsl:variable name="Url"> <xsl:call-template name="OuterTemplate.FormatColumnIntoUrl"> <xsl:with-param name="UrlColumnName" select="$UrlColumnName"/> </xsl:call-template> </xsl:variable> <xsl:call-template name="OuterTemplate.GetPageNameFromUrlRecursive"> <xsl:with-param name="Url" select="$Url"/> </xsl:call-template> </xsl:template> <xsl:template name="OuterTemplate.GetPageNameFromUrlRecursive"> <xsl:param name="Url"/> <xsl:choose> <xsl:when test="contains($Url,'/') and substring($Url,string-length($Url)) != '/'"> <xsl:call-template name="OuterTemplate.GetPageNameFromUrlRecursive"> <xsl:with-param name="Url" select="substring-after($Url,'/')"/> </xsl:call-template> </xsl:when> <xsl:otherwise> <xsl:value-of select="$Url"/> </xsl:otherwise> </xsl:choose> </xsl:template> <xsl:template name="OuterTemplate.GetGroupName"> <xsl:param name="GroupName"/> <xsl:param name="GroupType"/> <xsl:choose> <xsl:when test="string-length(normalize-space($GroupName)) = 0"> <xsl:value-of select="$BlankGroup"/> </xsl:when> <xsl:otherwise> <xsl:choose> <xsl:when test="$GroupType='URL'"> <xsl:variable name="Url"> <xsl:call-template name="OuterTemplate.FormatValueIntoUrl"> <xsl:with-param name="Value" select="$GroupName"/> </xsl:call-template> </xsl:variable> <xsl:call-template name="OuterTemplate.GetPageNameFromUrlRecursive"> <xsl:with-param name="Url" select="$Url"/> </xsl:call-template> </xsl:when> <xsl:otherwise> <xsl:value-of select="$GroupName" /> </xsl:otherwise> </xsl:choose> </xsl:otherwise> </xsl:choose> </xsl:template> <xsl:template name="OuterTemplate.CallPresenceStatusIconTemplate"> <xsl:if test="string-length(@SipAddress) != 0"> <span class="presence-status-icon"><img src="/_layouts/images/imnhdr.gif" onload="IMNRC('{@SipAddress}')" ShowOfflinePawn="1" alt="" id="{concat('MWP_pawn_',$ClientId,'_',@ID,'type=sip')}"/></span> </xsl:if> </xsl:template> <xsl:template name="OuterTemplate.GetFileNameWithoutExtension"> <xsl:param name="input"/> <xsl:variable name="extension"> <xsl:value-of select="substring-after($input, '.')"/> </xsl:variable> <xsl:choose> <xsl:when test="contains($extension, '.')"> <xsl:variable name="afterextension"> <xsl:call-template name="OuterTemplate.GetFileNameWithoutExtension"> <xsl:with-param name="input" select="$extension"/> </xsl:call-template> </xsl:variable> <xsl:value-of select="concat(substring-before($input, '.'), $afterextension)"/> </xsl:when> <xsl:otherwise> <xsl:choose> <xsl:when test="contains($input, '.')"> <xsl:value-of select="substring-before($input, '.')"/> </xsl:when> <xsl:otherwise> <xsl:value-of select="$input"/> </xsl:otherwise> </xsl:choose> </xsl:otherwise> </xsl:choose> </xsl:template> </xsl:stylesheet>
Save and publish these files. Let´s return to the file you have exported to your desktop, open it with notepad. There’s three properties in this file you need to change
property name=”ItemXslLink”
property name=”MainXslLink”
property name=”Xsl”
Change this three properties:
<property name="ItemXslLink" type="string">/Style Library/XSL Style Sheets/ItemStyleImageCycle.xsl</property> <property name="MainXslLink" type="string">/Style Library/XSL Style Sheets/ContentQueryMainImageCycle.xsl</property> <property name="Xsl" type="string"><xsl:stylesheet xmlns:x="http://www.w3.org/2001/XMLSchema" version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:cmswrt="http://schemas.microsoft.com/WebPart/v3/Publishing/runtime" exclude-result-prefixes="xsl cmswrt x" > <xsl:import href="/Style Library/XSL Style Sheets/Header.xsl" /> <xsl:import href="/Style Library/XSL Style Sheets/ItemStyleImageCycle.xsl" /> <xsl:import href="/Style Library/XSL Style Sheets/ContentQueryMainImageCycle.xsl" /> </xsl:stylesheet></property>
Save the file, close it and go to a page in your SharePoint environment. Now, add and upload this file as a web part from your desktop, it will be displayed as Content Query in the imported Web Part folder. Once you got it on the place, check in the page or stop editing.
There are a couple of steps here, so please drop a comment if you got any questions or get stuck. By the way, it’s not only images that can be cycled, in this way you can achieve this for any kind of list objects.
/ Christian
This is beautiful! But can you make it so the slideshow actually plays the images themselves, and not just the thumbnails?
It looks like it has a paging solution for the CQWP through ContentQueryMain.xsl.So could we show a group of items instead of one item per page?
The first time I deploed it and it works fine.Second time I deployed it with a different images document library and on another page but I keep getting the client side error:
Webpage error details
Message: ‘style’ is null or not an object
Line: 198
Char: 2
Code: 0
URI: http://MyServer:17968/Style%20Library/Scripts/jquery.cycle.all.js
I think if we could do it without the need to import the webpart file (Default CQWP) it will be easier to deploy.
Hi again
I fixed the error after alot of analysing for the code and uploading the files multiple times.The fix was to specify a fixed width for the webpart.If some one is interested to know why just send another comment and I will answer immediatly.I think this is a great blog and I didn’t see any comments here…
I’m still interested to know how could we use the same idea to slove paging problem (multiple items each time).Hope success for all of us…
Thanks for the post! I used jQuery Cycle as well, but my solution was a bit different. Check it out! http://www.bentedder.com/jquery-slideshow-sharepoint-2010/
Well.I sent those comments long time ago.I don’t remember now why the width fixed the error.But from reading the code again I expect it has something to do with line 105 ($cbq_columnwidth) or the image width variable since it requires a value.Again I don’t remember exactly why and that why I think I deserve the dislike I have on all my comments.But I still hope the width fix I mentioned help someone.
Happy also to see Ben comment and hope success to all of us.
I hope that I find a post about add paging to CQWP from scratch instead of just using Imtech webpart.
hi,
thank you for this interesting series , i want to ask , how can i do the same thing but with site pages library instead of picture library , so when click on news title transfer to that page , thanks again
Hi there, brilliant post. I have a similar requirement I hope this solution can be applied to it. My Intranet is SP 2010 MSO environment. I do not want to use the OOTB Slide Show webpart, I want to create mine as I don’t like the way it handles images. I would like to adapt this solution to creating a custom slide show webpart. the main requirement is to Display a series of images held in a picture library or asset library. And allow user to specify:
• Whether image is shown at native size or reduced to specified width
• Size of web part so there does not have to be a lot of space around the image
• Background colour of web part
• Type of transition
• Length of display for each item
• Whether additional text e.g. title & description is shown and if so where
• Ability to select images from library based on metadata or view
What I want is for these properties to be controlled in the properties of the webpart by the person responsible for setting up the web part on that particular page. So when the webpart is added to the page the user can set these properties in the browser. Is this possible using the CQWP you have written for. i am not sure of the implications of adding plug ins to an online implementation of Sp2010. thanks in advance for your help.
Genius!
Hi This is an awesome post. Not sure if you will see this or not. but i had a question in how i can include the description field on this template. ive been trying to figure out where to add it but it seems like i keep running into issues with it. if you can help that would be aweseom
Great Post!
a small one: I’m geting the following message “The web part references an untrusted XSL file. Only XSL files contained in this site’s Style Library may be referenced.”
any suggestions?
Great, thanks dudi. Not that easy for me to know right away without seeing the code, but it sounds like a permission issue. Can you check if you got a path that’s not correct, not matching your site collection? Make sure you using relative URLs to the files, and that the files are published. You can also try to move the files to a Document library where you are sure everyone got access to. Good luck!