2

我正在向我最近从同事那里继承的 Orchard 网站添加一个新页面。该页面的目的是为我们的 Google Chrome 扩展程序提供内联安装。

支持此功能需要在页面的 head 元素中添加一个链接到 Google 网上商店页面,例如

<link rel="chrome-webstore-item" href="https://chrome.google.com/webstore/detail/apdfllckaahabafndbhieahigkjlhalf">

如何将元素添加到页面的头部?我知道我们有一些 Orchard 模块可以做类似的事情,这需要模块吗?

4

2 回答 2

6

您还可以通过自定义主题将脚本、css 等直接插入到 <head> 元素中。document.cshtml 的默认形状有一个名为 Head 的区域,您可以在其中呈现各种形状。

注意 document.cshtml 中的 @Display(Model.Head) 调用:

<head> 
    <meta charset="utf-8" />
    <title>@Html.Title(title, siteName)</title> 
    @Display(Model.Head)
    <script>(function(d){d.className="dyn"+d.className.substring(6,d.className.length);})(document.documentElement);</script> 
</head> 
<body>
@* Layout (template) is in the Body zone @ the default position (nothing, zero, zilch) *@
@Display(Model.Body)
@Display(Model.Tail)
</body>
</html>

这意味着如果您想在元素中添加东西,您可以执行以下操作,例如,从自定义主题中的 layout.cshtml :

@{
    WorkContext.Layout.Head.Add(New.Analytics(), "10");
}

并在您的主题中,在 Views 文件夹中有 Analytics.cshtml:

<script>
    (function (i, s, o, g, r, a, m) {
        i['GoogleAnalyticsObject'] = r; i[r] = i[r] || function () {
            (i[r].q = i[r].q || []).push(arguments)
        }, i[r].l = 1 * new Date(); a = s.createElement(o),
        m = s.getElementsByTagName(o)[0]; a.async = 1; a.src = g; m.parentNode.insertBefore(a, m)
    })(window, document, 'script', '//www.google-analytics.com/analytics.js', 'ga');

    ga('create', 'UA-XXXXXXX-X', 'auto');
    ga('send', 'pageview');

</script>
于 2014-07-01T03:01:30.783 回答
3

我不知道有任何模块能够向头部添加任意链接标签,因此您有两种选择:

  1. 通过从形状模板注册链接从主题添加它;这意味着您的主题中需要有一个模板,用于构建网站布局。为此,您可以例如覆盖现有模板,例如主题中的 Document.cshtml 并在那里添加注册。有一个Pretty Good Base Theme开发者主题专门设计用于通过扩展点来帮助此类场景,因此您不必完全覆盖(并且首先复制粘贴)现有形状以包含您自己的形状。
  2. 通过 ResourceManager 从模块中添加它。

广告 1:

RegisterLink(new Orchard.UI.Resources.LinkEntry
{
    Rel = "chrome-webstore-item",
    Href = "https://chrome.google.com/webstore/detail/apdfllckaahabafndbhieahigkjlhalf"
});

广告 2:在您的代码中注入一个 IResourceManager(它应该在需要此链接条目的每个请求上运行;因此可能是一个 IResultFilter)并以与前一点相同的方式使用它。

于 2012-08-20T10:34:31.067 回答