跳转到主要内容
qingkong 提交于 5 June 2014

原文链接:Entity Construction Kit: What It Is and When to Use It

译者:晴空

备注:Entity Construction Kit(即:ECK模块,中文可译为:实体创建工具)

你可能已经读过或者听过Drupal中的实体(entity),但还不完全确定它们是什么以及如何使用它们。我在此清晰说明一些相关术语,并给出一个用新创建的自定义实体代替节点和内容类型的实际案例。

Project Page: http://www.drupal.org/project/eck/

当前版本:2.x

对于那些非常熟悉实体和节点的读者请直接阅读下面的段落“什么时候应该用自定义实体代替节点”或者“如何使用ECK模块”。你也可以直接阅读“用views显示实体”的部分。

ECK模块提供创建和管理拥有自定义属性的实体类型的功能、在实体类型中添加bundle、在Field UI模块的协助之下,往bundle中添加字段。

什么是实体?

相对于Drupal6,Drupal7有一个巨大变化,它改变了我们看待Drupal事物的方式。实体概念的引入带来了巨大的灵活度。Drupal官方文档中关于实体的表述(Drupal's documentation on entities):“一个实体是一个特定的实体类型的一个实例,如一段评论,一个分类术语或一个用户或一个bundle(如一篇博客文章,文章或产品)。”所有的节点(node)都是实体,并且它们的内容类型就是它们的bundle。节点是Drupal的第一级实体。节点的许多属性和行为是直接写在Drupal核心里的。许多贡献模块创建和操作节点使它们具有更加复杂的特性。贡献模块可以添加新的bundle(内容类型),附加字段到现有节点,并改变现有的属性。任何Drupal站点都是建立于这些基本行为之上的。

实体可以被添加字段。因此网站开发者可以通过添加字段的方式来为实体添加额外的属性。“关于实体,必须清楚,字段可以被添加到任何bundle(或者内容类型)里,并以此来管理他们的数据”。字段包含的数据可以是日期,文字以及数字。实体也支持视图模式并且可以用各种不同的形式显示在页面上。

我什么时候应该用自定义实体代替节点?

实体的核心代码里并没有定义很多东西,但是这是一件好事儿。因为有的时候你并不需要节点的全部属性及功能,你只需要一种更简洁的方式来存储一些数据。这个时候,一个新定义的实体就是你最好的选择。

举个例子,如果你的网站把Twitter的推送数据导入到一个内容类型里,并且用一个视图把他们显示到侧边栏的一个区块中,你就会发现有些多余的东西。因为Twitter的推送数据被保存到一个内容类型,Drupal的默认内容列表页面将会充斥着永远不会被编辑的推送节点。每则推文也将有一个对应的完整路径和页面。一般来说一条推文独占一个网页是没有意义的,虽然可以过滤节点的内容列表不把推文显示在对应的页面里,但是最好的办法是从一开始就没有这些额外的东西。

你可以使用一个新的自定义实体存储Twitter的推送数据以避免上述问题,并保持你的网站简洁。新的自定义推送实体类型可以用少量的几个字段来存储Twitter的用户,推文内容,以及一个能返回到原始地址的链接。这些新的简单的推送实体将可以用views来控制。你仍然可以使用views来创推送模块。以及通过entity reference field引用这些推文到特定的节点。

实体非常灵活,并且由Drupal核心全面支持。不幸的是,Drupal 7并没有提供一个可以直接上手的方案,让用户可以通过界面来创建内容类型和节点那样来创建自定义实体。为了实现类似的目的,你需要使用ECK模块

如何使用ECK模块

首先在官网上下载ECK模块及其需要的所有支持模块。将它们放入你的Drupal站点相应文件夹中并启用。

启用之后你会在admin/structure中看到一个新的选项"Entity Types"。导航到这个页面。

Entity Types(实体类型)

在这个例子中我们要创建一个水果的实体类型,其中包括一个苹果bundle和一个香蕉bundle。苹果bundle和香蕉bundle都具有水果实体的所有属性,但是还具有一些他们各自特有的属性。首先,你需要创建水果实体类型。点击“创建实体类型”链接。

填写创建实体的表格并选择水果实体类型的标题属性。这将为所有bundle(苹果和香蕉)提供一个标题字段。默认情况下,水果的实体类型里面会创建一个水果bundle,但是如果你知道你将使用这个实体类型中的哪个bundle的话,你可以一开始就填写一个具体的bundle名称。在这个例子中我们可以在这个字段中填写苹果或香蕉。

Add bundle

现在,您已经创建了一个包含水果bundle的水果实体类型,我们需要创建其他的bundle并给他们附加一些字段。在实体列表页面(admin/structure/entity-type)点击实体的标题(水果),导航至实体bundle列表页。当您第一次来到这个页面,你应该只能看到一个bundle类型的水果。点击“添加bundle”链接来创建新的苹果和香蕉bundle 。

Add bundle

现在,新的bundle已经创建好了,但是他们只有一个标题字段。这可能在某些情况下够用了,但我们想用这些实体存储更多的数据。为了实现这个目的,我们可以添加一些字段。就像使用内容类型一样,我们通过“管理字段”选项卡管理字段。点击这个标签,添加一些字段。内容类型中的那些可用的字段也可以被用在你自定义的实体中。

Manage Fields

添加字段:

为你的两个bundle类型都添加上相应的字段。苹果和香蕉可以有自己的字段。这些各自的字段不需要一致。一旦你为两个bundle都添加一些字段,创建一些苹果和香蕉的实体。他们将出现在各自bundle列表页面的内容清单上(admin/structure/entity-type/fruit/apple)。现在,您已经创建了 自己的自定义实体,并且有了一些可用的样本。至于要如何使用它们就由你决定了。一个常见的用法是在views页面或区块中显示它们。views和实体一起使用非常容易上手。

我如何用views显示实体?

Views和实体的搭配非常实用方便,views提供的配置界面就可以很容易的配置它们。请先确认你已经安装并启用了views和views_ui模块,然后导航至添加新view的页面(admin/structure/views/add)。在显示中你可以找到你自定义的实体类型,你可以在下面的截图中看见。

Create Fruit View Page

一旦你选择了水果作为显示内容,你就可以添加一个苹果bundle的过滤条件。现在你就可以创建苹果的views了。

Example Selection:

Select fields

在这个例子中一旦你选择水果作为实体类型并把苹果作为bundle类型,你可以把剩下的设置为默认。我们将在下一个屏幕继续配置。点击“继续编辑”按钮进入视图配置页面。在下面的截图中我选择了默认区块显示并设置格式显示为:渲染实体(Rendered entity)。这样配置的话,当我们创建实体bundle的时候,实体会被按显示设置的方式渲染出来。如果你只想使用几个实体中的字段的话,你可以选择“字段”。一旦你配置好你的视图单击保存并审查页面输出。

Fruit View Admin Page

多个选项

这个页面显示了水果页面渲染的苹果(水果)实体,侧边栏区块呈现的是苹果的字段。

Fruit View

使用ECK模块建立及使用自定义实体的介绍到这里就结束了。如果你有按照以上方法去建立你的自定义实体,你将能够利用一些共享模块提供的功能。display suite就是其中之一,它将允许你创建许多不同的方式来显示实体。你也可以使用Entity Reference Field来关联内容类型和自定义实体或者关联自定义实体和其他自定义实体。当然,你也可以用一些其他的方式来实现你的创意,建设你的网站。

建网站虽易,让用户满意不易,且建且珍惜。

标签
Drupal 版本

这篇文章还是没解释清楚实体跟节点的区别,文中的例子用实体来实现并不比用节点实现好多少吧,节点本身还有编辑界面,修改等操作更方便,从存储的角度,也还是一个一个的表,效率也没有提高。大伙的看法呢?