4 Drupal7核心实体API介绍

admin 的头像
Submitted by admin on 星期三, 2015-08-26 09:28

作者:老葛,北京亚艾元软件有限责任公司,http://www.yaiyuan.com
在Drupal7中,核心的实体系统,存放在includes下面的entity.inc文件中,这里面,包含一个DrupalEntityControllerInterface接口、DrupalDefaultEntityController类、EntityFieldQueryException类、EntityFieldQuery类、EntityMalformedException类。所有的实体,必须实现DrupalEntityControllerInterface接口,对于我们常见的大多数实体,只需要继承DrupalDefaultEntityController类即可,如果需要实现的实体不是存放在数据库中的,此时则需要单独的实现DrupalEntityControllerInterface接口。EntityFieldQuery对Entity Field的SQL查询做了封装,当然,封装的不是很彻底,有很多的局限性,对于我们常见的查询,尤其涉及到字段的,用起来非常方便。我们在本章会对EntityFieldQuery做专门的介绍。

Drupal版本:

3 不是所有的东西都是实体

admin 的头像
Submitted by admin on 星期三, 2015-08-26 09:26

​作者:老葛,北京亚艾元软件有限责任公司,http://www.yaiyuan.com
现在,节点、分类术语、评论、用户都统一到了实体上来了,这是不是意味着说,所有的东西都是实体呢?当然不是。在Drupal7的核心系统里面,区块系统就不是实体,菜单系统也不是实体,因此,我们可以说,不是所有的东西都是实体。但是这些东西,正在被转为实体,比如区块,现在有一个第三方模块bean,全称为“Block Entities Aren't Nodes” “区块实体不是节点”,此外,在Drupal8的核心开发里面,菜单连接,也正在被转为实体。此外,比如webform模块,一直都是非常流行的,但是到了Drupal7下面,出现了Entity form模块,与之竞争,将来webform是否会被Entity form模块所取代,这个现在还不好判断。比如在Ubercart、Commerce里面,订单,都已经被处理成为了实体,而在Commerce里面,产品、客户信息都已被处理成为实体。还有我们提到过的,Field Collection模块,字段实体的出现,更是扩展了实体的应用范围。

Drupal版本:

2 Bundle(包)

admin 的头像
Submitted by admin on 星期三, 2015-08-26 09:23

​作者:老葛,北京亚艾元软件有限责任公司,http://www.yaiyuan.com
伴随着,实体的出现,还出现了另一个概念,Bundle,中文可以翻译为“包”。什么是Bundle呢,我们可把它看作,一种实体下面的一个具体实现。以节点为例:

Drupal版本:

1 实体

admin 的头像
Submitted by admin on 星期三, 2015-08-26 09:19

作者:老葛,北京亚艾元软件有限责任公司,http://www.yaiyuan.com
在CCK进入Drupal7内核的时候,很多人进一步思考的CCK的优势,并且认识到,很多其它的系统,比如用户系统、分类系统、评论系统,也都存在利用CCK的需求。因此,在Drupal7下,对CCK模块做了进一步的扩充,并将其更名为Field模块,使得用户可以向节点、评论、分类术语、用户上面添加字段。而这种扩充的结果,就是引入了实体(Entity)这样的一个概念,实体是伴随着Field进入Drupal内核,而衍生抽象出来的一个概念。什么是实体呢?这种概念性质的东西,不是一句话就理解透的,我们看看例子:

Drupal版本:

第1章 实体(Entity)API

admin 的头像
Submitted by admin on 星期三, 2015-08-26 09:11

作者:老葛,北京亚艾元软件有限责任公司,http://www.yaiyuan.com
节点系统,在Drupal里面的历史悠久,是很早很早以前,就有了的一种机制。慢慢的,围绕着节点系统,出现了Flexinode,我们看这个模块的创建日期,2004年2月8日,快9年了,Flexinode允许用户创建新的内容类型,并为内容类型添加字段,随着技术的进步, Flexinode的实现机制跟不上了发展的需要;两年后,也就是2006年,出现了CCK模块,此时Drupal的版本还是4.7;随后,CCK取代了Flexinode,发展成为了Drupal5、Drupal6下面的标准实现;并最终进入了Drupal7的内核,当然进入Drupal7后,名字改为了Field。

Drupal版本:

Think in Drupal 第4集

g089h515r806 的头像
Submitted by g089h515r806 on 星期三, 2015-08-26 01:30

第1章 实体(Entity)API 5
实体 6
Bundle(包) 7
不是所有的东西都是实体 7
Drupal7核心实体API介绍 8
Entity API模块 9
定义自己的实体类型 15
EntityFieldQuery 46
总结 53
第2章 Views 集成 54
Field Validation集成 54
Views的集成 58
Field Collection Views代码分析 75
总结 81
第3章 Rules的集成 82
Rules中的基本术语 82
Entity API提供了默认的Rules集成 83
定义自己的动作 86
将rules规则导出到代码里面 101
为Rules自定义条件 107
实现hook_rules_file_info 110
总结 111
第4章 集成上下文链接 112
接管theme_breadcrumb函数&nbsp

Drupal版本:

8 Translation Management Tool

admin 的头像
Submitted by admin on 星期五, 2015-08-21 09:47

​作者:老葛,北京亚艾元软件有限责任公司,http://www.yaiyuan.com
发现页数不够272页,想了一下,这个模块还没有介绍,我们这里简单介绍一下。这是用来做翻译管理工具的模块,我这里使用的版本是tmgmt-7.x-1.0-beta1。这个模块依赖于entity模块,我们这里使用entity-7.x-1.1。这个模块的目的,是用来实现翻译自动化的,我们去翻译一个节点的时候,里面的内容能够预先的翻译好,比如使用Google翻译,这样我们就不用去Google翻译的页面复制粘贴了。不过令人遗憾的是,TMGMT Translator Google所依赖的Google翻译服务是收费的,没有免费版。还好,微软的提供免费的,我们拿微软的作为例子。我们使用TMGMT Translator Microsoft模块,这里使用的版本是tmgmt_microsoft-7.x-1.0-alpha2。为了启用子模块Translation Management UI,我们还需要安装VBO、Rules模块。我启用了这些模块:Entity Source、Entity Source User Interface、Microsoft Translator、Translation Management Core、Translation Management Field、Translation Management UI,以及它们所依赖的模块。

Drupal版本:

7 面包屑的翻译

admin 的头像
Submitted by admin on 星期五, 2015-08-21 09:42

作者:老葛,北京亚艾元软件有限责任公司,http://www.yaiyuan.com
最后加一句,我想说的是,前面通过jQuery解决的那个问题,后来我回去又想了想,终于想到新闻列表页面和产品列表页面的不同了。原来我为products页面添加了一个菜单位置规则(menu position rule),只不过这个规则后来被禁用了。我们为新闻添加一个同样的规则,并禁用,然后注释掉前面的JS代码。面包屑显示仍然正常。

Drupal版本:

页面

Subscribe to Think in Drupal RSS