欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

Plone学习笔记 ( by quqi99 )

shiping1 的头像
作者:张华 发表于:2008-10-19  ( http://blog.csdn.net/quqi99 )

版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明。



         一直想为自己建个站点,今天周末,闲着没事,看了看 Plone, 好记性不如烂笔头,做个记录如下(关键是指明学习哪块东西要看哪些资料)。一天时间,有几个问题还没搞太明白,如 ZODB 与关系型数据库如何交换数据,这些的总结都在最后一章结论里头。

1 概述

Zope 和CMF 都是Plone 需要的核心技术。
Zope 是由Python 编写的,他是一个强大的面向对象的、开源的编程语言,他和Perl 及Tcl 比较类似。使用Plone ,甚至基本的管理,都不需要Python 的知识;然而,定制产品和Plone 上脚本编程是需要一些Python 知识的。
如果你打算使用Plone 做一些复杂的事情,就需要花1 -2 天学习Python 的基础知识。这不仅将让你能更充分地定制Plone ,而且他将让你熟悉这些对象,以及他们如何在Plone 环境中相互作用。
幸运的是,Python 是一个非常容易学习的编程语言;一般,一个熟练的编程人员一天便可完全掌握他。新的编程人员稍微长些。如果你在Windows 或者Mac 上安装Plone ,Python 的正确版本灰自动安装上。如果要在几乎任意的操作系统中,独立地下载安装Python ,请到 http://www.python.org .
掌握Python 的最佳方法是在一个命令行的Python 解释器中试用他。如果你有Plone 的一个Windows 安装程序,会有一个到Pythonwin 链接,他是一个Python 的集成开发环境(IDE) 。你可以在“ 开始” 菜单中找到它:开始 - 程序 - Plone - Pythonwin ( 图 1-2).

2 安装

   下载地址: http://plone.org/products/plone
   
启动后登录的用户名与密码是: admin, password
一些配置文件位于: E:/java/Plone 3/Data/etc

3 模板

当你向Plone 请求一个“ 统一资源定位符” (URL )的时候,Plone 环境中的一个对象被调用了。Plone 通过把URL 翻译成一个路径,来完成这个过程。因此,如果URL 是 /Plone/login_form , Plone 就会把这个URL 分割为一个路径,并因此在对象数据库中查看每个对象。他首先寻找 Plone 对象,再在 Plone 对象内部寻找 login_form对象。这个路径查询的过程,叫做 变量traversal ; 在本质上,zope 遍历了这些对象,然后调用了路径中的最后一个对象。如果你在浏览器中调用URL : /Plone/Members/login_form ,那么上下文就变成了 /Plone/Members . Plone 和Zope 整个发布系统中,有一个精妙之处,叫做 获取(acquiaition) . 获取后面的概念是一种容器包含关系:对象被放置在叫做 容器 的其他对象中。在前面的例子中, andy 对象是一个容器,它位于 Members 容器中,然后位于Plone 网站容器中( 它有反过来位于Zope 应用容器中).
在一个标准的面向对象环境中,一个对象继承了它父对象的行为。在Plone 和Zope 中,一个对象也继承了它的容器的行为。一个对象可以查找整个容器层次结构,以计算出如何得到这个行为。

4 Python

     一句话, javascript 只适合客户端 , 而 python 既适合客户端也适合服务端而已。
Python 是一门优雅而健壮的编程语言,它继承了传统编译语言的强大性和通借鉴了简单脚本和解释语言的易用性。它可以帮你完成工作,而且一段时间以后,你还能看明    
白自己写的这段代码。你会对自己如此快地学会它和它强大的功能感到十分的惊讶,更不用提你已经完成的工作了!只有你想不到,没有 Pytyon 做不到。
类似于 JAVA ,它实际上是字节编译的,其结果就是可以生成一种近似机器语言的中间形式,这不仅改善了它的性能,还同时使它保持了解释型语言的优点。它的源代码通常以 .py 为扩展名,由于调用方式的不同,源文件会被编译成带有 .pyc或 .pyo 扩展名的文件 .
 
下面讲讲, 如何在 Windows下方便地进入命令行运行程序
在windows 下的cmd 窗口中执行python 程序,我一般是这样做:
1. 执行一个reg 文件,内容为:
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT/Directory/shell/cmd/command]
@="cmd.exe /k /"cd %L/""
它的作用是在你的资源管理器上的右键菜单上增加一个菜单,名字为cmd 。那么以后你在目录栏中点击一个目录,然后点右键,再执行这个cmd 菜单,就会直接进入这个目录的命令行。
2. 因为已经进入了你的python 程序所在的目录,因此直接在命令行下运行:
Python yourprog.py
即可。
前提是你已经将 Python 的安装目录加到 PATH 的环境变量中。
 

4.1 Python 与其他语言比较

然而,往往因为Python 是一门解释型语言,你会发现大多数的比较是在Perl 、Java 、Tcl ,还有JavaScript 之间进行的。Perl 是另外一种脚本语言,远远超越了标准的 shell 脚本。像Python 一样,Perl 赋予了你所有编程语言的功能特性,还有系统调用能力。 Perl 最大的优势在于它的字符串模式匹配能力,其提供了一个十分强大的正则表达式匹配引擎。这使得Perl 实际上成为了一种用于过滤、识别和抽取字符串文本的语言,而且它一直是开发 Web 服务器端 CGI(common gateway interface, 通用网关接口) 网络程序的最流行的语言。Python的正则表达式引擎很大程度上是基于Perl 的。 然而,Perl 语言的晦涩和对符号语法的过度使用,让解读变得很困难。这些语法令初学者不得精要,为他们的学习带来了不小的阻碍。Perl 的这些额外的“特色”使得完成同一个任务会有多个方法,进而引起了开发者之间的分歧和内讧。最后,通常当你想阅读几个月前写的Perl 脚本的时候都不得不求助参考书。 Python 也经常被拿来和 Java 作对比,因为他们都有类似的面向对象的特性和语法。Java 的语法尽管比C++ 简单的多,但是依旧有些繁琐,尤其是当你想完成一个小任务的时候。Python 的简洁比纯粹的使用Java 提供了更加快速的开发环境。在Python 和Java 的关系上,一个非常重大的革命就是 Jython 的开发。Jython 是一个完全用 Java 开发的 Python 解释器,现在可以在只有Java 虚拟机的环境中运行Python 程序。我们会在后面的章节中简单讲述Jython 的更多优点,但是现在就可以告诉你:在 Jython 的脚本环境中,你可以熟练地处理 Java 对象,Java 可以和 Python 对象进行交互,你可以访问自己的 Java 标准类库,就如同 Java 一直是 Python 环境的一部分一样。
JavaScript 是另外一种非常类似Python 的面向对象脚本语言。优秀的JavaScript 程序员学起Python 来易如反掌。 聪慧的读者会注意到JavaScript 是基于原型系统的,而Python 则遵循传统的面向对象系统, 这使得二者的类和对象有一些差异
我们在上一节中曾经提到, 还有一个可以用的 Python 解释器是完全由Java 写成的, 名为 Jython 。  尽管两种解释器之间存在一些细微的差别, 但是它们非常接近, 而且启动环境也完全相同。那Jython 又有哪些优势呢? Jython...
l         只要有Java 虚拟机, 就能运行Jython
l         拥有访问Java 包与类库的能力
l         为Java 开发环境提供了脚本引擎
l         能够很容易的测试Java 类库
l         提供访问Java 原生异常处理的能力
l         继承了JavaBeans 特性和内省能力
l         鼓励Python 到Java 的开发(反之亦然)
l         GUI 开发人员可以访问 Java 的 AWT/Swing 库
l         利用了Java 原生垃圾收集器(CPython 未实现此功能)

4.2 Python 语言基础 ( 没说明的就是和 JAVA 语法一样 )

下划线 (_) 在解释器中有特别的含义,表示最后一个表达式 ( 注意不是语句 ) 的值。所以上面的代码执行之后,下划线变量会包含字符串
Python 的 print 语句,与字符串格式运算符 (  % ) 结合使用,可实现字符串替换功能,这一点和 C 语言中的 printf() 函数非常相似: >>> print "%s is number %d!" % ("Python", 1) 
 
下面是一个将输出重定向到日志文件的例子:
logfile = open('/tmp/mylog.txt', 'a')
print >> logfile, 'Fatal error: invalid input!'
logfile.close()
 
从键盘输入数据: >>> user = raw_input('Enter login name: ') 
 
获得帮助: help(raw_input)
 
注释是以“ # ”号开头

4.2.1 运算符

Python 有两种除法运算符,单斜杠用作传统除法,双斜杠用作浮点除法(对结果进行四舍五入)。传统除法是指如果两个操作数都是整数的话,它将执行是地板除 ( 取比商小的最大整数 ) (关于“地板除”请参考第 5 章——译者注),而浮点除法是真正的除法,不管操作数是什么类型,浮点除法总是执行真正的除法。你可以在第五章(数字)学到更多有关传统除法、真正的除法及浮点除法的知识。
Python 当然也有标准比较运算符, 比较运算根据表达式的值的真假返回布尔值:
  <       <=      >       >=      ==      !=      <>
Python 也提供了逻辑运算符:
and      or      not

4.2.2 变量和赋值

大小写敏感。
Python 是动态类型语言, 也就是说不需要预先声明变量的类型。
 
Python 支持五种基本数字类型,其中有三种是整数类型。
  int ( 有符号整数 )          
long ( 长整数 )          
bool ( 布尔值 )          
float ( 浮点值 )         
complex ( 复数 ) 
Python 的长整数所能表达的范围远远超过 C 语言的长整数, 事实上,
Python 长整数仅受限于用户计算机的虚拟内存总数。如果你熟悉 Java, Python 的长整数类似于 Java 中的 BigInteger类型      
其实还有第六种数字类型, decimal , 用于十进制浮点数。不过它并不是内建类型, 你必须先导入 decimal 模块才可以使用这种数值类型。 由于需求日渐强烈, Python 2.4 增加了这种类型
 
Python 中字符串被定义为引号之间的字符集合。 Python 支持使用成对的单引号或双引号,三引号(三个连续的单引号或者双引号)可以用来包含特殊字符。使用索引运算符 ( [ ] ) 和切片运算符 ( [ : ] ) 可以得到子字符串。字符串有其特有的索引规则:第一个字符的索引是 0 ,最后一个字符的索引是 - 1

4.2.3 列表和元组

可以将列表和元组当成普通的“数组”,它能保存任意数量任意类型的 Python 对象。和数组一样,通过从 0 开始的数字索引访问元素,但是列表和元组可以存储不同类型的对象。 列表和元组有几处重要的区别。 列表元素用中括号 ( [ ]) 包裹,元素的个数及元素的值可以改变 。元组元素用小括号 (( )) 包裹,不可以更改(尽管他们的内容可以)。 元组可以看成是只读的列表。通过切片运算 ( [ ] 和 [ : ] ) 可以得到子集,这一点与字符串的使用方法一样。
即小括号包着的是元组,中括号包着的是列表,元组不能被修改,列表则可以。

4.2.4 字典

就是哈希,用大扩号包着的。
>>> aDict = {'host': 'earth'} # create dict
>>> aDict['port'] = 80 # add to dict
>>> aDict
{'host': 'earth', 'port': 80}
>>> aDict.keys()
['host', 'port']
>>> aDict['host']
'earth'
>>> for key in aDict:
... print key, aDict[key]
...
host earth
port 80

4.2.5 代码块及缩进

代码块通过缩进对齐表达代码逻辑而不是使用大括号,因为没有了额外的字符,程序的可读性更高。而且缩进完全能够清楚地表达一个语句属于哪个代码块。当然,代码块也可以只有一个语句组成。 对一个 Python 初学者来说, 仅使用缩进可能令他诧异。 人们通常竭力避免改变, 因此对那些使用大括号很多年的人来说, 初次使用纯缩进来表示逻辑也许会多少感到有些不够坚定。(不用大括号?到底成不成啊?)。然而回想一下, python 有两大特性, 一是简洁,二是可读性好。如果你实在讨厌使用缩进作为代码分界, 我们希望你从现在开始,半年后再来看一下这种方式。也许你会发现生活中没有大括号并不会象你想像的那么糟糕。

4.2.6 语句

If , while 等语句后面都有一个冒号。
>>> counter = 0
>>> while counter < 3:
... print 'loop #%d' % (counter)
... counter += 1
 
>>> for item in ['e-mail', 'net-surfing', 'homework',
'chat']:
... print item
对字符串来说, 很容易迭代每一个字符。
>>> foo = 'abc'
>>> for c in foo:
...     print c
range() 函数经常和 len() 函数一起用于字符串索引。 在这里我们要显示每一个元素及其
索引值:
>>> foo = 'abc'
>>> for i in range(len(foo)):
... print foo[i], '(%d)' % i
...
a (0)
b (1)
c (2)
不过, 这些循环有一个约束, 你要么循环索引, 要么循环元素。这导致了 enumerate()
函数的推出( Python2.3 新增)。 它同时做到了这两点:
 
>>> for i, ch in enumerate(foo):
... print ch, '(%d)' % i
...
a (0)
b (1)
c (2)

4.2.7 列表解析

4.2.8 文件操作

   ilename = raw_input('Enter file name: ')
fobj = open(filename, 'r')
for eachLine in fobj:
print eachLine,
fobj.close()

4.2.9 错误和异常

try:
filename = raw_input('Enter file name: ')
fobj = open(filename, 'r')
for eachLine in fobj:
print eachLine, fobj.close()
except IOError, e:
print 'file open error:', e

4.2.10 函数

   定义函数:
def addMe2Me(x):
        'apply + operation to argument'
        return (x + x)

4.2.11 类

    class ClassName(base_class[es]):
        "optional documentation string" 
        static_member_declarations 
        method_declarations

4.2.12 模板

模块是一种组织形式, 它将彼此有关系的 Python 代码组织到一个个独立文件当中。
模块可以包含可执行代码, 函数和类或者这些东西的组合。

4.2.13 语法和句法

Python 语句中有一些基本规则和特殊字符:   
l          井号 (#) 表示之后的字符为 Python 注释   
l          换行 (/n) 是标准的行分隔符(通常一个语句一行)   
l          反斜线 ( / ) 继续上一行   
l          分号 ( ; ) 将两个语句连接在一行中   
l          冒号 ( : ) 将代码块的头和体分开   
l          语句(代码块)用缩进块的方式体现   
l          不同的缩进深度分隔不同的代码块   
l          Python 文件以模块的形式组织

4.2.14 第一个程序实例

#!/usr/bin/env python
 
'makTextFile.py -- crate text file'
 
import os
ls = os.linesep
 
#get filename
fname = raw_input('input filename please: ')
done = False
while not done:
    if os.path.exists(fname):
        print "ERROR: '%s' already exists" % fname
        break
    else:
        print 'get file content'
        all = []
        print "/nEnter lines ('.' by itself to quit)./n"
         while True:
            entry = raw_input('please input content:')
            if entry =='.':
                break
            else:
                all.append(entry)
        print 'write line to file'
        fobj = open(fname,'w')
        fobj.writelines(['%s%s' % (x,ls) for x in all])
        fobj.close()
        done = True;
        print "DONE!"

4.2.15 相关模块和开发工具

l          Debugger: pdb  
l          Logger: logging  
l          Profilers: profile, hotshot, cProfile

4.3 Python 对象

所有的 Python 对像都拥有三个特性:身份,类型和值。一个对象都有一个唯一的身份标识自己,任何对象的身份可以使用内建函数 id() 来得到。您可以用内建函数 type() 查看 Python 对象的类型。

4.3.1 P ython 对象

None, Python 的 Null 对象,相当于 void

4.3.2 内部类型

  代码     
帧    
跟踪记录  
切片  
省略   
Xrange
代码对象是编译过的 Python 源代码片段,它是可执行对象。通过调用内建函数 compile()
可以得到代码对象。代码对象可以被 exec 命令或 eval() 内建函数来执行。在第 14 章将详细研究代码对象。代码对象本身不包含任何执行环境信息, 它是用户自定义函数的核心, 在被执行时获得上下文。(事实上代码对象是函数的一个属性)一个函数除了有代码对象属性以外些其它函数必须的属性,包括函数名,文档字符串,默认参数,及全局命名空间等等。
帧对象表示 Python 的执行栈帧。帧对象包含 Python 解释器在运行时所需要知道的所有信息。它的属性包括指向上一帧的链接,正在被执行的代码对象(参见上文),本地及全局名字空间字典以及当前指令等。每次函数调用产生一个新的帧,每一个帧对象都会相应创建一个 C 栈

4.3.3 标准类型内建函数

cmp(obj1, obj2)    比较 obj1 和 obj2, 根据比较结果返回整数 i:
repr(obj) 或 `obj`  返回一个对象的字符串表示
str(obj)           返回对象适合可读性好的字符串表示
type(obj)         得到一个对象的类型,并返回相应的 type 对象

4.3.4 不支持的类型

char 或 byte: Python 没有 char 或 byte 类型来保存单一字符或 8 比特整数。你可以使用长度为 1 的字符串表示字符或8 比特整数。
指针: Python 替你管理内存,因此没有必要访问指针。在 Python 中你可以使用 id() 函数得到一个对象的身份号, 这是最接近于指针的地址。因为你不能控制这个值,所以其实没有太大意义。其实在 Python 中, 一切都是指针。

4.4 Python 访问数据库

4.5 Jython

Jython 是一种可以把两种不同的编程语言结合在一起的工具。首先,它使 Python 程序员介入到 Java 开发环境并让他们能快速开发方案原型,以便无缝地集成到现有的 Java 平台上。 Jython 提供了 Python 的大部分功能,以及实例化 Java 类并与 Java 类交互的功能。 Jython 代码被动态地编译成 Java 字节码,因此,你可以用 Jython 扩展 Java 类。也可以用 Java来扩展 Python 。在 Python 中写一个类,像使用 Java 类一样使用这个类是很容易的事情。你甚至可以把 Jython 脚本静态地编译为 Java 字节码。
  安装:java -jar jython_installer-2.2.1.jar   
  再双击安装目录下的 jython.bat 就可以运行程序了。
用 Jython 交互解释器的一个更有趣的方面就是,现在,你可以用 Java 来写“ Hello
World! ”了:
  >>> from java.lang import System
>>> System.out.write('Hello World!/n') 
Hello World!
 
运行例子,先将安装目录加入到环境变量 PATH 中,然后直接在命令行中到例子所在目录运行: jython example.py 即可

4.5.1 在 JAVA 里运行脚本

在Jython 的源包jython.jar 中,包含了一种最基本的脚本解释器:PythonInterpreter 。代码如下:
Java 代码
  1. PythonInterpreter interp = new PythonInterpreter();  
  2.       interp.execfile("./script/listing.py");  
 
除此之外,还可以使用JSR223 ,JDK1.6 已经包含了该扩展包。JSR223 是一个用于解析多种脚本语言的库包,其中包括Jython 。除了JSR223 包之外,还需要jython-engine.jar 包。代码如下:
Java 代码
  1. ScriptEngine engine = new ScriptEngineManager().getEngineByName("python");  
  2. try  
  3. {  
  4.     engine.eval(new FileReader("./script/listing.py"));  
  5. }  
  6. catch(ScriptException se)  
  7. {  
  8.       
  9. }  
  10. catch(IOException ie)  
  11. {  
  12.       
  13. }  

5 Zope

Zope , Z Object Publishing Environment ,它既是 http 服务器,又是数据库, 又包含脚本编程语言。 Zope 是一种支持多种平台开源的 Web 应用服务器软件,它提供了完善 的功能和强大的动力,适用于构建各种类型的 Web 应用,从小型网站到企业级分布式网络应用都有 Zope 的用武之地。 Zope 在许多方面都超过了 ASP 、 PHP 、 JSP 等传统方法,是一套优秀而完整的解决方案。本专题详述 Zope 的应用开发,带您领略 Zope 的强大功能。
参考资料: Zope 应用开发指南 http://os.51cto.com/art/200602/21544.htm












 
Zope(Z Object Publishing Environment) 是一款网站建设工具,它是建立在服务或发布对象的基础上, 而不仅仅上增加网页内容。Zope 的支持者们相信,这款软件是对传统网 站建设工具和应用服务器的挑战,比如,ColdFusion 和网景应用服务器。另外,Zope 软件是免费并且开发源代码的。
Zope 的软件开发人员将Zope 设计成一款对象发表软件。他们的设想是让用户直接和实时对象交互,而不是传统上的和被服务的动态更新文件打交道。 Zope 组件包括一个发布向导,它负责使用稳定的Zope CGI 协议发布对象;另一个组件是被Zope 视为文件夹,文件和图形框架的内建框架;组件之三是支持动态也产生的模板;组件之四是对象数据库。因为 Zope 有SQL 语言和数据库适配器的支持,所以它可以实现和传统数据库的互交功能,如微软的SQL Server 。通常情况下,Zope 对象数据库使用文件操作系统来管理数据。但是,Zope 同时也支持关系数据库。像Oracle 、Sybase 、 MySQL 和Open Database Connectivity 它都支持。 
Zope 的大部分代码是用Python 语言写成的,Python 是一种具有很强的交互性,类似于java 的面对对象编程语言。同时,为了提供系统的系统,也采用了少量的c 代码。同时,Zope 可以运行于大多数的操作系统平台。
Zope 是一个开源的web 应用服务器,主要用python 写成;它是一个事务型的对象数据库平台。Zope 是一种支持多种平台的Web 应用服务器 软件,它提供了完善的功能和强大的动力,适用于构建各种类型的Web 应用,从小型网站到企业级分布式网络应用都有Zope 的用武之地。Zope 在许多方面 都超过了ASP 、PHP 、JSP 等传统方法,是一套优秀而完整的解决方案。
Zope 除了能储存内容,数据外,还能存放动态的HTML 模板、脚本、搜索引擎、关系数据库管理系统(RDBMS )接口和代码。
Zope 里的一切都是对象。它有一个强大的基于web 的在线开发模板,使你能在世界上任何地方,任何时间方便地更新你的网站。作为对以上功能的安全保障,zope 提供了一个集成的安全模型,能方便对数据库的内容进行分层授权管理。可以把个人的内容分配给个人用户管理,部门的内容分配给部门管理员管理,整个网站的内容由系统管理员管理。
现在基于Zope 平台已开发出了大量的产品,能方便地嵌入zope 中以扩展它的基本功能。Zope3 已发布,这是一个全新设计的Web 开发架构。采用组件和接口技术,实现Web 应用的快速开发和布署。
让 Zope 成为产品的技术就是基于 Web 从根本上来说是面向对象的。 Zope 中的对象是层次型的,就像我们熟悉的一些概念一样,例如文件夹,文档,图象, SQL 查询语句。 在 Zope 的层次环境里, URL 根据名字映射为其中的对象。例如 URL: "/Marketing/index.html" ,映射为文件夹对象 "Marketing" 下面名为 “index.html” 的文档对象。
Zope 对象的建立和管理十分方便,只要打开浏览器,进入管理界面,所有管理和应用开发界面都可以通过浏览器来完成,界面就像 Windows 的资源管理器。通过这个界面,开发人员不必存取服务器上的文件系统就可以创建 Zope 对象或者定义新的对象类型。 
对 象可以放到对象层次的任意地方。网站管理员可以点击目录栏得到对象的不同 “ 视图 ” ,这些视图视对象类型不同而不同,对于 DTML 文档,可以有 “Edit” 用来编辑文档源码,而数据库连接对象则让你修改连接字符串或者缓冲参数。所有的对象都有 “ 安全 ” 视图以控制存取权限。 
Zope 对象存放在高性能的事务型对象数据库中,可以采用文件系统或者关系数据库作后台存储。每一个 Web 请求作为对象数据库中分离的事务,如果应用中发生错误,请求事务就会自动回滚。同时,对象数据库还提供多级回退。网站管理员可以点击鼠标取消曾经做过的操 作。 Zope 框架让所有细节和事务对应用开发人员都透明。
Zope 的心脏就是 DTML ( 文档模板标记语言 ) ,这个功能强大的变量插入和表达语言,提供对 Zope 对象的安全脚本和动态内容产生。
Zope 的数据源可以包括关系数据库,以及非关系型的 LDAP/IMAP 等。 Zope 支持常见的关系型数据库,包括Oracle, Sybase, MySQL 以及大多数 ODBC 兼容的数据库。 
   为了存取后台数据,你需要建立一个数据库连接对象,然后建立 SQL 方法对象,这个对象能使用 DTML ,能很方便的建立动态的查询语句。下面建立的 getTasks 对象是从"tasks" 表中选出对应用户的任务:
----------------------------------------------- 
select * from tasks
where
emp_id='<!--#var AUTHENTICATED_USER-->'
-----------------------------------------------
结果集的数据应用于 DTML 文档: 
-----------------------------------------------
<h2><!--#var AUTHENTICATED_USER--> 的任务 </h2>
<table>
<!--#in getTasks-->
<tr>
<td><!--#var title--></td>
<td><!--#var due_date--></td>
</tr>
<!--#/in-->
</table>
--------------------------------------------
 
Zope 开发环境的另外一个好处就是它的事务模型能自动延伸到后台数据库,如果你的关系型数据库支持事务, Zope会在运行 SQL 方法之前自动开始事务,而在 Web 请求成功结束后自动提交事务,如果其中发生错误则会自动回滚,使事务的集成对 Web 开发人员完全透明。
Zope 的强大功能之一就是它简单而成熟的数据共享模型,这个模型叫做 “ 获取 ” ,核心的概念可以简单的描述为: 
Zope 对象包含于其它对象中(例如,文件夹) 
对象能够 “ 获取 ” 容器中的属性,内容,行为。
以前,我们决定把我们网站的头和脚封装到分离的 DTML 文档,这样能包含其他网站的内容,但是这个设计在拷贝头和脚到网站内所有的文件夹时发生了问题。如果我们采取 “ 获取 ” 的办法,在网站的顶层文件夹建立头和脚,下层的 DTML就能自动 “ 获取 ” 。 这个概念对所有的对象都适用,对把常用的资源集中起来十分有用。例如,对一个经常用到的 SQL 查询语句,我们可以把它定义在一个文件夹里,子文件夹里的对象能自动通过 “ 获取 ” 来使用它,如果要改变查询语句,只需要改动一个地方就可以了。
Zope 的特点是把文件和文件夹作为基本的对象,每个文件和文件夹都可以随意增加属性,同时,文件夹下面的文件和文件夹又是父文件夹的属性。通过增加脚本 文件的形式,可以为文件和文家夹增加方法。比如,一个文件可以加入 “ 作者 ”、 “ 分类 ” 、 “ 难度等级 ” 等属性,文件夹也可以加入 “ 显示此文件夹下所有文件内 容 ” 的方法。
Zope 的现在的缺点是,不能直接使用外部文件,还要通过 ftp 复制到数据库中。现在有对这方面的补救措施,但不是Zope 默认的。希望 Zope 将来能象操作自己的对象一样操作外部文件和其他网站的文件。
网站中数据库中主要的数据是文档,Zope 作为文档数据库,有强大的文档管理功能,有版本管理、历史记录功能,有全文检索功能。同时集成了文档的编辑环境和管理环境,管理文档象在文件管理器中一样方便。这些都是一般的数据库所不具备的。
如果,数据库中有上万条记录,Zope 的效率会比传统数据库要低,但Zope 有大量的适配器来链接各种数据库。来实现纯表格操作和大量的记录操作。
Zope 有 dtml (动态模板标记)语言来嵌入 HTML 中,实现网页的动态化。简单地使用地形式就可以插入动态内容。由于可以方便地加入属性和方法以及 “ 获取 ” 功能,文档具有极为丰富的变量环境。可以比一般的客户端包含提供更强大的功能。又有的形式来方便地获取多个文件地内容。在 dtml 中还可以嵌入 Python 表达式。这样,不用编程就具有强大的动态网页功能,实现导航功能等也轻而易举。这些功能的实现比 PHP 等语言要容易的多。
Perl 爱好者有福了。在这里可以直接用 sql 操作数据库,免去了把 sql 嵌入其他语言的麻烦。

6 plone

Zope/Plone 1 、免费,不用花一分钱; 2 、有真正免费的汉化包,不会有什么 “ 汉化者 ” 的 logo 强行挤占页面; 3 、Plone 是面向最终用户的,无需编程 ; 4 、非编程不可,用 Zope 、 Python 都是很简单的。
Plone 有一个非常好的产品开发工具Archetypes   
Plone 是python 写的, 国内虚拟主机基本找不到支持的   

6.1 plone 站点数据史保存在什么地方,怎样备份和移植 plone 站点 ?

Plone 站点所有内容是保存在 Data.fs 文件理, 这个文件位于 var   目录 ( 具体定位可以搜索 Data.fs 文件). 这个数据库也通常作为zope 的对象数据库 (ZODB) 。
http://315ok.org/boke/howtobeifenheyizhiplone

7 ZODB 对象数据库

ZODB 入门 http://www.ibm.com/developerworks/cn/aix/library/au-zodb/
Zope 的数据存储方式 http://blog.czug.org/panjy/zope-storage
ZODB 笔记 http://wiki.woodpecker.org.cn/moin/ZODB%E7%AC%94%E8%AE%B0
中文版 Zope 外部编辑器客户端
http://zopen.cn/products/open/ExternalEditor-zh
http://www.zope.org/Members/Caseman/ExternalEditor
Zope 支持使用多种方式来数据,而不仅仅使用一个单独的 Data.fs 文件
安装Zope 后,会发现数据均保存在一个Data.fs 的文件中,而且采用的是一个不开放的存储格式。很多人会产生疑问:
  • 一旦数据量增加了,这个独立 Data.fs 能否承受?系统性能是否会变慢?
  • 我保存了大量的图片、文档,能否让这些数据保存在文件系统中?
  • 关系数据库已经非常成熟了,能否保存在关系数据库中?
其实,独立Data.fs 仅仅是Zope 一个缺省存储方式,能够满足大多数的应用。通过定制和选择其他的第三方插件,可以满足其他的特殊要求。
  • ZODB 支持多个 storage 。这样您可以把您的 Data.fs 文件分割为多个文件,分别存储数据。在 $ ZOPEINSTANCE/etc/zope.conf 中,可以设置具体的 ZODB 存储方案。同时在 ZMI 中,需要 mount 相应的 storage。使用 起来就好像在 linux 上 mount 一个分区一样。
  • ZODB 的 storage 有很多种, Data.fs 仅仅是一个 FileStorage ,即单文件的 storage 方式。其他的 storage 包括DirectoryStorage ( 分目录存储数据 ), APE ( 可适配的存储引擎,见后 ) , BDBStorage (将数据保存在BerkerleyDB 中),以及 OracelStorage 等。各个 storage 有不同的特点,可参考这个 对比 
  • APE 是一个可适配的存储引擎,通过适配器,她能够把 python 对象保存在一个文件系统中、或者关系数据库中、或者其他任意的地方。目前主要用于 ZODB ,也可以用 于 zope/zodb 外的其他 Python 项目。 APE 目前支持文件系统和数据库的两种适配。可提供到 postgresql/mysql 的映射,同时 CA 公司也提供了到 Ingres 数据库的映射适配器。APE 得到了 CA 公司的支持。
  • 上面是一些 ZODB 相关的 storage 。实际上通过 zope 也可以直接访问关系数据库,直接将数据存储在关系数据库而不是存储在 ZODB 上。
  • 如果开发新的产品,可使用 Archetypes , Archetypes 提供的抛开 ZODB 外的独立的 Storage ,可将数据保存到文件系统或者数据库 ( 还不成熟 ) 中。
  • 在 zope3 上,数据存储的适配功能更强。目前有一个 sqlos 产品,利用了 sqlobject wiki ) 的 " 对象 - 关系数据库 "映射机制,将数据保存到关系数据库上。 python 上的对象和关系数据库映射系统其实很多,除了 sqlobject, 前面的ape 上就有一个,其他的还有 Modeling 、 PyDO
因此,Zope 的存储是十分灵活的,他提供了十分全面的存储机制,几乎可以满足您任意的存储要求。
 
 

8 附录:

8.1 Zope/Plone 内容管理系统的探讨与应用

[ 摘要 ] 随着企业经营模式的变化和技术的不断发展,从内容管理诞生到今天,关键技术的研究侧重于支撑内容管理平台的核心技术研究,主要包括 XML 和元数据技术、工 作流管理技术、应用集成技术以及数据检索和挖掘技术。 Zope/Plone 内容管理系统作为开源项目,正适应内容管理关键技术的发展要求,可以为企业或部 门建立一个稳定、高效、安全的内容管理系统。科技信息作为一种重要的信息资源,完全可以利用内容管理系统来进行管理。本文主要探讨了内容管理的基本概念及Zope/Plone 内容管理系统的特点,如何在实践中搭建科技信息网。本文尝试利用 Zope/Plone 搭建了集团公司科技信息网,目的是为用户提供科 技信息、学术交流、期刊报纸、科技文摘、电子图书、图片资料、文件下载、全文检索等服务。 
关键词:内容管理   CMS  Zope  Plone  Web 技术    科技信息 

1   前言 
互 联网的发展和应用是内容管理市场的强烈推动力。 8 年前,内容管理( Content Management )的观念开始萌芽。如今,电子商务又变得非常流行,很多企业已看到电子商务的重要作用,开始大力发展电子商务,如 OA 系统、协作工作 平台、协同商务。企业的信息化程度不断加强,越来越多的信息将以数字化的形态呈现在信息处理、交互、传播的过程中。越来越多的媒体和企业已经重新审视自己 所掌握的内容(信息资源),并视手中的信息资源为资产。 
科技信息作为一种重要的信息资源,完全可以利用内容管理系统来进行管理。本文主要探讨内容 管理的基本概念,Zope/Plone 内容管理系统的特点,如何在实践中搭建科技信息网。阐述了利用 Zope/Plone 搭建了集团公司科技信息网,为本 公司级用户提供科技信息、学术交流、期刊报纸、科技文摘、电子图书、图片资料、文件下载、全文检索等服务。系统应用环境:操作系统 Windows 2000 , Web 应用服务器 Zope 2.7.0 ,开发语言 Python 2.3.3 ,内容管理系统 Plone 2.0.3(包括内容管理框架 CMF 1.4.4 )。 
2   内容管理系统( CMS )的概述 
2.1  Web 应用中内容管理的引入 
Web 应用的简要发展历程分为三个阶段:第一阶段,简单的信息发布,品牌推广等;第二阶段,门户功能、销售线索搜集、客户服务、客户关系等自助服务;第三阶段,电子商务 (eBusiness) 等。 
随 着信息量不断增多与 Web 技术的成熟与发展,客户端技术从静态向动态的演进, Web 服务端的开发技术也由静态向动态逐渐发展。 Web 服务端开发技术的完善 也使开发复杂的 Web 应用成为可能, Web 应用也日益复杂, Web 的更新方式也有了较大的变更,其变化主要有三个阶段:第一阶段:静态更新 ( Static ),主要特点有手工编写 HTML 或借用网页制作工具、通过 FTP 上传到服务器上、更新缓慢、容易出现链接错误、对服务器无特别要求等;第二 阶段:实时更新(RealTime ),主要特点有制作模板、使用动态主页技术输出 HTML ( CGI 、 Perl 、 ASP 、 PHP 、 JSP 、 Serverlet)、更新速度非常快、需要服务器上有数据库支持、对服务器资源占用很严重、现在的大多数中小网站广泛采用等;第三阶段:及时更新 ( Just In Time ),主要特点有引入了内容管理系统、自动的内容复制功能、更新及时、不依赖于服务器平台、可有工作流支持、可进行版本控制、易扩展等。 
2.2   内容管理系统 
Web 应用需要一个完整的开发框架或应用模型,有几种主要技术的融合方式,首先,越来越多的 Web 开发环境开始支持MVC ( Model-View- Controller ),提供了全套的开发环境;其次,门户服务( Portal Server )和内容管理系统( Content Management System )成为了应用集成的重点模型。 
2.2.1   什么是内容管理 
内容实质上就是任何类型的数字信息的结合体,可以是文本、图形图 象、 Web 页面、业务文档、数据库表单、视频、声音文件等。应该说,内容是一个比数据、文档和信息更广的概念,是对各种结构化数据、非结构化文档、信息的 聚合。管理就是施加在 " 内容 " 对象上的一系列处理过程,包括收集、确认、批准、整理、定位、转换、分发、更新、存档等,目的是为了使 " 内容 " 能够在正确的 时间、以正确的形式传递到正确的地点和人。 
内容管理是目前业内的一项热门技术和应用。对于这项新兴的技术,业内尚未有一个统一的定义,是协助组织 和个人,借助信息技术,实现内容的创建、储存、分享、应用、更新,并在企业个人、组织、业务、战略等诸个方面产生价值的过程,而内容管理系统就是能够支撑 内容管理的一种工具或一套工具的组合。 
2.2.2   内容管理系统的功能 
如图 1 所示,一个完整的内容管理系统应具有四大功能:内容集成、内容智能、内容管理和内容发布。 

图 1  内容管理系统的功能结构 
( 1 )内容集成:让使用者到不同系统中寻找到不同形式的资料文档,如文档、视频、声频、图形文件等。 
( 2 )内容智能:是内容管理系统的核心功能模块,将内容分类归档,用以帮助使用者快速定位所需内容,按照搜索方法可分为全文搜索、上下文搜索等。现在更先进的检索技术还包括智能化知识检索技术,自然语言查询等。 
( 3 )内容管理:是内容管理系统的主要功能模块,用以提供对内容管理过程的支持,包括: 
l 内容创建和编辑,用以实现各种数据、信息、文档和程序的获取并提供创建内容的协作工具,如文档和网页制作工具,数据转换 (Metadata and XML) 工具等。 
l 内容个性化,内容的个性化是内容管理区别于传统文档管理的一个重要特征,包括根据用户喜好的用户控制个性化、根据内容相关性的数据控制个性化等。 
l 存档管理,用以实现安全存贮、管理各种形式的内容。 
l 工作流,用以实现用户自定义的流程和基于角色的流程控制、审批流程等。 
l 安全控制,包括数据库安全控制、加密,拷贝和传播限制等。 
l 生命周期管理,主要是指对内容版本的控制,如多版本控制、版本跟踪等功能。 
( 4 )内容发布:让所有的使用者在同一个时间接收到信息,包括传统的非 Web 方式的图形用户界面 GUI 以及新近发展起来的企业信息门户等各种方式。 
2.2.3   内容管理系统的分类 
内 容管理系统主要有框架型和应用型。框架型:本身不包含任何应用实现,只提供底层框架,具体应用需要一定的二次开发,如商业软件中有 BEA 的 WebLogic Portal 、 Oracle Portal Developer Kit 、 IBM 的 WebSphere Portal 、 Microsoft 的Content Management Server 等,开源项目中有 Cocoon 、 Zope 等。应用型:本身是一个面向具体类型的应用实现,包含新闻 / 评论管理、图片、文件下载、投票、论坛、 成员管理、 Wiki 等一些子系统。如开源项目中有 PHP-Nuke 、 XOOPS、 Plone 、 Wiki (维基)、 phpBB 等。 
3  Zope/Plone 内容管理系统 
内容管理系统作为当前一种流行的 Web 应用模型, Zope/Plone 内容管理系统是开源项目( Open Source Software , OSS),为我们提供了一个很好的解决方案。 
3.1  Zope 应用服务器 
Zope ( Z Object Publishing Environment , Z 对象发布环境)是下一代开放源码应用服务器以及门户工具,由 Digital Creations 开发,已经拥有一群相当活跃的用户社群。它既可以在所有 Unix/Linux 平台上运行,也能在 Windows 、 Mac OS 上运行,不但能集成到其他流行的 Web 服务器,也带有自己的 Web 服务器, Zope 2.7 可到 http://www.zope.org 下载,安装可参考有关手册。提供了清晰的数据 / 逻辑 / 表示的分离,带有可扩展的内置对象和强大的集成安 全模块。还有大量的第三方产品支持。 Zope 采用 Python 语言编写,在性能敏感的部件上采用了 C 语言编写。 
3.1.1  Zope 的简要特点 
与 其它 Web 应用服务器相比, Zope 可以更好更快的创建 Web 应用程序,主要特点有:免费、一套完整的平台、第三方产品的支持、易扩展、可在大多数操作系 统上运行、高效的协同开发、提供多种和可扩展的安全框架、只使用浏览器就可以创建 Web 应用程序( IE 、 Mozilla 、 Netscape )等。 
Zope 提供了所有必须的工具,能集成来自任何数据源的所有数据和内容,构成一个连续、可维护的 Web 应用,如 Web 服务器、 Web 方式的管理界面( ZMI )、对象数据库( ZODB )、内容管理、内置搜索工具、强大的数据共享、安全授权、版本管理、 XML 的支持等。 
Zope 2.7 应用服务器的管理界面( ZMI )如图 2 所示。 

图 2   Zope 2.7 应用服务器的管理界面( ZMI ) 
3.1.2  Zope 体系结构 
Zope 体系结构如图 3 。 
ZServer ,这是 Zope 内置的 Web 服务器,用于提供内容服务。这个 web 服务器还通过 FTP 、 WebDAV 和 XML-RPC 协议提供服务。 
Web Server ( Web 服务器), Zope 还可以和现有的 Web Server 结合在一起,比如 Apache 或者 Microsoft IIS ,以及其它支持通用网关接口( CGI )的 Web 服务器。 
Zope Core ( Zope 核心),这是 Zope 的核心引擎,它控制如何显示,以及控制管理界面和对象数据库。 
Object Database (对象数据库),使用 Zope 的时候,大多数情况下是在处理存储在 Zope 对象数据库中的对象。 
Relational Database (关系型数据库),数据不一定要存储在 Zope 对象数据库中, Zope 中可以使用其它的关系型数据库,比如 Oracle, PostgreSQL, Sybase, MySQL 等等。 
File System (文件系统), Zope 还可以使用存储在服务器文件系统中的文档和其它文件。 
ZClasses ,可以通过使用 Web 管理界面来添加新的对象。 
Products (产品), Zope 中还可以通过在 Zope 服务器中的文件系统里安装 " 产品 " 文件来添加新的对象。 

图 3   Zope 体系结构 
3.2  Plone 内容管理系统 
Plone 是基于 Zope 系统的优秀开源项目,包括 CMF ,特点是易用、功能强大,可管理发布 HTML 、 Word 、 PDF 等各种类型文档,支持工作流 (Workflow) 、用户管理、新闻 / 事件按排、全文搜索等功能,适合用作搭建对外网站、内部网系统、文档发布、协同群件系统等。 Plone 2.0.3 可到 http://www.plone.org 下载,安装可参考有关手册。 
3.2.1   系统特点 
l 易用: Plone 的开发团队中包括专职的可用性设计专家 , 他们使得 Plone 的添加、修改和维护等操作更加易用,支持结构化文本。 
l 多语言: Plone 界面支持 30 多种语言,系统本身也包括管理多种语言的工具。 
l 标准: Plone 遵循相关可用性标准和可访问性标准开发,支持 IE 、 Mozilla 、 Opera 等浏览器,以及 PDA 等手持设备上的浏览器;支持 HTTP 、 HTTPS 、 FTP 、 WebDAV 、 XML-RPC 等多种标准协议。 
l 开放源代码: Plone 使用和 Linux 相同的许可协议( GPL )。用户可以直接使用 Plone ,而不需要支付任何许可费用 , 并可在其上进行定制扩展。 
l 可扩展:有丰富的第三方产品可供选择,如讨论区、图片库、投票等,可以很容易扩展 Plone 系统,增加新的特性和内容类型。 Plone 本身也是一个开发平台,可使用 Python 、 ZPT 、 DTML 脚本语言进行更多地定制开发。 
l 跨平台、支持多种数据库。 
操作系统: Linux 、 Windows 、 Mac OS X, Solaris 和 FreeBSD ; 
数据库:可同绝大多数的关系数据库系统(开源的和封闭源代码的)进行接口。 
3.2.2   主要功能及第三方应用型产品 
Zope 是一个高可扩展的系统, Plone 作为 Zope 的第三方产品,继承了这个特点,可以在 Plone 的基础上扩展各种应用,可以很轻松地安装和卸载,并可以进行个性化定制。 
Plone 系统本身所具有的主要功能:页面文档管理( Document ),其他形式的内容管理-有图片( Image )、文件( File)、链接( Link )、查询集 ( Topic )、文件夹( Folder )、新闻( News )等,查询检索( Search ),权限管理,工作流系统( Workflow System ),成员管理( Members ),还有评注文档、站点参数配置、第三方产品的安装、定制站点界面等。 
其他第三方产品(可在 http://www.zope.org 下载): 
l 论坛 --CMFBoard 和 CMFForum ,可以设置一个或更多的子论坛;每个子论坛可以设置不同的状态。 
l 图片 --CMFPhotoAlbum 和 CMFPhoto ,建立一个图片集文件夹,可以轻松自如地管理图片,可以添加图片,编辑其属性(主题、描述、上传图片);还可以对图片进行变换(旋转、翻转);浏览图片时可以分页显示。 
l ZWiki--ZWiki 是在 Zope 平台上提供的 Wiki 服务。它在功能上比传统的 Wiki 有所区别,主要有: Wiki 名字的更灵活;可选的标记格式, 如:结构化文本、 HTML/DTML 、 Wiki 标记语言、无格式文本等;页面的层次化,即可以显示出页面创建的级别,可以直接看到包含当前页面的父文档链 接。 
l 文件 -- 由于 Zope 除了对数据库的支持, Zope 还支持文件系统。可以把指定的当地文件系统的文件信息加载到站点中的一个文件夹,也支持 HTTP 上传文件,并对文件添加注释,可创建子目录。 
l 调查 --PlonePopoll ,可以自由地建立各类调查,只要编辑其调查的问题及选择的项目,就可以生成一个调查,每位用户都可以对调查投出唯一的一票;并且可以对调查结果作简要的图形分析,显示投票总数及每个项目的票数。 
3.2.3  Plone 完全支持中文 
Plone 支持中文的目标是:( 1 )界面支持中文;( 2 )支持中文查询;( 3 )其他应用程序也支持中文。 Plone 2.0.3 已默认支持中文(由润普科技 ZopeChina 提供),标准的 Plone 安装后,自动支持中文的界面,但是不支持中文的全文检索,结构化文本也 不太支持中文。根据润普科技 ZopeChina 提供的方案,需要下载 CJKSplitter 和 ZopeChinaPak 的最新版本安装,建立 Plone 站 点时选择 "Default Chinese Plone" 的个性化 Plone 设置,界面即可支持中文。最大特点是支持任意的语言:中文简体、繁体、日本、韩文、欧洲。通过设置,可以让 Plone 支持 中文全文搜索;其他应用程序只要有汉化包也就可以支持中文,即 *-zh-cn.po 或 *-zh.po ,也可使用第三方产品 Localizer 进行本地化。 
4   利用 Zope/Plone 内容管理系统整合科技信息 
4.1   科技信息网项目背景 
科 技信息作为企业一种技术资源,根据企业的发展状况,科技管理主要产生的信息有:科研课题、学术论文、图片资料、期刊图书等,包括文字、图片、图表及视频, 信息资源丰富、内容容量大、借阅访问者多。如何把科技信息通过网络的形式建设成为公司的知识资源开发利用中心,实现上述信息资源的集成与共享,加快公司在 科研、生产和经营方面获取信息的速度。 
科技信息网的规划建设,涵盖了从内容采集、存储管理、编辑审核一直到传递服务的全部内容管理生命周期的管理。整合公司的科技信息资源,提高信息的利用率,最大限度地共享科技信息。 
4.2   基于内容管理技术的系统设计 
建 立科技信息网的目的是为了实现将来自科技管理处各职能室的科技信息(含文字、图片、图表)全部整合,并通过这一系统公司各部门对科技信息的共享。将总体需 求划分为核心应用需求(信息采集、信息分类、信息编辑、信息发布、信息检索、安全管理等)和辅助应用需求(用户管理、日志管理、访问统计、站点调查、信息 提示功能、支持多语言、数据的维护、站点的个性化设置、在线统计、日历等)。 
4.2.1   整体功能框架 
科技信息内容管理系统的整体功能框架如图 4 。 

图 4  科技信息内容管理系统的整体功能框架 
4.2.2   硬件系统结构 
基 于 Zope 架构进行多层体系结构设计,在公司的局域网中可以实现多用户、多操作系统的应用,可以在不同的时间、办公地点进行内容的管理,更有效地整合科技 信息,实时地为用户提供科技信息;系统可以轻松地对对象内容的扩展,增加各种形式的内容。用户只要通过局域网用浏览器就可以浏览信息,硬件系统结构如图 5 。 

图 5   硬件系统结构图 
4.3  Zope/Plone 内容管理系统的配置与应用 
前文提到 Zope/Plone 内 容管理系统的众多特点及功能,并且使用 Zope/Plone 来搭建科技信息网,考虑到信息的多来源、多形式,有图书文献采集的科技文摘、科技活动中产生的 科技信息、科技图书馆的报刊杂志、学术交流活动产生的论文资料(包括 Word )、公司各项活动中荣获的奖励证书图片及科技图片、图书馆的电子图书 ( PDF 、 CEB 、 Word 、 Html)、常用文件下载(应用程序、 Word 资料、各类表格)等。 
4.3.1  Plone 第三产品的安装及应用 
在 Zope 系统中建立一个 Plone 站点,根据 Plone 的基本特性和科技信息网的需求,需要充分了解 Plone 现有的一些第三方产品,建立一套第三方产品 的使用方案。 Plone 默认普通文档主要有页面文档( Document )、事件( Events )、新闻(News ),这些文档都不能很好地与图片、附件等 其他资料混合在一起,很难适应我们具有文本、图片、附件为一体的信息。同时 Plone 没有完整的图片发布与管理产品,当然也没有调查、统计等第三方产品。 可以安装第三方产品,如:PloneArticle ( Plone 文档)、 CMFPhoto 和 CMFPhotoAlbum (图片资料)、 ZWiki 、 ZAAPlugins 和ZattachmentAttribute (附件)、 PloneExFile 、 PloneLoginHistory (登录历史)、 PlonePopoll (调查)、 WhoOnline(在线统计)、 MxmCounter (访问统计)等。 
4.3.2   安全及权限设置 
有了完备的第三方产品后,整个系统的功能基本实现,为了能符合硬件系统机构的要求,每位员工能协同工作, Plone 为用户提供了文件夹的角色分配。内容的所有者可以为其他用户分配角色,即可使多用户对内容进行管理。 
4.3.3   系统的应用 
通过对 Zope/Plone 内容管理系统的合理配置,搭建了一个稳定、高效、安全的科技信息网,如图 6 。 

图 6  科技信息网 
5   结束语 
随 着企业经营模式的变化和技术的不断发展,从内容管理诞生到今天,关键技术的研究侧重于支撑内容管理平台的核心技术研究,主要包括 XML 和元数据技术、工作 流管理技术、应用集成技术以及数据检索和挖掘技术。 Zope/Plone 内容管理系统作为开源项目,正适应内容管理关键技术的发展要求,笔者尝试为企业或 部门建立一个稳定、高效、安全的内容管理系统 --科技信息网。通过基于内容管理技术的科技信息网可以有效管理企业的现有智力资产,保持企业的核心竞争力; 建立学习平台,不断提供员工的素质,提升企业的素质;减少重复劳动,工作都可以在此前积累的基础上继续进行,避免员工或组织内的重复劳动;建立协同工作平 台,提高工作效率。 

参考文献 
[1] (美) H.M.Deitel,P.J.Deitel,J.P.Liperi,B.A.Wiedermann 著,周靖译,《 Python 编程金典》,清华大学出版社, 2003年 6 月 
[2] (美) Roger S.Pressman 著,梅宏译,《软件工程-实践者的研究方法》第五版,机械工业出版社, 2003 年 3 月 
[3] 王咏刚,《 Web 开发技术史话》,《程序员》 2004 年第五期 
[4] 新华社待编稿库项目组,《运用内容管理,整合信息资源》,《中国传媒科技》 2004 年第五期 
[5] 韩啸、曹辉,《内容管理的关键技术》,《中国传媒科技》 2004 年第五期 
[6] http://www.cmswire.com
[7] http://www.zope.org ( Zope 官方网站), The Zope Book (2.6Edition)
[8] http://www.ZopeChina.com ( Zope 中国网站) 
[9] http://www.plone.org ( Plone 官方网站), The Plone Book (2.0 Edition)

8.2 Zope/Plone 内容管理系统的探讨与应用

比较对象: 
1. drupal 6.1 
2. joomla!1.51 
3. Mambo 4.6.1 
4. PHP Nuke 6 
5. Plone 3.0 
6. Xoops 2.0.18
http://www.ncnynl.com/xoops2016u/modules/article/view.article.php/c2/98/p0

结论

优势:
    1 )基本上不用二次开发,直接就能用,这点不错。不像基于 JAVA 的一些开源 CMS 如 OpenCms 之流背着 CMS 的名字实际上要开发的东西挺多的。
劣势:
1 )数据库采用 ZODB 数据库 , 它与关系型数据库如何交换数据需要花精力进一步研究。
2 )虽有汉化包 , 但打上了润普公司的图标 , 碍眼,不爽。
3 )国内支持 plone 的域名比较少见,要想玩,我还得自己在家建个服务器,机器 24 小时开着太吵睡不着觉不现实。
4) 是基于 python 的,虽然看了一下也不算难,但毕竟不是平时工作用的语言,不用它过两天就忘记了,所以得持续投入精力,真正要用它这点得考虑。
普通分类: