Sharepoint Search Управление делегатом - PullRequest
1 голос
/ 15 января 2010

Я следил за этим http://msdn.microsoft.com/en-us/library/ms470880.aspx, чтобы создать делегированный элемент управления для переопределения поиска по умолчанию, используемого в Sharepoint. Я пытаюсь сделать так, чтобы поиск использовал пользовательскую область поиска под названием люди. Кажется, я не могу этого сделать. Может ли кто-нибудь дать мне несколько советов?

Функция xml

<?xml version="1.0" encoding="utf-8"?>
<Feature 
  Id="9E16894A-998F-4928-97B3-FCB35EAD1C49"
  Title="Standard User Interface Items"
  Description="Provides several standard user interface components and links"
  Version="12.0.0.0"
  Hidden="TRUE"
  DefaultResourceFile="core"
  Scope="Web"
  xmlns="http://schemas.microsoft.com/sharepoint/">
  <ElementManifests>
    <ElementManifest Location="controls\SearchArea.xml" />
  </ElementManifests>
</Feature>

SearchArea.xml Введите текст здесь Идти!

mySearchArea.ascx

<%@ Control Language="C#" Inherits="Microsoft.SharePoint.WebControls.SearchArea,Microsoft.SharePoint,Version=12.0.0.0,Culture=neutral,PublicKeyToken=71e9bce111e9429c"    compilationMode="Always" %>
<%@ Register Tagprefix="wssawc" Namespace="Microsoft.SharePoint.WebControls" Assembly="Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %> <%@ Register Tagprefix="SharePoint" Namespace="Microsoft.SharePoint.WebControls" Assembly="Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Register Tagprefix="SharePoint" Namespace="Microsoft.SharePoint.WebControls" Assembly="Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %> <%@ Register Tagprefix="Utilities" Namespace="Microsoft.SharePoint.Utilities" Assembly="Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %> <%@ Import Namespace="Microsoft.SharePoint" %>
<%
    string strScopeWeb = null;
    string strScopeList = null;
    string strWebSelected = null;
    SPWeb web = SPControl.GetContextWeb(Context);
    string strEncodedUrl
        = SPHttpUtility.EcmaScriptStringLiteralEncode(
            SPHttpUtility.UrlPathEncode(web.Url + "/_layouts/searchresults.aspx", false, false)
            );
    strEncodedUrl = "'" + strEncodedUrl + "'";
    strScopeWeb = "'" + SPHttpUtility.HtmlEncode( web.Url ) + "'";
    SPList list = SPContext.Current.List;
    if ( list != null &&
             ((list.BaseTemplate != SPListTemplateType.DocumentLibrary && list.BaseTemplate != SPListTemplateType.WebPageLibrary) ||
              (SPContext.Current.ListItem == null) ||
              (SPContext.Current.ListItem.ParentList == null) ||
              (SPContext.Current.ListItem.ParentList != list))
       )
    {
        strScopeList = list.ID.ToString();
    }
    else
    {
        strWebSelected = "SELECTED";
    }
%>
<table border=0 cellpadding="0" cellspacing="0" class='ms-searchform'><tr>
<td>
<SELECT id='idSearchScope' name='SearchScope' class='ms-searchbox' title=<%SPHttpUtility.AddQuote(SPHttpUtility.HtmlEncode(SearchScopeToolTip),Response.Output);%>>
<OPTION value=<%=strScopeWeb%> <%=strWebSelected%>> <SharePoint:EncodedLiteral runat="server" text="<%$Resources:wss,search_Scope_Site%>" EncodeMethod='HtmlEncode' Id='idSearchScopeSite'/> </OPTION>
<%
if (strScopeList != null)
{
%>
    <OPTION value=<%=strScopeList%> SELECTED> <SharePoint:EncodedLiteral runat="server" text="<%$Resources:wss,search_Scope_List%>" EncodeMethod='HtmlEncode' Id='idSearchScopeList'/> </OPTION>
<%
}
%>
</SELECT>
</td>
<td>
<INPUT Type=TEXT id='idSearchString' size=25 name='SearchString' display='inline' maxlength=255 ACCESSKEY=S class='ms-searchbox' onKeyDown="return SearchKeyDown(event, <%=strEncodedUrl%>);" title=<%SPHttpUtility.AddQuote(SPHttpUtility.HtmlEncode(SearchTextToolTip),Response.Output);%>>
</td>
<td>
<div class="ms-searchimage"><a target='_self' href='javascript:' onClick="javascript:SubmitSearchRedirect(<%=strEncodedUrl%>);javascript:return false;" title=<%SPHttpUtility.AddQuote(SPHttpUtility.HtmlEncode(SearchImageToolTip),Response.Output);%> ID=onetIDGoSearch><img border='0' src="/_layouts/images/gosearch.gif" alt=<%SPHttpUtility.AddQuote(SPHttpUtility.HtmlEncode(SearchImageToolTip),Response.Output);%>></a></div>
</td>
</tr></table>

1 Ответ

1 голос
/ 15 января 2010

Чтобы изменить область поиска по умолчанию, вам не нужно создавать делегированный элемент управления. Это можно сделать, выбрав Действия сайта> Настройки сайта> Администрирование семейства сайтов | Найдите области действия и нажмите ссылку " Показать группу: выпадающий поиск " (обратите внимание, что вступление в силу может занять несколько минут).

Если вы хотите переопределить другие свойства в элементе управления по умолчанию, вы можете использовать элемент управления делегата, аналогичный приведенному ниже в вашей функции:

<?xml version="1.0" encoding="utf-8" ?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
  <Control
      Id="SmallSearchInputBox"
      Sequence="25"
      ControlClass="Microsoft.SharePoint.Portal.WebControls.SearchBoxEx" 
      ControlAssembly="Microsoft.SharePoint.Portal, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c">
    <Property Name="GoImageUrl">/_layouts/1033/images/myapp/go-btn.gif</Property>
    <Property Name="GoImageUrlRTL">/_layouts/1033/images/myapp/go-btn.gif</Property>
    <Property Name="GoImageActiveUrl">/_layouts/1033/images/myapp/go-btn-hover.gif</Property>
    <Property Name="GoImageActiveUrlRTL">/_layouts/1033/images/myapp/go-btn-hover.gif</Property>
    <Property Name="QueryPromptString">Enter search query here</Property>
    <Property Name="UseSiteDefaults">true</Property>
    <Property Name="FrameType">None</Property>
    <Property Name="ShowAdvancedSearch">false</Property>
    <Property Name="DropDownMode">HideScopeDD</Property>
    <Property Name="TextBoxWidth">200</Property>
    <Property Name="CssClass">headersearch</Property>
  </Control>
</Elements>

См. Члены SearchBoxEx на MSDN для получения дополнительной информации о доступных свойствах.

Если это не дает того, что вам нужно, вы можете поместить пользовательский элемент управления в каталог% Program Files% \ Common Files \ Microsoft Shared \ Web Server Extensions \ 12 \ TEMPLATE \ CONTROLTEMPLATES и загрузить его, используя функцию, аналогичную следующей: ниже:

<Elements xmlns="http://schemas.microsoft.com/sharepoint/">        
<Control Id="SmallSearchInputBox"
    Sequence="25"
    ControlSrc="~/_ControlTemplates/MySearchControl.ascx"/>    
</Elements>

Обратите внимание, что вы также должны убедиться, что на вашей главной странице есть соответствующий тег управления делегатом:

<SharePoint:DelegateControl runat="server" ControlId="SmallSearchInputBox"/>
...