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

这里的技术是共享的

You are here

Drupal Entity 实体介绍 第一部分 ----超越节点

shiping1 的头像

Drupal Entity 实体介绍 第一部分 ----超越节点

 

Drupal 7 在架构上面最大的变化之一,就是Drupal 7中引入了实体(Entity)作为抽象内容。为此我看了很多关于Entity的文章,看看Entity是如何运作的,他们到底是什么以及它们如何被用于模块。本章节为实体的第一部分,主要是看看Entity 如何诞生并且应用在Drupal 7上的。

Drupal 7引入了很多大大小小的变化。在这些变化中,使用实体作为主要的抽象内容,是Drupal 底层架构最大的变化。

实体是Drupal 7的一个抽象的概念,他们不是一个面向用户的工具或抽象——纯粹是一个用来处理内容的架构工具。

我原本打算写一篇单独的文章来帮助我们清楚的理解实体是什么。然而,一个文章似乎是不够的!所以现在变成了一系列的文章,我首先要做的一些drupal的历史来看看实体是如何诞生的,然后解释到底是什么是实体,最后试图找出如何以及在何处能用实体编码,来建立更好的模块。

所以首先我们来试着找出Entity是怎么来的,为什么会采纳到Drupal7 中的。


必须提及一下Drupal 6的 Nodes节点。

Nodes(节点), 是Drupal 6中的主要内容单元,作为主要的内容单元,可以认为Drupal主要的抽象,其他很多的内容都基本与节点相关。

已经有很多地方说过了Drupal 的node,是一个非常强大的工具。慢慢的有一些node的加强工具,开始是 Flexinode, 可以用此模块根据需要生成新的自定义节点(node)类型。在此基础上可以有很多灵活多变而非常实际的应用,可以说是drupal扩展模块里功能非常重要的一个,直到一个更强大的模块出现,就是我们熟知的 Content Construction Kit(CCK),使得Nodes 更加的灵活,能够很方便的增加各种各样的字段。CCK的加入,让Drupal 的灵活性达到了前所未有的高度,但如此强大的模块,在drupal 6里面却不是核心模块,以至于“能够添加字段节点” 这个功能成为了Drupal 7的一个主要目标。

让我们把所有的事情变成节点!

与此同时,Drupal 6贡献模块中的反馈还有衍生于cck的模块,都证明了用户非常需要添加字段来完成更多的事情,不仅仅是节点。例如将用户配置文件转换成节点的User Profile 模块——让用户的配置文件支持增加字段的功能。还有是 Node Comment 模块,让评论模块支持添加字段,还有是 Taxonomy node模块。 再一次证明了用户对 “添加字段”的功能的需求。

事实上,“一切都是节点”的想法已经有好长一段历史,一个谷歌搜索显示,Robert Douglass 早在2006年5月就提出,在Drupal的一切都可以是一个节点,并概述了潜在的益处。

“一切都是节点”,这个想法确实带来了不少的变动,个人认为,也正因为这个想法,Entities 就开始萌芽了。

 

让我们介绍一个新概念

 

所以,一方面很多人都在争论为什么“一切都是节点”这个概念是伟大的,以便CCK可以用来添加字段的事情。而另一方面,Drupal团体也有一个巨大想法,在下一版本中(Drupal 7),如何把 CCK的概念引入进去。

在Drupal 7发布时候,有一个比较大的演示,新版本中将会有什么转变,结果相当令人惊讶,通过Drupal 7核心开发人员的努力,“一切都是节点” 变成了可能。

然而Drupal 7 并非是单纯的“一切都是节点”,而是在“一切都是节点”的文化基因下,对drupal 6进行了彻底的底层改造,准确来说,在Drupal 7是“一切都是一个实体”“节点是其中一个实体”。然而,还有用户,分类法词汇和评论等等,都是实体,实体与实体之间,还可以很灵活的沟通。

如果你去有经常去drupal 网站,你可能会找到一个文章叫:“Standarized, pluggable entity loading (nodes, users, taxonomy, files, comments)” - Frando做了一个案例,简化如何处理可加载的物体,以字段实现。

另一个有趣的讨论是:Use the term entity instead of object,开始有人讨论加入 Entity 这个定义,并且 这个路径 表明,仅仅几个月前Drupal中的代码仍不一贯使用一致的术语概念(Entity),但经过这些讨论,这个概念也开始慢慢的形成。

 

Hi Entities

 

屈指一算,仅仅2个月的时间,从Drupal 7中,实体(Entity)横空出世,节点也基于Entity。

如果你想做一些特殊的模块,来处理一些事情,你不必再需要基于cck上面写,让他跟node 关联,而你只需要创建你独有的entity(Awesome Relationships,还有Drupal Commerce是一个很好的例子)。

让我们大胆点去想象,Drupal 7 可以不需要节点,也能做很多事情,因为entity允许你创建自己的“(nodes)”。drupal7 系统中,节点只是其中一个实体。当然,话虽如此,但你还是不能马上的脱离nodes,因为entity 开发需要先对entity有一定的了解。但是看完这个文章后,我相信大家应该对Entity 有一定的了解认知了。

过几天我将会再继续研究,entity 能给我们做什么,什么情况下需要实体,何时需要实体。

来自 http://www.drupalla.com/node/1368
普通分类: