Логотип сайта SharePoint Redirect привязан к домашней странице корневого семейства сайтов
Я хочу, чтобы ссылка на логотип сайта на главной странице всегда перенаправлялась на домашнюю страницу семейства корневых сайтов. Поведение по умолчанию - перенаправление на домашнюю страницу текущего веб-сайта (spweb).
В SharePoint 2010 я мог бы это сделать, добавив атрибут NavigateUrl в элемент управления SPLinkButton на главной странице со значением ~ 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 на старый SPLinkButton с добавленным атрибутом NavigateUrl. Кажется, что это работает.
Есть ли лучшие способы?
Ответы
Ответ 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: SPLinkButton.
Если вы используете инструмент SharePoint Design-Manager Snippet Tool, вам необходимо отредактировать следующие две строки (начальный и конечный теги)
<!--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>-->
Лучше использовать динамический элемент управления, а затем устанавливать его как постоянную ссылку, поэтому вы можете повторно использовать свой шаблон для других элементов sitecollections без изменения статической корневой ссылки.
Ответ 3
Если вам нужна постоянная ссылка, почему вы используете некоторые элементы управления SharePoint/ASP.NET, просто установите эту ссылку на главной странице:))) Подумайте об этом проще всего, что будет работать в любой версии SharePoint.
Ответ 4
То же самое со мной, NavigateUrl
не работает. Поэтому даже если вы попытаетесь изменить свойство href
с помощью JQuery позже script, перезапишите href текущим URL-адресом сайта.
Единственный способ - изменить идентификатор элемента 'a', чтобы предотвратить перезапись. Изменение идентификатора вызывает ошибку JavaScript с помощью Sharepoint, поэтому вам нужно создать скрытый скрытый элемент с тем же старым идентификатором элемента a
. Все это работает с использованием главной страницы "Сиэтл".
Итак, в $(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/"
Нажмите здесь Подробнее...
Ответ 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>
P.S.
да, попытка сделать <%$SPUrl:~sitecollection...
вне <asp:Literal
бросила исключение.