惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

D
Darknet – Hacking Tools, Hacker News & Cyber Security
Jina AI
Jina AI
博客园_首页
J
Java Code Geeks
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 司徒正美
Hugging Face - Blog
Hugging Face - Blog
S
SegmentFault 最新的问题
MyScale Blog
MyScale Blog
P
Proofpoint News Feed
L
Lohrmann on Cybersecurity
Forbes - Security
Forbes - Security
大猫的无限游戏
大猫的无限游戏
Vercel News
Vercel News
Y
Y Combinator Blog
Google DeepMind News
Google DeepMind News
The Register - Security
The Register - Security
N
News | PayPal Newsroom
S
Security Archives - TechRepublic
量子位
Cisco Talos Blog
Cisco Talos Blog
V
V2EX
C
Cisco Blogs
The Cloudflare Blog
Stack Overflow Blog
Stack Overflow Blog
L
LangChain Blog
Scott Helme
Scott Helme
S
Securelist
Security Latest
Security Latest
爱范儿
爱范儿
TaoSecurity Blog
TaoSecurity Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
I
Intezer
L
LINUX DO - 最新话题
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
C
Check Point Blog
C
CXSECURITY Database RSS Feed - CXSecurity.com
美团技术团队
Know Your Adversary
Know Your Adversary
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
PCI Perspectives
PCI Perspectives
月光博客
月光博客
T
Tailwind CSS Blog
Cloudbric
Cloudbric
小众软件
小众软件
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
K
Kaspersky official blog
D
DataBreaches.Net
博客园 - 【当耐特】
有赞技术团队
有赞技术团队

博客园 - 二十四画生

Orchard 1.3新功能之——规则(Rules) Orchard 1.3新功能之——Markdown编辑器 Orchard 1.3 发布了! Orchard中的计划任务功能(Schedule) Orchard网站App_Data目录里的文件介绍 Orchard中的多站点功能(Multi-Tenant) Orchard中的多语言功能 Orchard中的列表功能 Orchard中的用户、角色及权限 自定义Orchard站点辅助工具——Shape Tracing Orchard中的形状候补(Alternates) Orchard是如何呈现内容的 理解Orchard中的placement.info文件 详解Orchard主题(Theme) 在Orchard中创建一个自定义字段类型 Orchard动态编译机制 在Orchard中为命令行工具(Command-Line)添加一个新命令 在Orchard中处理一对多关系 在Orchard中创建一个主题(Theme)
在Orchard中使用样式及脚本
二十四画生 · 2011-09-03 · via 博客园 - 二十四画生

    在Orchard中开发模块我们可能会添加一些这个模块特有的样式或脚本。从web页面优化的角度来看,我们通常需要将样式添加到页面的头部(<head>标签处),而脚本则希望添加到页面地底部(靠近</body>标签)。然而我们开发模块所对应的视图文件其实一个部分视图(PartialView),如果直接在视图中添加样式或脚本引用标签就无法达到我们希望的效果。那么在Orchard中是如何处理这一功能的呢?

    在Orchard框架中重写了MVC视图引擎的WebViewPage类,新增了Script和Style属性用于引入样式和脚本。这样我们就可以在视图中直接使用这个两属性,来调用相应的方法了。

在视图中使用内部样式和脚本

如果我们需要将样式定义或脚本定义直接写到页面中。那么我们可以通过把样式和脚本写入Orchard主题所定义的特定区域中。例如使用以下方法就可以把脚本写入页面的底部区域:

@using (Script.Foot())

{

  <script type="text/javascript">

    function JsSub() { 

      //这里可写脚本

    }

  </script>

}

在Orchard中Style属性并没有Head方法,也许是Orchard不希望我们使用内部样式吧。所以我们还是把样式放在一个外部样式文件中来引用好了。

在视图中使用外部样式和脚本

如果我们想在模块中的调用样式和脚本。那么我就可以通过Script和Style属性的Include方法,如:

@{

  Style.Include("xxx.css");

  Script.Include("xxx.js");

}

这样在呈现页面的时候的,orchard会自动调查找此模块中Styles目录下相应的样式文件并生成样式引用标签写在页面的头部。也会查找Scripts目录下相应的脚本文件并生成脚本引用标签写在页面的底部。

使用资源文件

除了以上介绍的两种方法以外,Orchard还提供了一个资源文件清单的功能。我只需要在模块根目录中创建一个ResourceManifest.cs文件,并实现IResourceManifestProvider接口即可。在这个资源清单文件中,我们可以对样式和脚本文件的引用有更丰富的功能。

如:定义一个脚本文件的引用就可以用:

public void BuildManifests(ResourceManifestBuilder builder) {

builder.Add().DefineScript("jQuery").SetUrl("jquery-1.5.2.min.js")

}

这样在视图上引用的时候可以用:

@{

Script.Require("jQuery ");

}

而且定义好后其他模块也可以使用这一资源,并且在一个页面中有多个视图文件引用此资源时,也不会出现重复引用,Orchard只会生成一个引用此脚本的标签。

定义样式也一样:

builder.Add().DefineStyle("jQueryUI_Orchard").SetUrl("jquery-ui-1.8.11.custom.css");

使用时:

@{

Style.Require("jQueryUI_Orchard ");

}

同时资源文件清单还有一个依赖设置的功能。就是当一个脚本资源需要依赖其他的脚本资源时,就可以使用以下定义:

builder.Add().DefineScript("jQueryUI_Core").SetUrl("jquery.ui.core.min.js").SetDependencies("jQuery");

这样我们只用在视图上使用jQueryUI_Core脚本,他会自动把它所依赖的jquery脚本也同时引入进来。

如果以脚本同时依赖多脚本,可以用逗号分隔多个依赖的资源,如:

builder.Add().DefineScript("jQueryUI_Draggable").SetUrl("jquery.ui.draggable.min.js")SetDependencies("jQueryUI_Core", "jQueryUI_Widget", "jQueryUI_Mouse");

不过目前Orchard还不支持脚本资源依赖样式资源的功能,这有点可惜,其实有些js需要和样式文件同时使用的,如:jQueryUI插件。

另外,资源清单文件还可为调试模式和发布模式设置不同的脚本文件,并且还可以定义相应资源的版本,如:

builder.Add().DefineScript("jQuery").SetUrl("jquery-1.5.2.min.js", "jquery-1.5.2.js").SetVersion("1.5.2");

    Orchard中自带的Orchard.jQuery模块就是这样一个定义jQueryUI插件的模块。如果我们有需要用到这个插件的地方,就可以查看这个清单文件中所定义的js插件,并在我们自己的模块中引用他。不过值得注意的是:如果我们需要引用Orchard.jQuery模块中的内容,就需要在模块清单文件中设置依赖Orchard.jQuery模块,这样在启用我们的模块的时候就会同步启用Orchard.jQuery模块,确保我们所引用的资源都能正常调用。