本文将描述如何使用显示模版(Dispaly template)&搜索结果类型(Search Result Type) 来客户化(Customize) SharePoint 2013 搜索结果(Search result)。
显示模版(Dispaly template)是SharePoint 2013的新功能,目的是使用HTML模板来客户化(Customize) SharePoint 2013 搜索结果(Search result),在2007和2010中使用XSLT来客户化搜索结果,需要开发者精通XSLT, 但是问题是 精通XSLT的技术人员并不多,而精通HTML+JavaScript的技术人员很多。基于这个原因微软推出了显示模版(Dispaly template)&搜索结果类型(Search Result Type)。
下面介绍详细步骤 :
1. 参考http://blog.csdn.net/farawayplace613/article/details/8426640 创建content type, 配置search navigation
2. 新建显示模板(Dispaly Template)
a. 打开站点集根站点的站点设置(Site Settings)
b. 点击 Web Designer Galleries分类下的 Master pages
c. 进入文件夹 Display Templates-> Search
d. 下载默认的Item显示模板,并将下载的模板重命名为 Order_Item.html
e. 编辑 Order_Item.html
<title>Item</title> ===> <title>Order Item</title>
<div id="Item"> ===> <div id="Item_Order">
<mso:ManagedPropertyMapping msdt:dt="string">'Title':'Title','Path':'Path','Description':'Description','EditorOWSUSER':'EditorOWSUSER','LastModifiedTime':'LastModifiedTime','CollapsingStatus':'CollapsingStatus','DocId':'DocId','HitHighlightedSummary':'HitHighlightedSummary','HitHighlightedProperties':'HitHighlightedProperties','FileExtension':'FileExtension','ViewsLifeTime':'ViewsLifeTime','ParentLink':'ParentLink','FileType':'FileType','IsContainer':'IsContainer','SecondaryFileExtension':'SecondaryFileExtension','DisplayAuthor':'DisplayAuthor'</mso:ManagedPropertyMapping>
===>
<mso:ManagedPropertyMapping msdt:dt="string">'Title':'Title','Path':'Path','Description':'Description','OrderNoOWSTEXT':'OrderNoOWSTEXT','AmountOWSCURR':'AmountOWSCURR','EditorOWSUSER':'EditorOWSUSER','LastModifiedTime':'LastModifiedTime','CollapsingStatus':'CollapsingStatus','DocId':'DocId','HitHighlightedSummary':'HitHighlightedSummary','HitHighlightedProperties':'HitHighlightedProperties','FileExtension':'FileExtension','ViewsLifeTime':'ViewsLifeTime','ParentLink':'ParentLink','FileType':'FileType','IsContainer':'IsContainer','SecondaryFileExtension':'SecondaryFileExtension','DisplayAuthor':'DisplayAuthor'</mso:ManagedPropertyMapping>
上面这个改动主要是在 mso:ManagedPropertyMapping 中添加了 'OrderNoOWSTEXT':'OrderNoOWSTEXT','AmountOWSCURR':'AmountOWSCURR'
<div id="_#= $htmlEncode(itemId) =#_" name="Item" data-displaytemplate="DefaultItem" class="ms-srch-item" οnmοuseοver="_#= ctx.currentItem_ShowHoverPanelCallback =#_" οnmοuseοut="_#= ctx.currentItem_HideHoverPanelCallback =#_">
_#=ctx.RenderBody(ctx)=#_
<br/>
<div id="_#= $htmlEncode(hoverId) =#_" class="ms-srch-hover-outerContainer"></div>
</div>
更改为
<div id="_#= $htmlEncode(itemId) =#_" name="Item" data-displaytemplate="OrderItem" class="ms-srch-item" οnmοuseοver="_#= ctx.currentItem_ShowHoverPanelCallback =#_" οnmοuseοut="_#= ctx.currentItem_HideHoverPanelCallback =#_">
_#=ctx.RenderBody(ctx)=#_
<br/>
<a href="_#=ctx.CurrentItem.Path=#_" class="ReportText">_#= ctx.CurrentItem.Title =#_</a>
<br/>
"Amount:" _#= ctx.CurrentItem.AmountOWSCURR =#_
<br/>
"Customer:" _#= ctx.CurrentItem.Title =#_
<br/>
"OrderNo:" _#= ctx.CurrentItem.OrderNoOWSTEXT =#_
<br/>
<div id="_#= $htmlEncode(hoverId) =#_" class="ms-srch-hover-outerContainer"></div>
</div>
注意这里HTML代码,大家就可以八仙过海各显神通了。
解释以下_#= ctx.CurrentItem.AmountOWSCURR =#_,这是在Dispaly template 中使用Search Sechema 中的 Managed Property的方法,当创建Site column 时,SharePoint 2013会自动为Site Column创建相应的 Managed Property
要确定这些Managed Property是否生效可以在Search Box 中输入Managed Property:value,如
f. 上传 Order_Item.html至 Display Templates-> Search,Target Control Type(Search)选择 SearchResults
3. 创建搜索结果类型Order Result Type
a. 打开Site settings page(可以是站点集 _layouts/15/manageresulttypes.aspx?level=sitecol 也可以是普通站点/_layouts/15/start.aspx#/_layouts/15/manageresulttypes.aspx?level=site)
b. 点击新建结果类型(Result Type)
c. 输入Name, 选择 OrderResultSource(如何创建Result Source请参考 http://blog.csdn.net/farawayplace613/article/details/8426640), 选择dispaly template并点击 Save
4. 覆盖原 “SharePoint List Item” 结果类型,并将content type 为order的item排除在外
a. 打开站点集 Site settings page( _layouts/15/manageresulttypes.aspx?level=sitecol)
b. 在Site Collection Administration分类下,点击 Search Result Type
c. Copy "SharePoint List Item”
d. 将content type 为非order的item排除在外