Sitefinity: Как добавить ссылку в шапку из бэкэнда? - PullRequest
0 голосов
/ 05 декабря 2018

Позвольте мне объяснить больше об ориентации страницы.

Used
|_ Forklift
|_ Boomlift
|_ Specs

Каждый раз, когда вы хотите увидеть список погрузчиков, вы переходите в «/ Б / У / Вилочный погрузчик».Вы можете увидеть все погрузчики.Может быть несколько моделей с одинаковой грузоподъемностью.Поэтому, когда пользователи нажимают на определенный элемент / погрузчик, они перенаправляются на общую страницу «Используемые / Спецификации /»;Кроме того, мы отправляем 2 дополнительных параметра (жирный в URL).Таким образом, URL выглядит так:

http://localhost:60876/used/specs/used-forklifts/2015-hyundai-160d-7a-ls10151

Теперь у нас есть виджет на странице «Спецификации»;с помощью этих двух параметров контроллер виджета вызывает API для получения сведений о грузоподъемнике;на стороне Sitefinity у нас нет никакой модели (ничего в модуле), все сделано скриптами для заполнения деталей погрузчика.Это не проблема, все работает нормально.

Я установил страницу, чтобы не показывать канонический URL, это не показывает это;также хорошоНо как я могу добавить пользовательскую ссылку в голову со стороны сервера?Что-то вроде следующего:

                HtmlLink canonicalLink = new HtmlLink();
                canonicalLink.Attributes.Add("rel", "canonical");
                canonicalLink.Attributes.Add("href", "test");

И у меня есть что-то вроде этого;

Я пробовал так много вещей, ничего не работает.Спасибо за помощь.Моя версия Sitefinity - 10.2.6631.

Ответы [ 2 ]

0 голосов
/ 05 декабря 2018

Спасибо @Веселин Васильев за указание на решение.Согласно его блогу, здесь приведены все изменения, которые я сделал.

В Global.asax

 protected void Application_Start(object sender, EventArgs e)
    {            
        SystemManager.ApplicationStart += SystemManager_ApplicationStart;
    }

Затем скопировал SystemManager_ApplicationStart из блога;

private void SystemManager_ApplicationStart(object sender, EventArgs e)
    {
        EventHub.Subscribe<IPagePreRenderCompleteEvent>(evt => PagePreRenderCompleteEvent(evt));
    }

Наконецизмените бит PagePreRenderCompleteEvent, чтобы изменить канонический URL;

private void PagePreRenderCompleteEvent(IPagePreRenderCompleteEvent evt)
    {
        if (!SystemManager.IsDesignMode)
        {
            var SpecsUrl = "/used/specs";

            if (evt.PageSiteNode.Url.Contains(SpecsUrl))
            {
                try
                {                        
                    var Page = evt.Page;                        

                    var Canonical = (from ctrls in Page.Header.Controls.OfType<HtmlLink>()
                                     where ctrls.Attributes["rel"].Equals("canonical", StringComparison.CurrentCultureIgnoreCase)
                                     select ctrls).FirstOrDefault();

                    if (Canonical != null)
                    {
                        Page.Header.Controls.Remove(Canonical);
                    }

                    Canonical = new HtmlLink();
                    Canonical.Attributes.Add("rel", "canonical");

                    var Href = evt.PageSiteNode.Url.Replace(SpecsUrl, SystemManager.CurrentHttpContext.Request.Url.PathAndQuery);

                    // resolve the url as absolute
                    Href = RouteHelper.ResolveUrl(Href, UrlResolveOptions.Absolute);
                    Canonical.Href = Href;

                    Page.Header.Controls.Add(Canonical);
                }
                catch (Exception e)
                {
                    Log.Write(e);                        
                }
            }
        }
    }
0 голосов
/ 05 декабря 2018

Вы можете проверить в этом блоге , в котором показано, как удалить (если существует) и добавить каноническую ссылку в Sitefinity.Вы можете немного изменить его в соответствии с вашими потребностями.

...