web-dev-qa-db-fra.com

Lien de logo de site de redirection SharePoint vers la page d'accueil de la collection de sites racine

Je souhaite que le lien du logo de site dans la page maître soit toujours redirigé vers la page d'accueil de la collection de sites racine. Le comportement par défaut consiste à rediriger vers la page d'accueil du site Web actuel (spweb).

De retour dans SharePoint 2010, je pouvais y parvenir en ajoutant l'attribut NavigateUrl au contrôle SPLinkButton dans la page maître avec la valeur ~ sitecollection suivante:

<SharePoint:SPLinkButton runat="server" NavigateUrl="~sitecollection/" id="onetidProjectPropertyTitleGraphic">
<SharePoint:SiteLogoImage name="onetidHeadbnnr0" id="onetidHeadbnnr2" LogoImageUrl="/_layouts/images/siteIcon.png" runat="server"/>
</SharePoint:SPLinkButton>

Toutefois, dans SharePoint 2013, le contrôle du lien du logo du site a été modifié dans la page maître en SPSimpleSiteLink. J'ai essayé de définir la propriété NavigateUrl pour ce contrôle de la même manière, mais cela ne semble plus fonctionner.

<div id="siteIcon" class="ms-tableCell ms-verticalAlignTop">
  <SharePoint:AjaxDelta id="DeltaSiteLogo" BlockElement="true" runat="server">
    <SharePoint:SPSimpleSiteLink NavigateUrl="~sitecollection/" CssClass="ms-siteicon-a" runat="server" id="onetidProjectPropertyTitleGraphic" >
      <SharePoint:SiteLogoImage CssClass="ms-siteicon-img" name="onetidHeadbnnr0" id="onetidHeadbnnr2" LogoImageUrl="/_layouts/15/images/siteIcon.png?rev=23" runat="server"/>
    </SharePoint:SPSimpleSiteLink>
  </SharePoint:AjaxDelta>
</div>

Pour résoudre ce problème, j'ai maintenant supprimé le contrôle wrapper AjaxDelta et remplacé le SPSimpleSiteLink par l'ancien SPLinkButton avec l'attribut ajouté NavigateUrl. Cela semble fonctionner.

Y a-t-il de meilleurs moyens?

18
gurkan

Concernant MSDN SharePoint: SPSimpleSiteLink est un "contrôle très simple fournissant un lien vers le site actuel. Ce contrôle est conforme à un contrôle chrome dans une page maître activée par MDS"

si vous souhaitez que le lien du logo du site soit toujours redirigé vers le site racine de la collection de sites, utilisez SharePoint: SiteLogoImage (comme nous l'avions utilisé avec SP 2010).

<SharePoint:AjaxDelta id="DeltaSiteLogo" BlockElement="true" runat="server">
<SharePoint:SPLinkButton runat="server" NavigateUrl="~sitecollection/" id="onetidProjectPropertyTitleGraphic">
                    <SharePoint:SiteLogoImage  name="onetidHeadbnnr0" id="onetidHeadbnnr2" LogoImageUrl="images/logo.png" runat="server">
                                </SharePoint:SiteLogoImage>
              </SharePoint:SPLinkButton>

19
Shannak

En tant que Muawiyah Shannak , vous devez simplement remplacer le SharePoint: SPSimpleSiteLink par le contrôle SharePoint: SPLinkButton.

Si vous utilisez l'outil de fragmentation SharePoint Design-Manager, vous devez modifier les deux lignes suivantes (balises de début et de fin)

<!--MS:<SharePoint:SPSimpleSiteLink runat="server" CssClass="ms-siteicon-a" ID="x7917ecc8c38d4bd69f58e338eab54c8c">-->
[...]
<!--ME:</SharePoint:SPSimpleSiteLink>-->

pour ça

<!--MS:<SharePoint:SPLinkButton runat="server" NavigateUrl="~sitecollection/" CssClass="ms-siteicon-a" ID="x7917ecc8c38d4bd69f58e338eab54c8c">-->
[...]
<!--ME:</SharePoint:SPLinkButton>-->

Il est toujours préférable d'utiliser un contrôle dynamique, puis de le définir en tant que lien permanent. Vous pouvez ainsi réutiliser votre modèle sur d'autres collectes de sites sans modifier le lien racine statique.

6
DaviideSnow

Si vous avez besoin d'un lien dynamique, vous pouvez utiliser un UserControl dans votre page principale. Si vous voulez par exemple toujours pointer sur l'adresse racine, mais que cette adresse est différente dans plusieurs environnements, vous pouvez procéder comme suit dans le contrôle utilisateur:

<asp:HyperLink CssClass="ms-siteicon-a" runat="server" ID="TG_CustomSiteLink" ToolTip="Home">
        <SharePoint:SiteLogoImage CssClass="ms-siteicon-img" name="onetidHeadbnnr0" id="onetidHeadbnnr2" LogoImageUrl="/_layouts/15/images/siteIcon.png?rev=23" runat="server" AlternateText="Home"/>
</asp:HyperLink>

Et dans votre code-behind:

public partial class CustomSiteLogoLink : UserControl
{
    protected void Page_Load(object sender, EventArgs e)
    {
        var uri = HttpContext.Current.Request.Url;
        var url = uri.ToString();
        var rootUrl = url.Replace(HttpUtility.UrlDecode(uri.PathAndQuery), String.Empty);
        this.TG_CustomSiteLink.NavigateUrl = rootUrl;
    }
}
1

La même chose me semble, NavigateUrl ne fonctionne pas. Ainsi, même si vous essayez de modifier la propriété href avec JQuery, certains scripts ultérieurs écrasent le href avec l'url du site actuel . Le seul moyen consiste à modifier l'ID de l'élément 'a' pour éviter tout écrasement. Changement d’identifiant, cause d’une erreur javascript dans Sharepoint. Vous devez donc créer un élément masqué factice avec le même ancien identifiant de l’élément logo a. Tout ce travail utilise "seattle" page maître.

Donc, dans $ (document) .ready faites quelque chose comme:

//read old link id
var oldLogoId = $("#DeltaSiteLogo > a").attr('id');
//change the id
$("#" + oldLogoId).attr('id','CustomSiteLogo');
//create dummy hidden element
$("#DeltaSiteLogo > a").after("<a id='tmpDeltaSiteLogo' href='#' style='display:none'>Dummy</a>");
//set the dummy id with old id value
$("#tmpDeltaSiteLogo").attr("id",oldLogoId );
//alter the link to point to the webroot 
$("#CustomSiteLogo").attr('href', window.location.protocol + "//" + window.location.Host);
1
Vito

Si vous avez besoin d'un lien permanent, pourquoi utiliser des contrôles SharePoint/ASP.NET - définissez ce lien dans la page maître :))).

1
Dmitriy

Pour l'option de redirection de collection de sites, ajoutez l'attribut NavigateUrl à cette balise et définissez-la sur "~ sitecollection" Pour l'option de redirection de site en cours, ajoutez l'attribut NavigateUrl à cette balise et définissez-la sur "~site".

NavigateUrl="~sitecollection/"
NavigateUrl="~site/"

Cliquez ici Voir plus de détails

1
Tamilan

utilisez ../ dans NavigateUrl. Cela ira sur le site parent. 

1
Casey Govero

c'est le sln le plus simple que j'ai pu trouver pour un logo simple qui renvoie à la page d'accueil

<SharePoint:SPLinkButton id="index" ClientIDMode="Static"  CssClass="page-logo" runat="server" NavigateUrl="~sitecollection/">
<img src="<asp:Literal runat='server' Text='<%$SPUrl:~sitecollection/Style Library/images/logo.png%>' />" alt="Logo" />
</SharePoint:SPLinkButton>

P.S . Oui, essayer de faire <%$SPUrl:~sitecollection... en dehors du <asp:Literal a généré une exception.

0
bresleveloper