0

让我详细解释一下页面方向。

Used
|_ Forklift
|_ Boomlift
|_ Specs

每次您想查看叉车列表时,您都会转到“/Used/Forklift”。你可以看到所有的叉车。可能有多个相同型号、相同容量的叉车使用。因此,当用户点击特定物品/叉车时,他们会被重定向到公共页面“Used/Specs/”;此外,我们发送 2 个附加参数(网址中的粗体)。所以网址看起来像这样;

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

现在,我们在“规格”页面上有一个小部件;使用这两个参数小部件控制器调用 API 来获取叉车详细信息;在 Sitefinity 方面,我们没有任何模型(模块中没有任何内容),全部由脚本完成以填充叉车详细信息。这不是问题,一切正常。

我将页面设置为不显示规范网址,但它没有显示;也很好。但是如何从服务器端在头部添加自定义链接?类似于以下内容;

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

我有这样的东西;

我已经尝试了很多东西,但没有任何效果。谢谢您的帮助。我的 Sitefinity 版本是 10.2.6631。

4

2 回答 2

1

您可以查看这篇博文,其中展示了如何在 Sitefinity 中删除(如果存在)和添加规范链接。您可以对其进行一些修改以适应您的需要。

于 2018-12-05T03:40:40.837 回答
0

感谢@Veselin Vasilev 向我指出解决方案。根据他的博客,这里是我所做的全部更改。

在 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);                        
                }
            }
        }
    }
于 2018-12-05T20:26:39.500 回答