Personalizando o texto padrão SmallSearchInputBox
-
09-12-2019 - |
Pergunta
Estou tentando personalizar o texto exibido na caixa de pesquisa do meu site do SharePoint.O padrão é "Pesquisar neste site...".
Encontrei vários artigos que explicam como fazer isso (substituindo o controle delegado por um número de sequência inferior) e funciona bem.
Meu XML fica assim:
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
<Control
Id="SmallSearchInputBox"
Sequence="10"
ControlClass="Microsoft.SharePoint.Portal.WebControls.SearchBoxEx" ControlAssembly="Microsoft.Office.Server.Search, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c">
<Property Name="GoImageUrl">/_layouts/images/gosearch15.png</Property>
<Property Name="GoImageUrlRTL">/_layouts/images/gosearchrtl15.png</Property>
<Property Name="GoImageActiveUrl">/_layouts/images/gosearchhover15.png</Property>
<Property Name="GoImageActiveUrlRTL">/_layouts/images/gosearchrtlhover15.png</Property>
<Property Name="DropDownMode">ShowDD</Property>
<Property Name="SearchResultPageURL">/_layouts/osssearchresults.aspx</Property>
<Property Name="ScopeDisplayGroupName"></Property>
<Property Name="FrameType">None</Property>
<Property Name="QueryPromptString">DO A SEARCH!</Property>
</Control>
</Elements>
Isso funciona bem, a caixa de pesquisa exibe "faça uma pesquisa!" como esperado.No entanto, quero que essa string seja localizada.Quando eu faço
<Property Name="QueryPromptString">$Resources:MyResourceFile,CustomText;</Property>
A caixa de pesquisa exibe $Resources:MyResourceFile,CustomeText;literalmente em vez de avaliá-lo.
Como coloco strings localizadas lá?
Obrigado!
Solução
A linha <Property Name="QueryPromptString">$Resources:MyResourceFile,ResourceKey</Property>
funciona bem para mim.Eu acho que você deveria verificar seu arquivo de recursos.Este arquivo deve conter ResourceKey que você tenta usar nesta propriedade.
Se você usar o arquivo de recursos e a chave corretos, o controle de pesquisa exibirá o texto dependendo do idioma do site.Se desejar alterar este texto dinamicamente como você vê na imagem abaixo, você deve seguir alguns passos mais complexos.
passos:
- Crie sua classe personalizada e herde-a de SearchBoxEx
- Crie uma nova propriedade QueryPromptString
- Definir controle seguro
- Criar controle delegado
código para etapas:
public class SearchBox : SearchBoxEx
{
[Browsable(false)]
public new string QueryPromptString
{
get
{
return base.QueryPromptString;
}
set
{
string fullKey = string.Format("$Resources:{0}", value);
base.QueryPromptString = SPUtility.GetLocalizedString(fullKey, null, (uint)Thread.CurrentThread.CurrentUICulture.LCID);
}
}
}
<Control Id="SmallSearchInputBox"
Sequence="10"
ControlClass="LocalizedSearch.SearchBox"
ControlAssembly="LocalizedSearch, Version=1.0.0.0, Culture=neutral, PublicKeyToken=71df3f77c17b7c69">
<Property Name="GoImageUrl">/_layouts/images/gosearch15.png</Property>
<Property Name="GoImageUrlRTL">/_layouts/images/gosearchrtl15.png</Property>
<Property Name="GoImageActiveUrl">/_layouts/images/gosearchhover15.png</Property>
<Property Name="GoImageActiveUrlRTL">/_layouts/images/gosearchrtlhover15.png</Property>
<Property Name="DropDownMode">ShowDD</Property>
<Property Name="SearchResultPageURL">/_layouts/osssearchresults.aspx</Property>
<Property Name="ScopeDisplayGroupName"></Property>
<Property Name="FrameType">None</Property>
<Property Name="QueryPromptString">filename,key</Property>
</Control>