lundi 4 février 2008

Personnaliser la recherche WSS 3.0 et MOSS 2007

Le système de recherche des Windows SharePoint Services peut-être personnalisé pour correspondre à la charte graphique du site. Si cela est plutôt facile lorsque l'on utilise MOSS (comme nous le verrons plus loin), cela demande un peu plus de gymnastique sous WSS...

SOUS WSS

Création du controle

Tout d'abord nous devons créer un contrôle ascx (appelons le 'MySearchArea.ascx') qui prendra la place du 'SearchArea.ascx' situé dans C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\CONTROLTEMPLATES

Copiez le contenu de 'SearchArea.ascx' dans votre contrôle et modifiez les lignes suivantes :
<SELECT id='idSearchScope' name='MySearchScope' class='ms-searchbox' title=<%SPHttpUtility.AddQuote(SPHttpUtility.HtmlEncode(SearchScopeToolTip),Response.Output);%>>

<INPUT Type=TEXT id='idSearchString' size=25 name='MySearchString' display='inline' maxlength=255 ACCESSKEY=S class='ms-searchbox' onKeyDown="return MySearchKeyDown(event, <%=strEncodedUrl%>);" title=<%SPHttpUtility.AddQuote(SPHttpUtility.HtmlEncode(SearchTextToolTip),Response.Output);%>>
</td>
<td>
<div class="ms-searchimage"><a target='_self' href='javascript:' onClick="javascript:MySubmitSearchRedirect(<%=strEncodedUrl%>);javascript:return false;" title=<%SPHttpUtility.AddQuote(SPHttpUtility.HtmlEncode(SearchImageToolTip),Response.Output);%> ID=onetIDGoSearch><img border='0' src="/images/mon_image.gif" alt=<%SPHttpUtility.AddQuote(SPHttpUtility.HtmlEncode(SearchImageToolTip),Response.Output);%>></a></div>
Laissez le dans le même répertoire que son grand frère ;)



Edition de Core.js

Ensuite éditez le fichier C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\LAYOUTS\1033\Core.js

Insérer deux nouvelles fonctions Javascript avec le code suivant :
function MySubmitSearchRedirect(strUrl)
{
var frm=document.forms["frmSiteSearch"];
frm=document.forms[MSOWebPartPageFormName];
var searchText=frm.elements["MySearchString"].value;
var searchScope=frm.elements["MySearchScope"].value;
strUrl=strUrl+"?k="+escapeProperly(searchText)+"&u="+escapeProperly(searchScope);
window.location = strUrl;
}

function MySearchKeyDown(event, strUrl)
{
if (IsKeyDownSubmit(event))
{
MySubmitSearchRedirect(strUrl);
return false;
}
return true;
}


Editer la MasterPage

Editez votre masterpage et ajouter votre nouveau contrôle :
<%@ Register tagprefix="uc1" tagname="customsearch" src="~/_controltemplates/MySearchArea.ascx" >

Répérez le div 'SearchArea' et remplacez le par le code suivant (n'oubliez de mettre à false la propriété Visible du contrôle SharePoint) :
<div id="SearchArea"><uc1:customsearch id="customsearch1" runat="server"/><asp:ContentPlaceHolder id="PlaceHolderSearchArea" runat="server" Visible="false" ><SharePoint:DelegateControl runat="server" ControlId="SmallSearchInputBox"/></asp:ContentPlaceHolder></div>


Page de résultat

Créez une nouvelle page 'searchresults.aspx' dans une bibliothèque de documents de votre site qui hérite de votre charte graphique (masterpage) et faite un copier coller du code de la page SharePoint pour son contenu C:\Program Files\Fichiers communs\Microsoft Shared\web server extensions\12\TEMPLATE\LAYOUTS\searchresults.aspx



Web.config

Enfin, modifiez le 'Web.config' de votre application web :

Section PageParserPaths
<PageParserPath VirtualPath="/Pages/searchresults.aspx" CompilationMode="Always" AllowServerSideScript="true" />
Section SafeControls
<SafeControl Assembly="Microsoft.SharePoint.ApplicationPages, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" Namespace="Microsoft.SharePoint.ApplicationPages" TypeName="*" Safe="True" AllowRemoteDesigner="True" />

Faites un IISRESET... c'est prêt! :)

Un grand merci à cet article pour m'avoir mâché le boulot http://www.cnblogs.com/sky-tcff/archive/2007/10/22/930818.html



Sous MOSS


Pour ce qui est de MOSS, il suffit d'éditer les fichiers 'SearchArea.xml' présents dans les répertoires
C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\FEATURES\OSearchBasicFeature
et
C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\FEATURES\OSearchEnhancedFeature

pour modifier l'image par exemple cela donne :

<?xml version="1.0" encoding="utf-8"?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
<Control Id="SmallSearchInputBox" Sequence="50" ControlClass="Microsoft.SharePoint.Portal.WebControls.SearchBoxEx" ControlAssembly="Microsoft.SharePoint.Portal, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c">
<Property Name="GoImageUrl">/images/mon_image.gif</Property>
<Property Name="GoImageUrlRTL">/_layouts/images/goRTL.gif</Property>
<Property Name="GoImageActiveUrl">/images/mon_image.gif</Property>
<Property Name="GoImageActiveUrlRTL">/_layouts/images/goRTL.gif</Property>
<Property Name="DropDownMode">ShowDD</Property>
<Property Name="SearchResultPageURL">/_layouts/osssearchresults.aspx</Property>
<Property Name="ScopeDisplayGroupName"></Property>
<Property Name="FrameType">None</Property>
</Control>
</Elements>


Pour plus d'infos :
http://clintcherry.spaces.live.com/blog/cns!AEC0DCBC460E45B9!421.entry
http://msdn2.microsoft.com/en-us/library/microsoft.sharepoint.portal.webcontrols.searchboxex_members.aspx



Voili, voilou... bon courage :)

Aucun commentaire: