zoukankan      html  css  js  c++  java
  • MSDN Visual系列:MOSS企业级搜索之一——在搜索中心里创建自定义搜索页面和标签选项卡

    原文:http://msdn2.microsoft.com/en-us/library/bb428855.aspx

    搜索中心是MOSS默认带的一种新型的站点模版。如果我们创建协作门户站点,也会默认带了一个搜索中心。该类型站点的目的就是替代一般门户中使用的页面顶部的搜索框,为用户提供更加可定制化的搜索体验。搜索中心现在有两个版本:简洁型搜索中心和带标签的搜索中心。简洁型搜索中心通常被添加在一个发布功能没有被启用的网站集中。比如一个只有小组协作站点的网站集。带标签的搜索中心通过基于标签(Tabs)的用户界面可以提供完整的定制化支持。但是它要求发布功能必须启用。在协作门户中这是默认的。本文包括两种定制,都是针对带标签的搜索中心而言的。一个是如何添加自定义的搜索页面和标签;另一个是如何替换现有的搜索结果用的XSLT,变成我们的自定义XSLT。

    搜索结果页面上有许多WebPart,都是用于搜索结果显示的。其中一个名为搜索核心结果(Search Core Results)的WebPart,该WebPart有很多的属性,用来配置和定制该WebPart。其中最重要的一项,就是我们想要定制的XSLT了。该属性用来将搜索引擎返回的XML搜索结果转换成HTML的形式,并在WebPart的内容区域中展现出来。我们可以用我们自己的XSLT来替换掉它。

    用于显示原始XML形式的搜索结果的XSLT

    用下面的xslt可以使搜索核心结果WebPart显示搜索结果中包含的原始形态的XML,没有应用任何转换。

    <xsl:stylesheet version="1.0"
      xmlns:xsl
    ="http://www.w3.org/1999/XSL/Transform">
     
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
     
    <xsl:template match="/">
      
    <xmp><xsl:copy-of select="*"/></xmp>
     
    </xsl:template>
    </xsl:stylesheet>

    一个自定义搜索结果xslt的示例

    使用SharePoint Designer,我们可以利用刚刚输出的原始形态的xml来创建一个自定义的xslt。利用SharePoint Designer强大而丰富的xslt设计体验,我们可以为数据视图WebPart生成xslt。用这个生成的xslt就可以替换默认的搜索核心结果WebPart中的xslt。

    <xsl:stylesheet version="1.0" exclude-result-prefixes="xsl msxsl ddwrt" xmlns:ddwrt="
      http://schemas.microsoft.com/WebParts/v2/DataView/runtime"
     xmlns:asp=
      "http://schemas.microsoft.com/ASPNET/20"
     xmlns:__designer=
      "http://schemas.microsoft.com/WebParts/v2/DataView/designer"
     xmlns:xsl=
      "http://www.w3.org/1999/XSL/Transform"
     xmlns:msxsl="urn:schemas-microsoft-com:xslt" 
      xmlns:SharePoint
    ="Microsoft.SharePoint.WebControls" xmlns:ddwrt2=
      "urn:frontpage:internal"
    >
     
    <xsl:output method="html" indent="no"/>
     
    <xsl:decimal-format NaN=""/>
     
    <xsl:param name="FileName" />
     
    <xsl:param name="dvt_apos">'</xsl:param>
     
    <xsl:variable name="dvt_1_automode">0</xsl:variable>   
     
    <xsl:template match="/"
      xmlns:asp
    ="http://schemas.microsoft.com/ASPNET/20" xmlns:__designer=
      "http://schemas.microsoft.com/WebParts/v2/DataView/designer"
     xmlns:SharePoint=
      "Microsoft.SharePoint.WebControls"
    >
      
    <xsl:call-template name="dvt_1"/></xsl:template>
      
    <xsl:variable name="dvt_2_automode">0</xsl:variable> 
      
    <xsl:variable name="dvt_5_automode">0</xsl:variable>
      
    <xsl:template name="dvt_1">
      
    <xsl:variable name="dvt_StyleName">2ColFrm</xsl:variable>
      
    <xsl:variable name="Rows" select="/All_Results/Result" />
      
    <table border="1" width="100%">
       
    <tr>
        
    <xsl:call-template name="dvt_1.body">
          
    <xsl:with-param name="Rows" select="$Rows" />
        
    </xsl:call-template>
       
    </tr>
      
    </table>
     
    </xsl:template>
     
    <xsl:template name="dvt_1.body">
      
    <xsl:param name="Rows" />
      
    <xsl:for-each select="$Rows">
        
    <xsl:sort select="author" order="ascending" />
        
    <xsl:call-template name="dvt_1.rowview" />
      
    </xsl:for-each>
     
    </xsl:template>
     
    <xsl:template name="dvt_1.rowview">
       
    <td valign="top" width="50%">
         
    <table border="0" cellspacing="0" width="100%">
          
    <tr>
           
    <td width="25%" valign="top" class="ms-vb"><b>title:</b></td>
           
    <td width="75%" class="ms-vb">
             
    <href="{url}"><xsl:value-of select="title" /></a>
           
    </td>
          
    </tr>
          
    <tr>
           
    <td width="25%" class="ms-vb"><b>author:</b></td>
           
    <td width="75%" class="ms-vb"><xsl:value-of select="author" />
           
    </td>
          
    </tr>
          
    <tr>
           
    <td width="25%" class="ms-vb"><b>write:</b></td>
           
    <td width="75%" class="ms-vb">
            
    <xsl:value-of
                  
    select="ddwrt:FormatDate(string(write) ,1033 ,3) />
           </td>
          </tr>
          <xsl:if test="
    $dvt_1_automode = '1'" ddwrt:cf_ignore="1">
            
    <tr>
             
    <td colspan="99" class="ms-vb">
                
    <span ddwrt:amkeyfield="" ddwrt:amkeyvalue="string($XPath)"
                  ddwrt:ammode
    ="view" />
             
    </td>
            
    </tr>
          
    </xsl:if>
         
    </table>
       
    </td>
       
    <xsl:if test="position() mod 2 = 0" ddwrt:cf_ignore="1">
        
    <xsl:text disable-output-escaping="yes">&lt;/tr&gt;</xsl:text>
        
    <xsl:if test="position() != last()" ddwrt:cf_ignore="1">
         
    <xsl:text disable-output-escaping="yes">&lt;tr&gt;</xsl:text>
        
    </xsl:if>
       
    </xsl:if>
       
    <xsl:if test="position() = last()" ddwrt:cf_ignore="1">
        
    <xsl:if test="position() mod 2 != 0" ddwrt:cf_ignore="1">
         
    <td>
          
    <xsl:text disable-output-escaping="yes"
           ddwrt:nbsp-preserve
    ="yes">&amp;nbsp;</xsl:text>
         
    </td>
        
    </xsl:if>
       
    </xsl:if>
     
    </xsl:template>
    </xsl:stylesheet>

    下图是应用了该xslt后展示的搜索结果。

    我们通常需要在搜索中心里创建额外的选项卡。一个选项卡与一个基于某个可用的搜索页面布局创建的页面相关联。

    现在,我们创建一个自定义搜索选项卡和一个自定义搜索结果页面。

    1. 点选“搜索”标签,进入搜索中心。
    2. 点“网站操作”,选创建页面。
    3. 输入标题。
    4. 在下面的页面布局中选择搜索页面。
    5. 发布该页面。
    6. 点“网站操作”,选查看所有网站内容。
    7. 点搜索页面中列出的标签,点新建。然后添加新的项目用于展示我们的新标签。
    8. 提供一个名称并将它与我们先前创建的自定义搜索页面关联起来。
    SharePoint可以将搜索结果显示在自定义的搜索结果页面中,而不是使用默认的搜索结果页。

    创建一个自定的搜索结果页面,并与自定义的标签连接起来
    1. 点选“搜索”标签,进入搜索中心。
    2. 点“网站操作”,选创建页面。
    3. 输入标题。
    4. 在下面的页面布局中选择搜索结果页面。
    5. 发布该页面。
    6. 点选我们刚刚创建的自定义标签,选“网站操作”,选编辑网页。
    7. 在搜索框WebPart上,点修改共享Web部件,打开属性面板。
    8. 在杂项类中,找到“目标搜索结果页URL地址”文本框。输入我们自定义的搜索结果页的名称。
    9. 确定并发布该页面。

    当一个搜索查询执行后,结果就会以xml格式传递给搜索核心结果WebPart。搜索核心结果WebPart使用xslt来转换xml成为html,然后显示到WebPart的Body中。

    替换xslt

    1. 进入自定义搜索结果页面。
    2. 点“网站操作”,选编辑网页。
    3. 在搜索核心结果WebPart上,点修改共享Web部件,打开属性面板。
    4. 在数据视图属性下,找到修改xslt的按钮,打开文本编辑器。
    5. 用我们自己的xslt替换该xslt。
    6. 确定并发布该页。

    查看视频

  • 相关阅读:
    动态存储区(堆)、动态存储区(栈)、静态存储区、程序代码区
    auto, extern, register, static
    #include <iomanip>
    use
    ZooKeeper某一QuorumPeerMain挂了
    python 中的 字符串 列表 元祖 字典
    JAVA的23种设计模式
    spark job分析
    Spark1
    SQL三大范式
  • 原文地址:https://www.cnblogs.com/Sunmoonfire/p/777730.html
Copyright © 2011-2022 走看看