新的基于WEB的用户接口 难度:新手 技能: 需要一些高级的面向对象的技能来在本章的例子中找到感觉。 熟悉组件架构将会对本章出现的词汇的理解有一定帮助。 问题/任务: 在这里你会说:"我已经安装了Zope3,那么接下来呢?"这是一个好问题,特别是你从来没有接触过任何版本的Zope。当Zope使用启动配置文件启动后,它将启动一个HTTP和一个FTP服务器。通过HTTP服务器,提供了一个Web用户接口--站点管理器,通过它不仅可以配置服务器的特性,也可以开发所谓的TTW(through-the-Web)软件。在介绍了基本元素和Web接口(ZMI)的概念之后,我们给出一打的范例。Zope X3 3.0.0版本主要集中在给予文件系统的开发上,这是本书所关注的,所以TTW依然很不成熟,并且在本发布版本也是不可用的。 解决方案: Zope3启动之后,你可以通过"manage"屏幕进入ZMI。完整URL是http://localhost:8080/manage。
根文件夹的初始内容视图
Zope3有非常有弹性的皮肤支持,通过它你可以修改ZMI的外观和感觉。其他皮肤可以通过++skin++的URL名字空间来更换。其中一个较好的皮肤是"ZopeTop",但是在Zope X3 3.0.0版本被排除在外了。 本书将只使用默认的皮肤来描述UI。 开始习惯于ZMI ZMI基本上是由两列和一个顶部横条所组成的经典视图。顶部横条一般用来做广告和一些用户的基本信息。左边的窄列是"导航器"。本列的第一块通常是导航树,一般是对像数据库结构一个纵向视图。他为我们工作的很好,因为这两个主要的对象目录是普通对象和容器。在树的下面,包括"Add"在内有个很大的一块区域。屏幕的重要部分是右边的"工作区(workspace)"。工作区提特别供了集中访问对象的功能。
使用ZopeTop皮肤的初始内容视图
在工作区的顶部的"面包屑"表单里是对象的完整路径,它提供了访问路径中每一个元素的链接。在路径下面是一个标签页的头。标签页,作为"ZMI视图",为对象定义了各种各样的视图。你可以将这些视图理解为观察对象的不同方式。一个好的例子是对像的"内容"视图。在标签的下面,你可以看到另外一个动作(ZMI动作)列表。ZMI动作也是对象特定的,但是通常对不同的对象都有效。通用动作包括"撤销","查找","赋予"和"帮助",这些对所有的对象都有效。在动作的下面是"视图区",它可能包含若干元素。所有的视图都含有"内容",它容纳信息和被选择的标签的表单。在视图区的右边有一个可选的列叫做"上下文信息"。它一般被用来显示一些视图指定的帮助信息或元数据。 总的来说,整个ZMI是为了紧密的容纳这些元素而建立的。好吧,让我们来用ZMI做点什么吧!我们的目标是创建一个文件夹并编写一个ZMP页面来显示它的标题。可以通过点击ZMI的"Add添加"动作来在根目录下加入对象。现在,一个列出所有可用的内容对象的列表将展示在你的面前。选择"目录"并在底部的输入框中插入名字"folder"。最后,点击"Add"按钮,系统将会返回根目录内容视图。
使用在ZMI截屏上画出的区域
为了给我们新的文件夹添加一个好听标题,点击"Title"列的空单元格。一个输入框将出现,你可以在里面输入"一些酷标题"并回车。现在进入文件夹,添加一个"ZPT Page",名字叫"showTitle.html",操作方式与添加文件夹一样。现在我们编辑这个页面,加入下面的代码: 1 <html> 2 <body> 3 <h4>Folder Title</h4> 4 <br/> 5 <h1 tal:content="context/zope:title">title here</h1> 6 </body> 7 </html> 第5行里有一个陌生的tal名字空间,这是Zope强大的脚本语言的第一次亮相,页面模版。内容属性将使用文件夹的标题来替换"title here",而文件夹标题是通过context/zope:title来访问的。如果你现在点击"预览"标签,你将看到文件夹的标题被显示出来了。当然,你也可以打开浏览器,直接访问http:// localhost:8080/folder/showTitle.html来观看。
帮助和文档 Zope3有一个可扩展的在线帮助系统。通常情况下,既可以通过ZMI的"帮助"链接来访问,也可以通过上下文敏感的帮助,它一般出现在视图区右边,来访问。
在线帮助
另外一个有用的特性是接口自省器。你可能已经注意到了"自省器(Introspector)"标签对所有的对象都是有效的。它提供了该对象提供的所有接口的列表和基类。在自省器里列出的接口和类真实地链接到API文档中,它是Zope3中第三个主要的动态文档工具。API文档工具通常可以通过http://localhost:8080/++apidoc++来访问,它为接口、类、组件架构和ZCML提供了一个动态生成的文档。 很明显,这些工具不仅对脚本人员和ZMI的用户很有帮助,也对Python开发人员快速获得组件之间是如何连接的有所帮助。
一个对象的自省器视图
脚本人员的世界 Zope3是我们努力向脚本人员提供的一个真正的面向对象和面向组件的应用服务器。脚本人员就是那些高级开发人员并且不是很熟悉高级编程概念的人。我们已经为脚本人员开发了一些工具,并且这些工具在Zope3的源码库里有。然而,为了Zope X3 3.0.0发布版,我们决定集中精力在向Python开发者提供一个坚实的工作框架。即将发布版本的焦点将是提供更加灵巧的工具来帮助脚本人员从PHP、ColdFusion和ASP转移到Zope3上来。此外,我们还将提供一个指导来使脚本人员向开发人员迁移。 软件空间 VS 内容空间 Zope2在允许软件和内容放在同一空间上犯了一个巨大的错误。我们不想在Zope3中犯同样的错误。因此,我们开发了一个"内容空间"和"软件空间"。到目前为止,我们一直在内容空间里。 内容空间 正如名字,在内容空间里我们只存储内容。我们可以将DTML和ZPT认为是一种动态内容,而Python脚本明显是软件,并且不能存放在内容空间里。在这里唯一支持的编程类型就是脚本。然而,"脚本"感觉上并不是很好,我们正准备为脚本人员提供一个变成TTW开发人员的途径。
通过API文档工具来查看接口菜单和IFile的详情。
软件空间 每一个"Site"对象都有一个软件空间,可以通过"Manage Site"动作来访问。当查看根文件夹的内容时你就可以看到这个链接,因为根文件夹总是一个站点。但是,怎样创建一个新的呢?它并不在可添加类型的列表里呀?为了创建一个站点,先创建一个文件夹,然后点击动作菜单上的"Make a site"链接。就是它!任何文件夹都可以通过这个途径升级为一个站点。 一旦你点击了"Manage Site",一个任务概要将展示在你的面前。每一个站点都由一些包组成,包括默认的包,总是定义过的。包被用来打包和发布软件。一个相关的注册与约束系统保证了安装的正确性。 如果你现在点击"Visit default folder"链接,你将看到包的内容视图。目标是你在这里加入本地组件作为软件来使用。由于这个看上去与文件夹的内容空间的"内容"视图很像,所以我们经常把添加的组件称为"元内容"。 好了,现在让我们看看这些是如何挂接在一起的。最简单的例子就是创建一个本地翻译域,然后用它翻译一条无聊的消息。假定你已经在默认包的内容视图里,点击"Add",选择"Translation Domain"并且输入"Translations"作为名字。按"Add"按钮来提交请求。你现在将被提示去注册组件。 通过点击"Register"来创建一个注册。注册一个"silly"(将会是正式的域名)的域。提供的接口应该是"ILocalTranslationDomain",并且将注册状态设定为"Active"。点击"Add"按钮完成请求。现在已有了一个活动的Translation Domain实用工具。点击"Translation"标签页来输入翻译环境。第一步是添加一些语言。 在"New Language"下面输入en,然后按"Add"按钮。同样的方法输入de。现在你必须同时选中2个,英语和德语,然后点击"Edit"。 你将看到表格的下面多出来两栏,每一栏代表一种语言。要添加一个新的翻译项,请看第一行。 对于Message Id,输入"greeting",对于de 和en 栏,分别输入"Hallo Welt!"和"Hello World!"。 点击屏幕底部的"Edit Messages"按钮来保存这个新的翻译项。 你此刻有一个将greeting翻译成英语和德语的翻译项了。 我们已经定义了我们的软件-翻译域,现在是时候回到内容空间并"使用"这个新软件了。 在根目录创建一个新的ZPT页面,叫做"i18n.html"并添加如下的内容: 1 <html> 2 <body i18n:domain="silly"> 3 <h1 i18n:translate="">greeting</h1> 4 </body> 5 </html> 当你保存这些行并点击"预览"标签之后,你将看到一个巨大的"Hello World!",假定你是将英语指定为默认语言的。 如果你现在将语言设定为德语,那么在屏幕上将出现"Hallo Welt!"。在Mozilla你可以在"Edit ","Preferences ","Navigator ","Languages "里面进行指定语言的操作。简单的将"German [de]"移动到列表的最顶端即可。
翻译域实用工具的"翻译"屏幕。
我们已经看到了在站点里开发一个软件并将其应用到内容空间的过程是多么的简单。 随着Zope3越来越成熟,你将会看到更加激动人心的特色,比如使用Schemas来进行内容组件的TTW开发和写新视图。 这些将把我们带到"通过网络(TTW)"的开发环境。 在更多地了解了更多有关安装Zope的内容后,我们将要转向基于文件系统的开发并开始对Zope3的观念给出一个更加正式的介绍。