Drupal is a web-based content management system (CMS) and social media platform. While it is useful out of the box, it is designed with developers in mind. The purpose of this book is to explain how Drupal can be extended in many ways and for many purposes. This chapter introduces the terminology, tools, and processes for developing Drupal 7. While subsequent chapters focus on code, this chapter focuses on concepts. We'll talk about the architecture of Drupal, and how you can hook into Drupal at strategic places to extend it for accomplishing new tasks.
猪扒是一个基于网络的知识管理系统(CMD)和一个社会媒体平台。它作为一个CMD和平台有无限多的可能,而且Drupal在设计之初就心系开发者。本书的目的就是要解释Drupal如何能够满足各种需求而进行多样的拓展。本章介绍了一些术语,工具,还有在Drupal7上面开发的步骤。后续的章节将重点介绍开发代码,本章的重点则是在概念上。我们会讲到Drupal的架构,以及应该如何有计划的在Drupal的一些地方进行二次开发来完成新的内容。
The following are the major things we will be covering in this chapter:
下面是本章将要覆盖的一些主要知识:
- An introduction to Drupal development DRUPAL开发的介绍
- The architecture of Drupal Drupal的架构
- Nodes, Fields, Users, and other major subsystems节点,Field,Users等
- Tools for developing in Drupal Drupal开发的工具
By the end of this chapter, you will understand the architectural aspects of Drupal and be ready to start writing code.
在本章的结尾,你应该会理解Drupal的基本架构,准备好去写一些代码了。
Introducing Drupal (for developers) 给开发者的Drupal介绍
Out of the box, Drupal 7 performs all of the standard functions of a web-based content management system. Visitors can view published information on the site, navigate through menus, and view individual pages, complete with images. Users can create accounts and leave comments. Administrators can manage the site configuration and control the permissions levels of users. Editors can create content, preview it, and then publish it when it is ready. Content can be syndicated to RSS, where feed readers can pick up new articles as they are published. With several built-in themes, even the look and feel of the site can easily be changed.
Drupal7具有一个网络CMS需要的全部功能。用户可以看到网站上发布的信息,菜单导航,查看单独的页面,上传图片。用户可以创建账户,进行评论。管理者可以管理网站的配置,并且空值不同级别用户的权限。用户可以修改内容,预览,发布等。网页内容和RSS发布是同步的,读者从RSS中获取到的文章是同步的。通过修改一系列主题,一个网站的外观和使用方式都可以随意修改。
As fantastic as these features are, they will certainly not satisfy the needs of all users. To that end, Drupal's capabilities can be easily extended with modules, themes, and installation profiles. Take a look at Drupal's main website, http://drupal.org , and you will find thousands of modules that provide new features, and thousands of themes that transform the look and feel of the site.
仅仅有上面这些功能,并不能很好的满足所有的用户需求。Drupal的功能是可以通过模块、主题和profiles来修改的。你可以去Drupal的官方网(http://drupal.org)浏览,就会发现上千种提供不同功能的模块,以及上千种不同外观和使用体验的主题。
The fact that almost all aspects of Drupal's behavior can be intercepted and transformed through the module and theme mechanisms has lead many to claim that Drupal isn't just a Content Management System (CMS), but a Content Management Framework (CMF) capable of being re-tooled to specific needs and functional requirements.
几乎所有的Drupal的行为都可以通过module和theme被拦截和改变,也就说 可以被重新组装来满足几乎所有的功能要求。 。正因如此,很多人认为Drupal不应该仅仅被认为是CMS(内容管理系统),而应该被认为是CMF(内容管理框架)。
Whether or not Drupal is rightly called a CMS or a CMF is beyond our present interests, but it is certain that Drupal's most tremendous asset is its extensibility. Want to use a directory server for authentication? There's a Drupal module for that. Want to export data to CSV (Comma Separated Version) files? There are several modules for that (depending on what data you want to export). Interested in Facebook support, integration with Twitter, or adding a Share This button? Yup, there are modules for all of these too—all of which are available at http://drupal.org/ .
Drupal应该被定义为CMS还是CMF不在我们介绍的范畴里,但是Drupal最重要的价值在于可扩展性。想要通过一个目录服务器来做协议认证?Drupal有现成的模块。想要导出CSV格式的数据?有好几个模块可以做这件事。想要和Facebook,Twitter结合,或者增加一个share按钮?是的,这些功能都有对应的模块。
Want to integrate Drupal with that custom tool you wrote to solve your specific business needs? There may not be a module for that, but with a little bit of code, you can write your own. In fact, that is the subject of this book.
希望将Drupal和你平时常用的一些自己开发工具结合起来?可能不会有刚好适合的模块可以做到,但是通过一点开发,就可以了。事实上,这就是本书的要讲的。
The purpose of this book is to get you ramped up (as quickly as possible) for Drupal development. As we move chapter by chapter through this book, we cover the APIs and tools that you will use to build custom Drupal sites, and we don't stick to theory. Each chapter provides working, practically-oriented example code designed to show you how to build code. We follow Drupal coding conventions and we utilize Drupal design patterns in an effort to illustrate the correct way to write code. While we certainly can't write the exact code to meet your needs, our hope is that the code mentioned in this chapter can serve as a foundation for your bigger and better applications.
本书的目的就是让你快速的热身,为开发做准备。书中每一章都会介绍一些实用的API等,既有理论也有实例。每一章都提供了有效的,实用为主的示例代码来展示该怎么去写:开发过程中需要遵循Drupal开发的习惯,Drupal开发的通常设计模式。我们肯定不会写出刚好你想要用的代码,但我们希望章节中的代码可以作为你以后写出更大更好的应用的基础。
So let's get started with a few preliminary matters.
现在让我们开始一些初级的问题:
Technologies that drive Drupal
驱使Drupal的技术
Many books of this ilk will begin with a chapter on installing the platform. We have decided not to follow this pattern for a few reasons. First of all, Drupal is incredibly well documented in this regard. The README file included with Drupal's download should meet your needs. Secondly, our experience has been that such chapters are unnecessary. Software developers rarely need step-by-step guides to installing a system as simple as Drupal.
很多关于drupal的书都会先有一章介绍如何安装这个平台。我们不想这么做,首先是因为DRUPAL的安装文档非常全面,下载到的安装文件夹里面的README文档就够用了。另外本书的读者应该是有经验的开发者,很少需要一步一步的介绍怎么安装一个像DRUPAL这样简单的一个系统。
However, what we do want to start with, is a quick overview of the technologies utilized in Drupal.PHP Drupal is written in the PHP programming language ( http://php.net). PHP is a widely supported, multi-platform, web-centric scripting language. Since Drupal is written in PHP, this book is largely focused on PHP development.One specific piece of information should be made explicit: As of Drupal 7, the minimum PHP version is PHP 5.2 (as of this writing, the current version of PHP is 5.3.3). Prior versions of Drupal included PHP 4.x support, but this is no longer the case.
但是,我们想要从快速的介绍如何使用Drupal的技术开始。Drupal是由PHP编写的。PHP是一种使用广泛,跨平台,基于网络的脚本语言。这本书主要就是讲PHP开发。要提前说明一点:在DRUPAL7中支持的最低版本的PHP是5.2。
Another thing worth mentioning is the style of PHP coding that Drupal uses. While many PHP applications are now written using Object Oriented Programming , Drupal does not follow suit. For many reasons, some historical, some practical, Drupal is largely written using procedural programming . Rather than relying strongly on classes and interfaces, Drupal modules are composed of collections of functions.
还需指出的是在Drupal中使用PHP的编写方式。很多PHP应用现在使用的是面向对象的模式编写,DRUPAL并不是。由于一些历史的或者实用性的原因,DRUPAL使用的是面向过程的编程方式。就是说DRUPAL不强烈的依赖于类和接口,而是有一系列的方法函数组成。
Before anyone jumps to conclusions, though, we would like to make a few qualifications on what we've just said:Drupal frequently uses objects
Drupal does have certain subsystems that are object-oriented Many Drupal modules are substantially object-oriented Drupal makes frequent use of design patterns, for it is certainly the case that procedural code can use design patterns too.
在我们给DRUPAL的编程方式下结论之前,要明白DRUPAL中的很多子系统都是面型对象的变成方式,特别是模块。DRUPAL中也用到了许多的设计模式。因为面向过程的代码也肯定要用到设计模式的。
While the majority of this book uses procedural coding strategies, you will encounter OOP here and there. If you are not familiar with object oriented conventions and coding styles, don't worry. We will explain these pieces as we go.
本书的大部分代码使用了面向过程的编程方式,但也会时不时的用到OOP方式。如果你还不了解OOP编程方式,不要担心,我们在用到的地方会详细解释的。
Databases and MySQLIn the past, Drupal has supported two databases: MySQL and PostgreSQL. Drupal 7 has moved beyond this. Drupal now uses the powerful PDO (PHP Data Objects ) library that is standard in PHP 5. This library is an abstraction layer that allows developers to support numerous databases including MySQL, PostgreSQL, SQLite, MariaDB, and many, many others. While Drupal does testing on only a few specific databases (namely, MySQL, PostgreSQL, and now SQLite), it is possible to move beyond these to SQL Server, Oracle, DB2, and others.
数据库和MSQL: DRUPAL之前就支持两种数据库:MYSQL和POSTGRESQL,DRUPAL7支持的更多,它使用了PHP5中自带的强大的PDO(PHP 数据对象)类库。这个类库是一个抽象层,允许开发者去支持各种各样的数据库,其中包括MYSQL,POSTGRESQL,SQLITE,MARIADB,以及很多很多其他的。虽然我们只测试过DRUPAL在少数的几个数据库上(MYSQL,POSTGRESQL,SQLITE),但是应该用在ORCLE,DB2等都没有问题。
However, for the sake of size and readability, we have focused our examples on MySQL. We believe that our SQL should run on MariaDB, PostgreSQL, and SQLite without modification, but we have not made any attempt to test against other databases. If you find a bug, we'd appreciate hearing about it. Packt Publishing tracks errata on their website ( http://packtpub.com), and you can submit errors that you find through the form you find there.
Drupal provides a database API along with some SQL coding conventions (such as "don't use LIMIT in your SQL"). The intent of these is to combine code and convention to make it as easy as possible to write portable code. Thus, we not only illustrate the API throughout this book, but we also focus on writing SQL statements that comply with standard Drupal conventions.
但是,限于规模和可读性的原因,我们主要是集中在用MYSQL.我们相信这些SQL语句在MARIADB,POSTGRESQL和SQLITE等上面用都没有问题。
HTML, CSS, and JavaScript The de facto web data format is HTML (HyperText Markup Language) styled with CSS (Cascading Style Sheets). Client-side interactive components are scripted with JavaScript. As Drupal developers, we will encounter all three of these technologies in this book. While you needn't be a JavaScript ninja to understand the code here, you will get the most from this book if you are comfortable with these three technologies.
HTML,CSS和JAVASCRIPT,真正的互联网数据格式应该是HTML和CSS,JAVASCRIPT.因而你要对这三者都有所了解。
Other technologies
The Internet thrives on change, it seems, and there are many other web technologies that have become common. Here and there, we will mention technologies such as RSS (Really Simple Syndication), XML (eXtensible Markup Language) , XML-RPC, and others. However, these are all of secondary importance to us. While Drupal offers support for many of these things, using them is not integral to mo dule or theme development.
其他的技术:
还有很多其他的技术都在流行着:RSS,XML,XML-RPC等等,这些都不是本书重点。
The web server Apache has long been the predominant web server, but it is by no means the only server. While Drupal was originally written with Apache in mind, many other web servers (including IIS, LigHTTPD, and nginx) can run Drupal.
网站服务器APACHE长期都主导的服务器类型,但是这绝对不是唯一的网站服务器。DRUPAL支持APACHE,也支持很多其他的服务器:IIS,LIGHTTPD,NGINX等。
We do not explicitly cover the web server layer anywhere here, primarily because development rarely requires working at that low level. However, Drupal expects a fair amount of processing from the web server layer, including handling of URL rewriting.
本书中不会特别讲到网站服务器的问题,主要是因为DRUPAL中的开发很少涉及到那么底层的东西,但是DRUPAL需要很多底层的支持,比如URL REWRITING.
WINDOWS,LINUS.MAC OS,BSD这些之间的恩怨引起了网上不上的纷争。但是,我们在这里不需要任何接入这写讨论。DRUPAL在大多数操作系统的跑起来都没有问题,其中包括WINDOWS和UNIX/LINUX.
一定知道的话,本书的作者主要用的是LINUX和MAC OS.但是,我们的代码应该来说在任何DRUPAL系统上都可以用。
废话说了一堆,让我们来真正了解一下DRUPAL的架构。
在之前的部分,我们介绍了驱动DRUPAL的技术。但是,这些技术是怎么结合在一起的呢?下面是DRUPAL架构的图:
上图粗略的展示了DRUPAL的架构大概是什么样子。也指出了DRUPAL一般是怎么样处理一个请求的。之后我们会更多的谈到这个问题,在这里,先简单的说一下。
我们将简化的过一遍一个的典型的DRUPAL上接受到的请求:
- 一个用户在地址栏输入http://example.com/node/123,并按下enter键
- 浏览器和example.com的网站服务器通信并且请求/node/123的资源
- 网站服务器识别出来这个请求必须由php来处理,并且开启一个PHP环境来处理这个这个请求
- PHP执行DRUPAL的INDEX.PHP文件,给它传递/NODE/123这个路径
- DRUPAL的核心开始了一个启动程序,启动了一些资源,并且将使用菜单系统来找出如何处理/node/123 ,
- 主题系统接收到这个节点信息,并且将formatting和style的信息加载上去。
- DRUPAL核心完成了所有的过程,
上面的说明并没有讲述所有的细节(废话),但是也提供了一个大致的DRUPAL功能。在接下来的部分,我们会花一些时间看大的DRUPAL子系统:NODES, THEMS,MENUS等。但是在这里,我们更注重的是解释这些个子系统怎么糅合在一起工作的。前面我们看到了在正常的情况下,php加载了DRUPAL的INDEX.PHP文件来处理一个请求。这个文件负责最初的DRUPAL环境的建设,并且是被我们称作DRUPAL核心的一部分。
DRUPAL核心中包括很多类库和及几十个核心的模块,INDEX.PHP文件会加载一些类库并且初始化一个DRUPAL引导进程。
Drupal core libraries
The core libraries provide the functions and services used throughout Drupal. Facilities for interacting with the database, translating between languages, sanitizing user data, building forms, and encoding data are all found in Drupal's core libraries. These tools are what we might call utilities: They facilitate effective data processing, but are not responsible for handling the lifecycle of a request. The lifecycle is handled by modules.
核心的类库提供了DRUPAL需要的基本功能:和数据库交互工具,语言之间的翻译 ,对用户数据进行消毒,建立表格,还有加密数据等等。这些工具是一种设施性质的工具:它们会有效的处理数据,但是并不负责整个请求的生命周期,像生命周期这样的东西是由模块来处理的、
Once Drupal has loaded core libraries and initialized the database, it loads the enabled modules and themes, and then it begins a systematic, step-by-step process of handling the request. This process is what I call the lifecycle of a request. It works as follows.
一旦DRUPAL加载了这些核心类库,初始化了数据库,就会加载实用的模块和主题,并且开始了一个系统的,一步一步的处理请求的过程。这个过程是我们叫做生命周期的过程,下面是它的工作流程:
Drupal steps through a number of pre-determined operations. It checks to see if any modules need to be initialized. It looks up what code is responsible for handling the given URL. It checks whether the current user has access to the requested resource. It checks to see if some data can be retrieved from cache. It continues stepping through such operations until the request is complete.
DRUPAL面对一系列实现定义好的操作,检查所有的模块是否需要被初始化:它会查看哪些代码要来负责处理请求的URL,查看是否当前的用户有访问权限,查看是否有些数据可以直接从缓存中获取。DRUPAL一步步做这样的检查,知道整个 请求被完成。
However, the most important thing about this step-by-step process is the way Drupal does it.
但是,在这种一步一步的进程中,最重要的时候DRUPAL实现的方法。
Drupal hooks
The Drupal core doesn't attempt to do the processing for each of these steps. Instead,
after each step, it offers one or more modules the opportunity to handle that step . Put in
Drupal parlance, it offers opportunities for modules to hook into the lifecycle.
DRUPAL 钩子
DRUPAL的核心不会亲自尝试去处理这些步骤中的每一步。而是,在每一步之后,它向一个或者多个模块提供处理这个步骤的机会,用DRUPAL里面的说法就是,它为模块提供HOOK到生命周期上的方式。
For example, we noted that Drupal checks to see if any module needs to be
initialized. What it actually does, is look to see if any modules implement a hook for
initialization. How does it do this? It scans the loaded modules to see if any of them
implement the function hook_init(). To implement a hook in Drupal is to declare a
function that follows the hook naming pattern. For a fictional module named hello
to implement hook_init(), it would merely need to declare a function named
hello_init() (replacing the word hook with the name of the module).
打个比方,我们注意到DRUPAL会查看是否任何模块需要被初始化。而详细一点说,是DRUPAL查看是否有任何模块执行一个初始化的HOOK.那它如何知道谁执行了这么样一个HOOK呢?它扫描所有的已经加载的模块,检查这些模块是否有执行一个HOOK_INIT()方法,要执行一个DRUPAL里面的HOOK,就要声明一个遵循了HOOK命名规则的方法。假设有一个叫做hello的模块,在这个模块中要执行hook_init()这个钩子的话,它需要在内部定义一个hello_init()方法。
具有面向对象开发经验,或有扎实的设计模式功底的开发者们可能会认出这种定义模式类似于‘事件处理范式’,是被动观察者的一种模型。当一个时间发生的时候,DRUPAL做的是允许模块有对这个事件进行相应的机会。 |
通过hook_init()这个钩子,DRUPAL提供给所有模块在请求的最开始就初始化自身或相关资源的机会,一旦所有的模块被初始化了,DRUPAL就进行到了下一步。在处理请求的过程中,就这样一步一步走下去,它会一个一个调用Hook,给予所有的模块做自己的事情的机会。请求走到最后一步,调用的hook是hook_exit(),然偶它会将要返回的数据给客户端,终结这个请求。 |
DRUPAL的钩子系统可能是对DRUPAL进行开发中最最重要的一点。几乎所有的模块其实都是一堆hook执行方法组合起来的,drupal在运行过程中会自动的调取这些方法来处理请求。不止是DRUPAL核心会申明和调用钩子,任何模块都可以申明和调用自己的hook.许多模块会自己定义自己的钩子,这样可以和其他模块的服务进行深层次的整合。 |
DRUPAL核心模块 前面已经说到,DRUPAL提供了一些核心模块,核心模块是不能被废掉不用的,因为他们的功能和整个系统的基础功能是结合在一起的。但是和其他的扩展模块(包括我们将要自己开发的模块)一样,核心模块工作的原理也是通过执行hooks. |
每个核心模块都会在DRUPAL的hook号召下,返回进行必要的响应,在请求中做重要的工作。 在接下来的部分,我们将详细的讨论一些核心模块,解释这些模块到底是什么意义。 |
在接下来的章节里面,我们将要讨论一些更加细节的核心模块,解释一下这些模块起的作用。 |
数据库 我们已经粗略的看了一下典型的DRUPAL请求,并且我们已经学习到了一点关于典型的DRUPAL请求的知识,并且我们还了解了一点模块呀类库呀。那么数据库呢? |
不想其他的很多架构模式,对于DRUPAL来说数据库并不是最首当其冲的地位。数据库层不是一个模块,模块甚至都不需要特别的申明如何与数据库交互。事实上,大多数的DRUPAL的模块都从来不直接和数据库交互。 |
NOTE:DRUPAL结构和MVC框架不同,不要求模块跟着一个MVC规则走。因而,一个模块不需要依靠一个数据库结构(MODELS),一个控制器(CONTROLLER),甚至一个用户主题(VIEW)而存在。 |
DRUPAL不将数据库看做是最中心的架构内容,DRUPAL只是提供了一个API来和数据库联系。在DRUPAL里面,数据库只是一个放数据的地方。需要一些自定义的表?DRUPAL可以提供定义它们的方法。需要从数据抽取数据,更新或者插入数据?DRUPAL提供了一些函数方法和一个OO类库来做这件事情。但是,如果你不需要在你的代码里面做这件事情,你就可以完全不用和数据库交互。事实上,下一章里,我们写的的第一个模块,就完全不要用到一个SQL语句。 |
在本书的后面,我们将要看看怎么样去和数据库进行有效的交互。【不止是数据,DRUPAL数据库不只是存储一些数据内容,还保留一些配置,缓冲,元数据,架构信息,甚至还有PHP代码等】DRUPAL不以数据库为中心,但离不开数据库。在初始化过程中,DRUPAL会和数据库连接,并且从中获取一定的配置信息。之后,很多核心模块加载上来,它们也需要从数据库中获取或者更新信息。对于大多数的模块,数据库就是一个数据存储的地方。 |
主题系统 DRUPAL将系统的外观和使用分离出来,作为可编程的主题。 有一部分主题系统存在于DRUPAL的核心类库中,这一部分负责初始化主题,并且指定在特定情况下要使用哪个主题方法和模板。 但是主题代码主要存在于主题和模块中。 一个主题是是一个系列代码,类似于一个模块,提供了转化原始数据到格式化的输出。一个网站至少需要一个主题来定义页面外观。 |
但是,不是所有的主题代码都在主题里面。一个特别的地方是,DRUPAL可以在模块里面定义其缺省的主题,但是之后也提供了可以选择其他主题的方法。换句话说,一个模块可能定义了大概的外观,但是DRUPAL中还提供了给开发者自定义主题和修改外观的方法。如果这些听起来很难理解,不用担心,在第三章第四章都会详细说道。现在我们已经快速的讲述了整体架构,我们接下来将快速的梳理一遍DRUPAL的主要的子系统: |
DRUPAL的主要子系统在之前的部分中,我们窥见了DRUPAL架构的一斑。现在我们将进一步了解DRUPAL提供的一些子系统。主题第三章和第四章将更详细的讲述主题的子系统,这里先提前说明一些大概的情况。 |
我们不能随便修改DRUPAL的核心代码,但是主题的模块都可以对外观产生影响。在本书中,我们的重点将是模块,但在模块里面也会涉及到主题方法和模板。 |
菜单DRUPAL不只是存储一些内容,还要记录一些关于网站如何组织内容的细节信息。比如,数据内容相互之间的联系等等。存储上面这些信息的主要方法就是通过菜单子系统。菜单提供了用于生成,检索和修改描述网站结构的API.简单的说,菜单子系统控制了系统的导航菜单。【两个菜单系统?初学DRUPAL开发者可能会感到疑惑,因为在应用的前端控制器叫做MENU ROUTER,但是这个和菜单系统并不一样,这个MENU ROUTER主要负责将URL映射到回调函数。我们在后面的章节中还会讲到MENU ROUTER的。】 |
菜单的机构是分层的,像树枝分叉一样的机构。一个菜单项可能有多个子菜单,每一个可能有他们自己的子菜单等。这样,我们可以用菜单系统将网站一分再细分。节点节点子系统可以说是我们需要了解的最最重要的子系统了。在DRUPAL的世界中,一个节点是基于文本的可以发布的内容。节点可以有很多属性值,但基本都会有一个TITLE,BODY和一些其他的附属数据,如时间戳,发布时间和作者ID等等。 |
节点系统基本是在节点模块中执行的。这个非常成熟的模块提供了几十个HOOK,这样很多其他的模块也可以和节点模块进行交互。基本所有的网站内容都是以节点形式存在,理解节点系统对于DRUPAL开发者来说是必须的。因此,我们在书中会贯穿这个系统的很多方面来讲。文件在之前的DRUPAL版本中,外部生成的文件(特别是图片)不是由DRUPAL直接处理的,而是有很多其他的模块来处理这些文件。在DRUPAL7中不是这样的,现在DRUPAL7 中有一个文件中心子系统,这意味着处理图片和文档比之前要容易一些。现在有一个文件模块用来处理文件系统,在FILES.INC核心类库中,第11章将详细讲这个。 |
用户DRUPAL不止是一个CMS,更是一个社会媒体分享平台。一个成熟的平台必须有一个强健的用户管理系统,用户不止是管理员,还有全部的网站使用人员。DRUPAL提供了这样一个用户子系统可以让开发者介入几乎所有的用户生命周期中:处理用户资料中的数据信息,用户应该有什么权限,用什么加密方式加密用户密码等。DRUPAL的用户系统还可以用于验证,LDAP整合,OPENID等。本书还会提到用户系统,特别是权限许可方面。 |
评论:评论机制是最常见的社交网络的功能,DRUPAL提供了用于评论节点(并衍生到其他数据类型)的评论子系统。 |
有些人可能会觉得评论是一种节点类型(有一些模块也的确是这么做的),但是DRUPAL的开发者们将评论作为另外一种单独的类型。这个COMMENT模块包括了评论代码,但是,和节点子系统一样,它提供了很多HOOKS,这样很多其他的模块也可以参与交互。 |
字段和实体在7之前的版本中,DRUPAL的节点系统是唯一的用于创建结构化文本内容的子系统。(评论子系统的功能过于专一不便于扩展)而扩展节点的方法有两种:1.自定义节点类型;2.使用使用CONTENT CONSTRUCTION KIT (CCK)来建立节点类型。但是,从DRUPAL7开始,引入两种可扩展的子系统来改变这个格局:1.字段子系统引进了CCK的大部分功能。2.实体子系统可以用于定义很多其他的不是节点的数据类型。这些子系统已经在DRUPAL开发者中产生了不小的影响,例如DRUPAL的商务模块就在生成社会化的实体类型方面很厉害。上述连个子系统都是新的,很重要,也很复杂,所以我们将在第六章中讲到。 |
API表格另外一个著名的子系统是表格API。这个系统提供了一个强健的用于定义,展示,验证和提交的表格开发工具。它减少了开发表格的工具量,还增加了安全性。FAPI是DRUPAL自带的,我们将多次使用到它。安装PROFILES可定制的安装过程有益于用户实例。DRUPAL提供了安装PROFILES子系统可以用来创建可定制的安装。 |
使用这个子系统,开发者可以设置可定制的主题和模块,修改安装参数,和提供啊安装成熟的DRUPAL网站的效率。简单测试在DRUPAL7中,开发者可以使用方法和单元测试方法来验证他们的代码。我们在本书中都会用到测试,从第二章开始就会有。 |
区块大多数的网站不止有主要的内容,还有一些其他的内容,在主要内容的上方,旁边,下方。DRUPAL的区块子系统就可以处理这些内容的展示。将在第二章中开发我们的第一个block.其他的子系统上面已经提到了一些很牛的系统,但是不是全部。还有很多其他的子系统也很重要,但不是在核心里面,可以通过第三方模块中提供。其他的一些子系统会在书中提到,但是DRUPAL是一个很成熟的系统,没有一本书可以完全的讲清楚所有的模块,所以,书中我们将提供找到这些模块的方法和地方。 |
开发DRUPAL代码的工具下面我们介绍一些可以简化开发过程的工具: |
我们认为你已经拥有了自己的网站服务器和自己的PHP开发工具。本书的作者们使用编辑器,操作系统等等都不一样,所以我们不统一给出什么工具什么环境是最好的,而且DRUPAL自身也不是很挑剔。如果你刚刚接触DRUPAL卡法,那么你可以去看看ACQUIA DRUPAL (http://acquia.com),他们提供了整套的工具。虽然用PHP的DEBUGGER 不是必须的,但是使用XDEBUG和ZEND DEBUGGER对开发是有帮助的(本书的作者之一学习DRUPAL的方法就是通过DEBUGGER一步一步的走过一整个页面)。 |
使用GIT和CVS做版本控制管理源代码是任何软件开发生命周期的主要部分。以前,DRUPAL的源码是通过很严格的CVS(Concurrent Versiong System)工具来处理。现在DRUPAL改为用GIT来控制。在我们开始使用DRUPAL代码工作之前,先了解如何使用GIT工具会很有帮助。GIT工具从命令行工具到桌面应用都有,种类繁多。 |
本书的代码和GIT 本书的作者已经使用了GIT一段时间。我们尽力是的我们的代码可以通过GIT存储。你可以通过下面的地址访问本书中的所有代码: |
API网站和代码标准要写好DRUPAL代码,需要强大的背景知识,当然,本书的目的就提供这样的背景知识。但是有两个不断更新的DRUPAL开发参考资源可以提供更多的帮助:1.官方在线API文档。基本上是关于所有的在线代码文档。DOXYGEN是用来抽取并且规范化文档的工具。http://api.drupal.org.开发过程中要尽力保证代码干净,统一,可读性。 |
成千上万的开发者对DRUPAL的开发贡献了自己的力量,如果没有基本的代码国发,这些代码就是一堆乱码。要再做开发的时候需要花很多很多时间去解密别人在写什么而不是花时间在开发上面。DRUPAL网站有一个目录(http://drupal.org/node/360052)其中包含了代码标准(http://drupal.org/coding-standards) |
基于开发者的模块DRUPAL中有几个专用于开发和管理的模块值得我们关注。这些工具可以简化开发过程。开发模块:开发者模块提供了几个非常成熟的工具用于帮助开发者创建和调试DRUPAL代码。要了解更多,请访问 |
开发者模块有几点功能:1.用于批量处理对象和数组来输出2.用于分析数据库的使用和表现3.一个主题工具定义了一个页面的那些属性通过模板中的那个方法来定义的。4.一个内容生成器来快速的增加你网站的内容用于测试。 |
DRUSH(DRUPAL的SHELL)有的时候使用命令行做一些操作要简单的多。DRUSH就提供了一个命令行的DRUPAL接口。可以通过命令窗口的几个字符就能执行复杂的操作:在开发的时候,我们经常需要清除缓存,跑一些任务或者分配数据给一个远程服务器。DRUSH可以帮助我们做到这点。 |
CODERCODER模块提供两个主要的功能:1.帮助检测DRUPAL编码的标准2.帮助自动转化模块从一个版本到另一个版本 对于刚刚开始DRUPAL编码的人,有一个工具自动检测代码是否遵循现有的标准是很方便的。 |
总结这一章是一个大概的总结,我们看到了DRUPAL开发者使用的技术,DRUPAL的框架。我们还大致的描述了一些优秀的DRUPAL子系统,了解了在使用DRUPAL的时候什么样的开发者工具会有帮助。下一章开始,我们将要写代码了,事实上,接下去的每一章的重点都是实用的开发。第二章开始先对BLOCK系统进行介绍,并且我们会开始写第一个模块哦! |