EZ Publish/EZ Publish内容管理(一)

来自站长百科
跳转至: 导航、​ 搜索

EZ Publish | EZ Publish安装与卸载 | EZ Publish的使用 | EZ Publish常见问题 | EZ Publish其他

内容管理概述[ ]

内容管理系统的角色是一个负责组织和保存任何类型和复杂度内容的系统。这样一个系统的主要目标是提供一个结构清晰,自动且灵活的解决方案来保证信息可以在各种不同的沟通渠道(如:互联网,内部网以及其它各种前台和后台系统)间自由地发布并持续地更新。本章描述了eZ Publish 如何真正地处理内容。

典型的例子

让我们想象这样一个场景:一所大学需要保存学生相关的信息。大多数内容管理系统会提供一系列内建的内容类型。这些内容类型中,可能有一种称为"Person"的类型。这种内容类型可能由诸如“姓名”,“生日”,“电话号码”等等属性构成。然而,实际的学生信息可能无法完全匹配那些预定义的模型,因为学生信息可能包含一些大学特有的信息(如:学号,部门等等)。尽管某些系统允许创建自定义的结构,其解决方案往往过于复杂也费时费力。可能需要同时修改代码与数据库。此外,一旦应用了这种方案,系统日后的维护很可能会成为一个问题。

eZ Publish 中的内容管理

与其它系统不同,eZ Publish 并不使用预定义的“一劳永逸”的解决方案。与绝望地试图将数据填入预定义的结构中相反,eZ Publish 允许以面向对象的方法创建自定义的结构。例如:站点开发人员可以开发自定义的内容结构来完美的匹配大学的内容存储需求。这是令eZ Publish 成为一个灵活,成功系统的一个重要特性。除提供自定义结构的自由度以外,eZ Publish 还允许在运行时修改内容的结构。换言之,如果此例中的学生结构需要修改,eZ Publish 会根据管理员的指令自动对其进行修改。

尽管创建和修改内容结构的可能是一种不错的特性,并不是总需要用到这种特性。因此eZ Publish 的发行版本中会内建若干预定义的内容结构并因此允许开发人员做以下选择:

• 使用标准/内建的结构

• 使用修改过的标准/内建的结构

• 只使用自定义的结构

• 使用标准,修改过的与自定义的结构的组合

面向对象的内容结构

eZ Publish 内容结构基于面向对象世界中那些流行的编程语言Smalltalk, C++, JAVA 等)中的编程思想。总体来讲,面向对象意味着任何事物均为对象。在显示生活中,我们周围存在着很多对象:家具,汽车,宠物,人类等等。每种对象都有区别于其它对象的特性。这也是eZ Publish 定义与管理内容的方法。系统提供了一系列基础的单元与机制来共同提供一种灵活的内容管理解决方案。真实的数据结构由内容类定义。内容类由属性构成。一个属性可以被想象成为一个字段,例如:在用于保存学生信息的结构中的“生日”字段。对整个学生的描述将会被定义为“学生类”。一个类属性的特性由代表这个属性的数据类型决定。

理解内容类只是某种结构的定义非常重要。换言之,内容类本身描述内容结构却并不保存任何真实数据。当一个内容类被定义之后,您可以创建这个内容类的实体。一个内容类的实体被称为内容对象。真实的数据被保存在不同类的内容对象中。一个内容对象包含一到多个版本。版本这一层次允许为相同内容保留多个版本。每个版本包含一个至多个翻译。翻译层次允许为同一个内容的同一个版本创建多种语言的版本。一个翻译由多个属性构成。属性是内容结构链中的最后一级,这里才是真正保存数据的地方。

内容对象被关联至节点。节点被系统以树状结构的形式组织并保存。这种树状结构常被称为节点树。

数据类型[ ]

数据类型是最小的存储单元。它定义了某种特殊类型的信息因该如何被验证,保存,格式化等等。eZ Publish 内建了一套基础数据类型,可以用来构建功能强大,复杂的内容结构。此外,可以开发自定义的数据类型对系统进行扩展。自定义的数据类型必须用PHP 开发。然而,内建的数据类型已经足以满足各种典型的应用。下表列出了eZ Publish 内建的最基本的数据类型。

数据类型 描述
文本行 保存单行純文本
文本块 保存多行纯文本
XML块 验证并保存多行XML内容
整数 验证并保存一个整数
浮点数 验证并保存一个浮点数
  • 此外,附加的数据类型可以从http://ez.no/community/contribs/datatypes下载;他们由eZ Publish 社区用户创建。
  • 如上表所示,某些数据类型不止负责保存数据。
  • 例如:“XML 块”显然支持内容验证。这意味着输入的XML 会被经过验证才会写入数据库。
  • 换言之,只有XML 是合法的,系统才会接受并保存输入的数据。大部分(不是所有)内建数据类型都支持输入验证。输入验证不能被启用/禁用。
  • 换言之,如果某个数据类型刚好支持输入验证,它将会一直验证输入的数据,因而系统永远都不允许非法的数据保存如这种数据类型中。

内容类[ ]

内容类定义了某种特殊的数据结构。它本身并不保存任何真实数据。内容类由属性构成。属性的特性由属性对应的数据类型决定。通过组合不同的数据类型,可以描述复杂的数据结构。下图演示了一个称为“文章”的类,它定义了用于保存新闻文章的数据结构。它由用于保存标题,简介文字和主体内容的属性构成。

属性构成

eZ Publish 发行版本内建了一套一般用途的内容类,这些类可以用于典型的WEB 应用。例如:默认的图像类定义了用于图像文件的结构。它由用于保存图像名称,图像文件,标题与ALT 文本的属性构成。内建的类可以被修改以更好地适应特殊用途。此外,也可以创建新的内容类。内容类在可以在管理界面简单地被创建,修改,删除。当一个内容类被删除,所有这个类的实体(包含真实数据)也会被从系统删除。下图演示了内容类的编辑界面。

内容类编辑页面

类结构

内容类由以下元素构成:

  1. 类名
  2. 标识符
  3. 对象名模式
  4. URL 别名模式
  5. 容器标记
  6. 默认子节点排序规则
  7. 默认对象可用标记
  8. 属性

类名

类名用来为类保存一个用户友好的名称。类名可以由字符,数字,空格和特殊字符构成。类名最大长度为255 个字符。例如:如果一个类定义了关于毕业学生的数据结构,这个类可以被命名为“毕业学生”。类名用于在管理界面中各种有关类的列表中显示,但是系统内部并不使用类名。如果类名为空,系统会在保存类定义的时候自动为类分配一个唯一的类名。

标识符

标识符用于系统内部,特别是在配置文件,模板和PHP 代码中使用。类标识符只可以包含小写字符,数字和下划线。标识符的最大长度为50 个字符。例如:如果某个类定义了关于毕业学生的数据结构,标识符可以为"graduate_student"。如果类标识符为空,eZ Publish 会在保存类定义时自动为其分配一个唯一的标识符。

对象名模式

对象名模式控制内容类对象(实体)的名称应该如何生成。模式通常由属性标识符构成。通过这种方式要求eZ Publish 哪些属性应该被用来生成对象名。每个用到的属性标识符都应该由尖括号环绕。尖括号外的文本会被直接包含在生成的对象名中。如果对象名模式为空,eZ Publish 会默认使用第一个属性标识符来定义对象名模式。

URL 别名模式

URL 别名模式控制在对象(类实体)被创建时,对象节点的虚拟URL 应该如何被生成。注意,URL 别名模式只影响虚拟URL 的最后一部分。URL 别名模式与对象名模式的工作原理相同。尖括号外的文本会根据指定的URL 变换方法进行变换。如果URL 别名模式为空,eZ Publish 会使用对象名。

容器标记

容器标记控制是否允许这个类包含子项目(常被称为子节点)。这个设置只影响管理界面,目的是希望为管理员和编辑提供更方便的工作环境。换言之,它并不控制任何实际的底层逻辑,只是控制管理界面的显示方式。

默认子节点排序规则

从eZ Publish3.9 版本开始,您可以在编辑类的时候同时指定默认的子节点排序规则。当创建了新对象之后,它们对应的节点在左侧的节点树中显示的时候,它们会根据其父节点类定义中的子节点排序规则来排列。换言之,如果设置“文件夹”类的默认子节点排序规则为“按优先级升序”,那么在文件夹下新创建的子节点会按照它们的优先级升序(由小到大)排列。

注意:可以通过子节点窗口中的排序控件每个节点单独指定子节点排序规则。修改类级别的子节点排序规则不会影响到那些已经存在的节点(只对新创建的对象有效)。

默认对象可用标记

这个标记与都语言特性(自eZ Publish3.8 开始)有关。它只用于标记新类实体(对象)的可用性。可以进一步(在对象级别)控制这个标记,可以通过管理界面中“翻译”窗口中的“使用主语言如果没有优先翻译”复选框来控制。换言之,可以单独指定每一个对象的对象可用性。如果设置了这个标记,当对象没有可用的翻译时,会使用对象的初始/主语言来显示对象。如果没有设置这个标记,当对象没有可用翻译时,对象不会被显示。

属性

如前所述,在内容类中,真正构成数据结构的是属性的结构和类型。一个内容类至少有一个属性。另一方面,理论上内容类的属性数是没有限制的。任何时候,都可以通过管理界面创建,删除或重新排列类属性。如果添加了一个类属性,所有这个类的现存对象和新对象都将拥有这个新属性。如果一个类属性被删除,它也会从所有对象中消失。

尽管可以通过管理界面删除和添加属性,在某些情况下这种操作会导致数据库崩溃。这种问题往往由于太多对象需要更新。如果程序的处理时间超出PHP 的最大执行时间,处理流程会被中断而数据库会处于不稳定的状态。在写本文档时候,这个问题可以通过增加PHP 的最大执行时间来解决。可以在"php.ini"中修改"max_execution_time"。默认值为30 秒,应该修改为若干分钟。另外一种更可靠的解决方案(通过一个PHP 脚本在命令行删除/添加类属性)可能在将来增加到系统中。

类属性[ ]

类由类属性构成。每个类属性由一种数据类型代表。每个类属性的特性有它的数据类型决定。属性由以下元素构成:

• 属性名

• 标识符

• 一般控件

• 数据类型相关控件

属性名

属性名为属性保存用户友好的名称。例如:如果一个属性用于保存生日,这个属性可以被命名为“生日”。这个名称会在管理界面中各种与类属性有关的页面中显示,但不会在系统内部使用。属性名可由字符,数字,空格和特殊字符构成。属性名的最大长度为255 个字符。如果属性名为空,eZ Publish 会在保存类定义的时候,为其自动分配一个唯一的属性名。

标识符

属性标识符在系统内部使用。特别是在配置文件,模板和PHP 代码中使用。属性标识符只能包含小写字符,数字和下划线。属性标识符的最大长度为50 个字符。例如:如果某个类属性用于保存生日,它的标识符可以为"date_of_birth"。如果属性标识符为空,保存类定义的时候,eZ Publish 会为其自动分配一个唯一的标识符。

一般控件

没个属性都有一套一般控件。对于所有的属性,这些控件均相同,无论(但并非毫无关系)属性为何种数据类型。一般控件是一套可以被开启或关闭的开关:

• 必填项

• 可检索

• 信息收集器

• 可翻译

必填项

必填项开关控制内容对象(内容类实体)的保存流程。无论属性为何种数据类型,均可以使用这个开关。当对某些属性启用必填项开关,系统会拒绝保存对象直到所有的必填项都被输入内容。如果必填项开开关被关闭,eZ Publish 不会关注属性中是否有输入。新属性的必填项开关默认是关闭的。请注意,无论必填项开关启用与否,系统还是会根据属性数据类型的验证规则验证输入的数据。大部分(不是全部)内建的数据类型都支持内容验证。下例演示了这些特性如何工作。

假设定义一个类用来保存囚犯数据。类属性如下:姓名,编号,生日,监号,管区等等。如果至少把姓名和生日设置为必填项,就可以减少数据错误的可能。如果生日属性使用内建的“日期”数据类型,系统会验证输入的日期格式。

可检索

这个开关可以控制这个属性中保存的数据是否可以被内建的检索引擎编入索引。大部分内建数据类型都支持索引。 信息收集器

这个开关可以控制属性在显示模式中的行为。默认的显示模式行为是回显编辑模式中输入的内容。例如:查看一篇文章的时候,文章的内容可以显示,但不能编辑。但是,如果属性被标记为信息收集器,在显示模式中,可以为这个属性输入内容。这种起初令人费解设计其实很实用。

比如:可用来快速创建反馈表单。表单被提交后,提交的内容可以以邮件形式发送给系统管理员或其他帐号。只有一小部分内建数据类型支持信息收集器。下例演示了如何用这种技术创建反馈表单。

假设已创建了一个类“反馈表单”,属性如下:名称,标题,反馈内容。将标题和反馈内容标记为信息收集器。当显示这个类的实体(对象)时,标题和反馈内容会被显示为输入框,另外页面会有一个提交按钮。

可翻译

这个开关控制属性的数据应该只存在一种语言(默认语言)版本还是可以被翻译为多种语言版本。翻译机制与数据类型无关。换言之,这个开关对任何数据类型都有效。

新建属性的这个属性默认为开启。这个开关的用处主要是对某些属性禁用翻译。比如:翻译日期,数字,价格,电子邮件等属性的意义就不大。

数据类型控件

除了一般控件外,某些数据类型还有一些附加的控件。某些数据类型允许定制,某些不允许。例如:内建的“文本行”数据类型有两个设置:默认值和最大长度。

内容对象[ ]

内容对象是内容类的实体。类只定义了内容结构,数据保存在内容对象中。内容类定义后,可以创建这种类的对象(实体)。例如:定义了存储新闻文章的类以后,就可以创建若干新闻文章对象(每个对象保存着不同的文章内容)。下图说明了数据类型,属性,内容类和内容对象间的关系。

内容类和内容对象间的关系

注意:上图是一个简化版本。它没有体现对象的全部结构,因为版本和翻译层次被省略了。以下内容更深入地探讨了内容对象结构。版本和翻译层次会在稍后的章节解释。

对象结构

内容对象由以下元素构成:

  1. 对象ID
  2. 对象名
  3. 类型
  4. 属主
  5. 创建时间
  6. 修改时间
  7. 状态
  8. 分区ID
  9. 版本
  10. 当前版本

对象ID

每个对象都有一个唯一的数字ID。系统用这个ID 来组织和标识不同的对象。这些ID 不会循环使用。换言之,如果对象被删除了,这个对象的ID 不会被其他对象使用。

对象名

对象名只是对象的一个用户友好的名称,对象名在管理界面中各种与对象有关的页面中显示。对象名帮助用户通过名称而不是对象ID 来定位对象。发布对象时,对象名会被自动生成。对象名的生成规则有对象名模式定义。对象名模式允许用对象属性生成对象名。因为对象名不用于系统内部,对象名可以重复。

例如:编辑新闻文章时,文章标题很适合用于生成对象名。发布文章时,文章对象名与标题相同。每次发布对象时,对象名都会被重新生成。换言之,如果标题改变了,对象名也会相应变化。

类型

类型表示对象的类。

属主

对象的属主包含到首次创建对象的用户的引用。任何时候,一个对象只能属于一个用户。对象第一次被创建时,系统会设置属主。属主不能被编辑,而且即使对象属主对应的用户被删除,属主也不会改变。

创建时间

创建时间是对象第一次被创建时的时间戳。创建时间由系统设置并不能被修改。无论对象作何改变,创建时间都不会改变。

修改时间

修改时间记录对象最后被修改时的时间戳。这个信息由系统设置而且不能被修改。对象每次被修改时,修改时间会改变。

状态

显示对象的状态。有三种状态:

• (0)草稿

• (1)发布

• (2)归档

新创建的对象,状态为“草稿”。在对象被发布之前,它的状态一直是“草稿”。发布之后变为“发布”状态。发布之后,对象不能变回“草稿”。当发布的对象被移入回收站后,状态变为“归档”。如果对象被从回收站删除(或直接删除而不放入回收站),对象会被物理删除。

分区

分区ID 显示对象属于哪个分区。每个对象只能属于一个分区。通过指派不同分区,逻辑上可以将对象分成很多组。

版本

真正的数据保存在不同的版本中。一个版本可以被想象为属于某个用户的某个时间戳的数据(对象属性)集合。每次对象的内容被编辑时,系统会创建一个新版本。被编辑的永远是最新的版本。当前/发布的版本与以往的版本都不会被修改。这样用户可以撤销修改。对象总是至少有一个版本。每个版本有一个唯一的版本号。每个新版本会被系统自动分配一个自增的版本号。版本机制在下一章详细讨论。

当前版本

当前版本是当前发布版本的版本号。如上所述,对象可以有多个版本。但是其中只有一个版本可以是当前版本(也被称为发布版本)。当前/发布版本是用于显示的版本。

对象版本[ ]

eZ Publish 有一套内建的对象版本系统。这种机制允许对象内容(属性)有多个版本。它基本上提供一种一般的,可以直接使用的版本控制框架。这种机制可用于任何内容。不同的版本被封装在对象内。下图演示了更详细的对象结构。

对象结构

每次对象被编辑,系统都会创建一个新版本。被编辑的永远都是最新的版本,旧版本不会被改变。eZ Publish 是这样保留不同用户的修改。用户可以很容易的撤销修改并恢复到之前的版本。

版本限制

由于每次修改都会产生一个新版本(除非新版本被放弃),数据库会很快被不同的版本充满。为了防止这种情况,版本系统可以被限定为每个对象最多允许保留若干版本。可以为不同的对象(类)设置不同的版本限制。默认的限制为10,就是说每个对象最多保留10 个版本。达到这个限制后,最旧的版本会被删除,空出的位置可以用于保留新版本。这是默认的行为。您也可以设置当版本限制达到后,之后手动删除某个版本后,才能创建新版本。

版本结构

版本由以下元素构成:

  1. 版本号
  2. 创建时间
  3. 修改时间
  4. 创建者
  5. 状态
  6. 翻译

版本号 每个版本都有一个唯一的版本号。系统用版本号组织和保管不同版本的对象。对象内每个版本的创建都会被分配一个自动自增的版本号。

创建时间

创建时间包含版本被创建时的时间戳。它由系统设置且不论版本作何改变均不会改变。

修改时间

修改时间包含版本最后被修改时的时间戳。每次版本被保存或发布,系统会设置它。当版本被发布时,对象的修改时间也会被修改(简单地设置为与版本的修改时间相同)。

创建者

版本的创建者包含一个到创建版本的用户的引用。尽管一个对象只能属于一个用户(由“属主”字段表示),每个版本却可以属于不同的用户。版本被创建时,系统会更新版本的创建者。它不能被修改且即使创建者帐号已经被删除也不会改变。

状态

版本有五种状态:

• 草稿(0)

• 发布(1)

• 待定(2)

• 归档(3)

• 拒绝(4)

在eZ Publish3.8 以后的版本,还有另外一种可能:如果版本被创建但是没有被修改(例如:某人点击了“添加评论”按钮但是没有真正提交),版本的状态将转为“内部草稿(5)”。在管理界面中,状态"5"被称为“为修改草稿”。从3.9 版本开始,可以设置内部草稿被保留的天,小时,分钟和秒。超过这个限制的内部草稿可以用"internal_drafts_cleanup.php"cronjob 脚本来删除。另外一个cronjob 脚本"old_drafts_cleanup.php"可以被配置用来删除已经存在了特定时间的状态为"0"的草稿。

新创建的版本是一份草稿。这个状态会一直保留直到版本被发布。尽管对象可以有多个版本,但是只有一个发布版本(其余的版本通常为草稿或归档)。发布的版本可以为认为是当前版本且它是对象显示的时候用到的版本。发布的版本不能再次称为草稿。但是当另外一个版本被发布时,它将变为归档。下图演示了版本系统如何工作。

版本系统的工作

上图演示了内容对象最常见的状态。

  • 当新对象被创建(第1 步),eZ Publish 会同时创建一个新的草稿版本。由于对象还没有被发布,它的状态被设置为草稿且当前版本为之。
  • 保存草稿(第2a 步,第2b步)不会改变对象的状态。唯一会发生的事情是内容被保存至版本1。如果草稿(唯一存在的版本)被放弃,对象即被物理删除(第2c 步)。
  • 当草稿被发布(第2 步),草稿和对象的状态都被设置为发布。此外,当前版本号被设置为1,意味着对象当前发布的版本为版本1。发布后,对象内容可以被其他人查看。
  • 发布的对象可以被移入回收站或删除(第3a 步)。当被移入回收站,对象的状态被设置为“归档”。对象可以从回收站恢复,恢复后的状态为移除前的状态(状态被重新设置为发布)。
  • 当发布的对象被编辑(第4 步)时,当前版本(这个例子中,版本1)不会被修改,一个全新的版本会被创建。新版本(版本2)的内容直接从版本1 复制。
  • 同样,保存草稿(第4b 和4c 步)不会改变对象的状态。
  • 如果草稿被放弃(第4a 步),它会被物理删除,因而对象会恢复到编辑之前的状态。如果新创建和编辑的草稿被发布,它会成为对象的当前版本,因而之前的版本(在本例中,版本1)会被设置为“归档”。
  • 第5a 步,演示了如果对象(现在有两个版本)被移入回收站会发生什么。

待定和拒绝状态在协作系统中使用。当一个版本等待编辑的审批时,状态被设置为待定。如果版本得到批准,它会被自动发布,因而状态被设置为发布。反之,如果待定版本被编辑拒绝,状态被设置为拒绝。只有草稿才可以被编辑且一个版本只能被版本的创建者编辑。此外,被拒绝的版本也可以被编辑。被拒绝的版本被编辑时,会重新变为草稿。发布和归档版本不能被编辑。但是,可以复制它们。当发布或归档版本被复制时,附件被设置为草稿,因而可以被编辑。如果新草稿被发布,系统会自动将前一个发布版本设置为归档且新草稿会成为发布版本。

翻译

版本的内容实际上保存于不同的翻译内。翻译是信息在某种语言的表现。换言之,翻译层次允许对象的某个版本存在于多种语言中。版本总是至少有一个内容的翻译(代表默认/标准语言的内容)。


多语言[ ]

除版本系统外,eZ Publish 的内容模型还提供了内建的多语言框架。这个特性允许对象的内容存在于多种语言中。系统同时支持多达30 种不同的语言。

多语言特性提供了一种一对一的翻译机制,可用于翻译任何内容。一对一的翻译方案可以确保内容得到精准的翻译。例如:如果一篇新闻文章的内容存在于英文,挪威语和匈牙利语(同样的内容,不同语言的翻译),我们说我们有对于这篇文章的一对一翻译。翻译机制完全独立于数据类型。换言之,无论内容为何种数据类型,均可以被翻译。可以以一种语言作为开始,然后在需要的时候添加其它语言的翻译,从而扩展目标用户的范围。

下图演示了一个有两个版本的对象。每个版本存在于若干语言中。语言在这里常被称为翻译。

两个版本的对象的对比

如上图所示,每个版本可以有不同的翻译。至少,一个版本总有一个翻译(初始/主翻译)。初始/主翻译不能被删除。但是,如果对象存在于多个语言中,可以选择哪个语言是初始/主翻译,从而可以删除之前的初始/主翻译。

注意:从3.8 版本开始,当用户编辑对象时,并不是整个版本被编辑,而是版本和翻译的组合得到编辑。这种方案避免锁定整个版本(包含所有翻译),因而允许多个翻译者同时对同一个对象进行不同语言的翻译。

全局的翻译列表 对象只可以被用全局翻译列表中的语言编辑/翻译。默认情况下,这个列表包含我们在安装向导第6 步选择的语言。站点运转后,仍然可以添加附加的语言。下图演示了管理界面中的全局翻译列表(在“设置”和“语言”下)。

全局翻译列表

全局翻译列表只是保管了允许用户用于内容编辑和翻译的语言。添加到这个列表中的语言即可使用。从3.8 版本开始,除非某种语言没有被任何对象使用,否则不允许删除这种语言。全局翻译列表支持多达30 种语言。

3.8 和早期版本的区别

在3.7 和早期版本中,对象必须先被创建为主语言,才能进行翻译。多个翻译者不能并行工作因为编辑流程锁定整个版本也包括所有翻译。

在3.8 版本中,再没有主语言的概念,因而对象可以用任何语言创建。这意味着,您可以有一些文章只有英文翻译,而另一些文章只有挪威语的翻译。多个翻译者可以并行工作因为当编辑对象时,他们实际上在编辑翻译本身而不是整个版本。这意味着,如果您已经写了一篇英文文章,其他翻译者可以并行地为这篇文章添加附加的翻译(例如:匈牙利语,挪威语和俄语)。他们再也毋需等待因为他们可以同时对同一个对象同一个版本的不同翻译进行编辑。但是,这也意味着用户再也不能同时处理多个翻译。真正的问题在于,用户必须离开编辑界面才能添加(然后编辑)新的翻译。此外,还有其它一些影响。比如:除非用户在编辑对象的第一个版本,否则用户不能在编辑界面中修改对象的位置。但是,位置仍然可以在非编辑界面中的“位置”窗口内修改。无论何时,当对象被发布时,系统会自动收集所有之前版本中的最新翻译,然后把这些翻译放置到发布版本中。结果是发布的版本包含了所有最新的翻译。对象的内容可以被翻译为最多30 种语言。

多语言类

从3.9 版本开始,类名与类属性名也可以被翻译。换言之,例如:您可以用"Car"和"Bil"定以同一个类的英文名和挪威语名称。同时也可以用"Top speed"和"Topphastighet"给同一个属性命名。

不可翻译的属性

类定义数据结构,属性定义类,数据结构定义属性。类属性可被设置为可翻译或不可翻译。如果一个属性可以被翻译,在编辑这个类的对象时,系统会允许对这个属性进行翻译。典型的属性为包含真正文本的属性。例如:一篇新闻文章的正文部分可以被翻译为多种语言。但是,某些属性却不适合被翻译。典型的属性如:没有文本的图片,数字,日期,电子邮件等等。此类属性可以被设置为不可翻译,因而它们的内容可以从初始/主翻译直接复制。复制的内容不能被编辑。

例如:假设我们需要用多种语言保存家具信息。我们可以用以下属性创建家具类:名称,图片,简介,高度,宽度,深度和重量。显然,除了简介以外,对其它属性的翻译并没有意义。换言之,名称,图片,高度,宽度,深度和重量对于例如:英文和挪威文是一样的。不同计量单位之间的转换需要在模板中完成。

访问控制

可以控制是否允许某个用户(或某组用户)翻译内容。这个策略可以在类,分区,语言和属主级别上控制。值得一提的是,语言限制可以控制哪个用户(或用户组)可以用不同语言编辑/翻译内容的不同部分。此外,也可以控制到全局翻译列表的访问。这允许除系统管理员以外的用户在全局级别上添加和删除翻译。

参考来源[ ]

EZ Publish使用手册导航

EZ Publish安装卸载

EZ Publish正常安装 | EZ Publish手动安装 | EZ Publish自动安装 | EZ Publish安装向导 | EZ Publish虚拟主机设置 | EZ Publish使用扩展 | EZ Publish的卸载

EZ Publish的使用

模板使用:

EZ Publish节点模板 | EZ Publish系统模板 | EZ Publish Pagelayout页头信息 | EZ Publish Pagelayout变量 | EZ Publish 模板注释 | EZ Publish 模板变量类型 | EZ Publish 模板变量用法 | EZ Publish 调查数组和对象 | EZ Publish 模板控制结构 | EZ Publish 函数与操作符 | EZ Publish URL处理 | EZ Publish 内容提取 | EZ Publish 模板重设系统
系统功能: EZ Publish 系统记帐 | EZ Publish 策略功能 | EZ Publish 多语言使用(一) | EZ Publish 多语言使用(二) | EZ Publish 集群的使用 | EZ Publish 安装包的使用 | EZ Publish Cronjob脚本的使用 | EZ Publish 多货币功能 | EZ Publish 通知功能
其他功能: EZ Publish 增值税(VAT)系统 | EZ Publish 改进的商品配送系统 | EZ Publish 多语言URL别名 | EZ Publish 登录后高级重定向 | EZ Publish 检索引擎 | EZ Publish WebDAV | EZ Publish 视图缓存

EZ Publish常见问题

EZ Publish 安装常见问题 | EZ Publish 使用常见问题

EZ Publish其他

EZ Publish内部结构 | EZ Publish内容与界面 | EZ Publish内容管理(一) | EZ Publish内容管理(二) | EZ Publish配置模型 | EZ Publish模块与视图 | EZ Publish URL 翻译 | EZ Publish 界面 | EZ Publish访问控制 | EZ Publish网络商店 | EZ Publish工作流