一:Widget
可以理解为控件,可以直接被页面所引用。行为类似与分部页面,比如,我们可以创建一个 商品列表 Widget,然后这个 Widget 就可以被很多页面所引用。
理解 Widget 这个概念,我们不得不理解另外两个概念:
1:Layer
Orchard 默认有这么几个层,Default、Authenticated、Anonymous、Disabled、TheHomepage。Layer 用于承载什么时候 Widget 将会被展现,这么讲大家一定觉得很抽象,其实 Layer 存在的意义完全在于其Rule。我们新建或者修改 Layer 的时候,就会出现 Rule,那么,Layer Rule 到底是什么,
它是一个布尔表达式,当这个表达式的值为 true 的时候,层中的 Widget 就显式,否则不显式。
举例来说:如果我们新建一个层,其 Rule 如果,
填写为:(not authenticated and url("~/about")) or authenticated
则表明:(未登录用户 且 URL 中 有 about)的可显式,或者 登录用户 可显式
注意,authenticated 作为 orchard 这里的关键字,被程序判断为 登录用户 的意思。如果有兴趣,可寻求代码验证。全部的被 Layer rule 表达式支持的关键字如下:
url("<url path>"):url匹配,如:
url("~/home*")
authenticated:True 如果用户登录的话.
ContentType("<Type>"):True 如果 content type 匹配的话,如:ContentType("Page")
not:逻辑 NOT.
and:逻辑 AND.
or:逻辑:OR.
1.1 Layer 权限控制
鉴于 Layer 的这个特性,它的一个重要的作用可被用于权限控制。如 Authenticated 这个层,其 Rule 直接为 authenticated,这样的话,就意味着,这个层里的所有东西,只有登录用户才可见的。
2:Zone
理解为页面上的 占位(或者叫占位符),在页面展现的时候,它被用来展现 Widget。
我们要清楚:站点Theme实际上是定义 Layer,而 Layer 则是定义哪个 Zone 可用。我们在上图中看到的这些 Zone 就是当前 Theme 的所有的 Zone。
我们随便编辑一个 Widget,就能大致看清楚它们之间的关系了,如下: