【问题标题】:SharePoint Redirect site logo link to the root site collection home pageSharePoint 将网站徽标链接重定向到根网站集主页
【发布时间】:2012-11-14 23:37:09
【问题描述】:

我希望母版页中的网站徽标链接始终重定向到根网站集主页。默认行为是重定向到当前网页(spweb)的主页。

回到 SharePoint 2010,我可以通过将 NavigateUrl 属性添加到母版页中的 SPLinkBut​​ton 控件来完成此操作,其值为 ~sitecollection,如下所示:

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

但是,在 SharePoint 2013 中,网站徽标链接的控件已在母版页中更改为 SPSimpleSiteLink。我已经尝试以相同的方式为此控件设置 NavigateUrl 属性,但它似乎不再起作用了。

<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>

作为一种解决方法,我现在删除了 AjaxDelta 包装控件,并将 SPSimpleSiteLink 更改为旧的 SPLinkBut​​ton,并添加了 NavigateUrl 属性。这似乎有效。

有没有更好的方法?

【问题讨论】:

    标签: sharepoint sharepoint-2013


    【解决方案1】:

    关于 MSDN SharePoint:SPSimpleSiteLink 是一个“非常简单的控件,它提供到当前站点的链接此控件与启用 MDS 的母版页中的部件版式控件兼容”

    如果您希望网站徽标链接始终重定向到网站集根网站,请使用 SharePoint:SiteLogoImage(我们在 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>
    

    【讨论】:

      【解决方案2】:

      正如Muawiyah Shannak 提到的,您只需将 SharePoint:SPSimpleSiteLink 替换为 SharePoint:SPLinkBut​​ton 控件即可。

      如果您使用的是 SharePoint Design-Manager 片段工具,您必须编辑以下两行(开始和结束标记)

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

      到这里

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

      最好使用动态控件,然后将其设置为永久链接,这样您就可以在其他站点集合上重复使用您的模板,而无需更改静态根链接。

      【讨论】:

        【解决方案3】:

        如果您需要永久链接,为什么要使用一些 SharePoint/ASP.NET 控件 - 只需在母版页中设置此链接 :))) 认为这是最简单的方式,适用于任何版本的 SharePoint。

        【讨论】:

          【解决方案4】:

          我也是一样,NavigateUrl 不起作用。因此,即使您尝试使用 JQuery 更改 href 属性,稍后的一些脚本也会使用当前站点 url 覆盖 href。 唯一的方法是更改​​“a”元素的 id 以防止覆盖。 ID 更改会导致 Sharepoint javascript 错误,因此您必须创建一个虚拟隐藏元素,该元素与徽标 a 元素的旧 ID 相同。所有这些工作都使用 'seattle' 母版页。

          所以在 $(document).ready 中执行如下操作:

          //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);
          

          【讨论】:

            【解决方案5】:

            在 NavigateUrl 中使用 ../。这将到达父站点。

            【讨论】:

              【解决方案6】:

              如果您需要动态链接,您可以在母版页中使用 UserControl。例如,如果您希望始终指向根地址,但该根地址在多个环境中是不同的,您可以在用户控件中执行以下操作:

              <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>
              

              在你的代码隐藏中:

              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;
                  }
              }
              

              【讨论】:

                【解决方案7】:

                对于网站集重定向选项,将属性NavigateUrl 添加到此标记并将其值设置为“~sitecollection” 对于站点当前站点重定向选项,将属性NavigateUrl 添加到此标记并将其值设置为"~site"

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

                Click Here See More Details

                【讨论】:

                  【解决方案8】:

                  这是我能找到的最简单的 sln,用于链接到主页的简单徽标

                  <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>
                  

                  附: 是的,尝试在 &lt;asp:Literal 之外执行 &lt;%$SPUrl:~sitecollection... 会引发异常。

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 2021-11-20
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2015-10-19
                    • 2014-11-23
                    相关资源
                    最近更新 更多